From 31073b601673b1f26b6049cc4046bacad7d80a23 Mon Sep 17 00:00:00 2001 From: sauravniraula Date: Mon, 23 Jun 2025 15:13:04 +0545 Subject: [PATCH] refactor!: use presenton docker codebase --- .dockerignore | 9 + .gitignore | 197 +- Dockerfile | 53 + Dockerfile.dev | 43 + README.md | 157 +- app/ipc/export_handlers.ts | 58 - app/ipc/footer_handlers.ts | 32 - app/ipc/index.ts | 18 - app/ipc/log_handler.ts | 50 - app/ipc/read_file.ts | 9 - app/ipc/slide_metadata.ts | 351 - app/ipc/theme_handlers.ts | 32 - app/ipc/upload_image.ts | 28 - app/ipc/user_config_handlers.ts | 12 - app/main.ts | 98 - app/preloads/index.ts | 26 - app/types/index.d.ts | 27 - app/utils/constants.ts | 16 - app/utils/dialog.ts | 26 - app/utils/index.ts | 83 - app/utils/servers.ts | 117 - build.js | 23 - docker-compose.yml | 54 + .../Fraunces/Fraunces-Regular.otf | Bin .../Inria Serif/InriaSerif-Regular.ttf | Bin .../Montserrat/Montserrat-Regular.ttf | Bin .../Satoshi/Satoshi-Regular.otf | Bin .../fastapi/fonts => fonts}/inter/Inter.otf | Bin nginx.conf | 29 + package-lock.json | 5984 ----------------- package.json | 40 - resources/ui/assets/css/tailwind.css | 4270 ------------ resources/ui/assets/css/tailwind.import.css | 1 - resources/ui/assets/images/presenton_logo.png | Bin 882000 -> 0 bytes .../assets/images/presenton_short_filled.png | Bin 12167 -> 0 bytes resources/ui/homepage/index.html | 32 - resources/ui/homepage/script.js | 0 servers/fastapi/.vscode/settings.json | 7 - .../fastapi/api/assets/icons_vectorstore.json | 1 + servers/fastapi/api/main.py | 26 +- servers/fastapi/api/models.py | 11 + .../handlers/decompose_documents.py | 6 +- .../handlers/delete_presentation.py | 2 +- .../api/routers/presentation/handlers/edit.py | 31 +- .../presentation/handlers/export_as_pptx.py | 8 +- .../presentation/handlers/generate_data.py | 68 +- .../presentation/handlers/generate_image.py | 6 +- ...enerate_titles.py => generate_outlines.py} | 30 +- .../handlers/generate_presentation.py | 190 + .../generate_presentation_requirements.py | 8 +- .../handlers/generate_research_report.py | 6 +- .../presentation/handlers/generate_stream.py | 186 +- .../handlers/list_ollama_pulled_models.py | 31 + .../handlers/list_supported_ollama_models.py | 16 + .../handlers/pull_ollama_model.py | 104 + .../presentation/handlers/search_icon.py | 4 +- .../handlers/update_slide_models.py | 20 +- .../presentation/handlers/upload_files.py | 6 +- .../handlers/upload_presentation_thumbnail.py | 8 +- .../mixins/fetch_assets_on_generation.py | 58 + .../mixins/fetch_presentation_assets.py | 31 +- .../api/routers/presentation/models.py | 51 +- .../api/routers/presentation/router.py | 125 +- servers/fastapi/api/services/instances.py | 4 +- servers/fastapi/api/services/logging.py | 6 - servers/fastapi/api/services/redis.py | 109 + servers/fastapi/api/sql_models.py | 10 +- .../api/utils/supported_ollama_models.py | 253 + servers/fastapi/api/{ => utils}/utils.py | 57 +- .../api/utils/variable_length_models.py | 46 + servers/fastapi/assets/icons/deepseek.png | Bin 0 -> 23192 bytes servers/fastapi/assets/icons/gemma.png | Bin 0 -> 70827 bytes servers/fastapi/assets/icons/meta.png | Bin 0 -> 26291 bytes servers/fastapi/assets/icons/qwen.png | Bin 0 -> 20653 bytes servers/fastapi/graph_processor/models.py | 26 +- .../fastapi/image_processor/icons_finder.py | 4 +- .../icons_vectorstore_utils.py | 2 +- .../fastapi/image_processor/images_finder.py | 33 +- servers/fastapi/image_processor/utils.py | 4 +- servers/fastapi/poetry.lock | 4037 ----------- servers/fastapi/poetry.toml | 3 - .../document_summary_generator.py | 19 +- .../fastapi/ppt_config_generator/models.py | 41 +- .../fastapi/ppt_config_generator/parsers.py | 9 + .../ppt_outlines_generator.py | 84 + .../ppt_title_summary_generator.py | 85 - .../structure_generator.py | 76 + .../ppt_generator/fix_validation_errors.py | 21 +- servers/fastapi/ppt_generator/generator.py | 175 +- .../models/content_type_models.py | 155 +- .../ppt_generator/models/llm_models.py | 289 +- .../models/llm_models_with_validations.py | 295 + .../ppt_generator/models/other_models.py | 29 +- .../models/query_and_prompt_models.py | 4 +- .../ppt_generator/models/slide_model.py | 3 +- .../fastapi/ppt_generator/slide_generator.py | 113 +- .../ppt_generator/slide_model_utils.py | 51 +- servers/fastapi/pyproject.toml | 31 - servers/fastapi/requirements.txt | 121 + servers/fastapi/server.py | 2 +- servers/fastapi/server.spec | 44 - servers/fastapi/server_autoreload.py | 2 +- servers/fastapi/server_test.py | 2 +- servers/fastapi/test.py | 7 +- servers/fastapi/tests/test_ollama.py | 62 + servers/fastapi/tests/test_pdf_to_image.py | 4 +- .../components/CustomThemeSettings.tsx | 2 + .../components/IconsEditor.tsx | 5 +- .../components/ImageEditor.tsx | 71 +- .../components/MarkdownEditor.tsx | 31 + .../components/UserAccount.tsx | 82 +- .../components/mini-slides/Type1Mini.tsx | 3 +- .../components/mini-slides/Type4Mini.tsx | 5 +- .../components/mini-slides/Type7Mini.tsx | 7 +- .../components/mini-slides/Type8Mini.tsx | 6 +- .../components/slide_layouts/SlideFooter.tsx | 4 +- .../context/footerContext.tsx | 16 - .../create/components/CreatePage.tsx | 55 +- .../create/components/OutlineItem.tsx | 64 +- .../components/DocumentPreviewPage.tsx | 29 +- .../presentation/[id]/loading.tsx | 18 + .../presentation/components/Header.tsx | 134 +- .../components/PresentationPage.tsx | 32 +- .../presentation/components/SidePanel.tsx | 2 +- .../presentation/components/SlideContent.tsx | 8 +- .../services/api/presentation-generation.ts | 101 +- .../services/footerService.ts | 24 +- .../services/setting-store.ts | 20 +- .../services/themeService.ts | 24 +- .../theme/ThemePage.tsx | 6 +- .../upload/components/UploadPage.tsx | 38 +- .../(presentation-generator)/upload/page.tsx | 2 +- .../app/(presentation-generator)/utils/log.ts | 11 - .../(presentation-generator)/utils/others.ts | 39 +- .../nextjs/app/api/can-change-keys/route.ts | 9 + servers/nextjs/app/api/export-as-pdf/route.ts | 34 + servers/nextjs/app/api/footer/route.ts | 60 + .../app/api/get-theme-from-name/route.ts | 15 + servers/nextjs/app/api/read-file/route.ts | 19 + .../nextjs/app/api/slide-metadata/route.ts | 415 ++ .../app/api/static/[...filepath]/route.ts | 48 + servers/nextjs/app/api/theme/route.ts | 49 + servers/nextjs/app/api/upload-image/route.ts | 47 + servers/nextjs/app/api/user-config/route.ts | 44 + servers/nextjs/app/dashboard/api/dashboard.ts | 33 +- .../app/dashboard/components/Header.tsx | 7 +- .../dashboard/components/PresentationCard.tsx | 3 +- servers/nextjs/app/layout.tsx | 1 + servers/nextjs/app/providers.tsx | 5 +- servers/nextjs/app/robots.ts | 12 - servers/nextjs/app/setting/SettingPage.tsx | 192 - servers/nextjs/app/settings/SettingPage.tsx | 397 ++ .../app/{setting => settings}/loading.tsx | 0 .../nextjs/app/{setting => settings}/page.tsx | 0 servers/nextjs/app/sitemap.ts | 74 - servers/nextjs/app/storeInitializer.tsx | 97 + servers/nextjs/components/BackBtn.tsx | 4 +- servers/nextjs/components/Home.tsx | 427 +- servers/nextjs/data/presenton-settings.db | Bin 0 -> 12288 bytes servers/nextjs/next.config.mjs | 9 +- servers/nextjs/package-lock.json | 894 ++- servers/nextjs/package.json | 8 +- .../store/slices/presentationGeneration.ts | 25 +- servers/nextjs/store/slices/userConfig.ts | 27 + servers/nextjs/store/store.ts | 6 +- servers/nextjs/types/global.d.ts | 10 +- servers/nextjs/utils/constant.ts | 26 - servers/nextjs/utils/helpers.ts | 18 - servers/nextjs/utils/storeHelpers.ts | 30 + start.js | 90 + tsconfig.json | 108 - 171 files changed, 5871 insertions(+), 17444 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 Dockerfile.dev delete mode 100644 app/ipc/export_handlers.ts delete mode 100644 app/ipc/footer_handlers.ts delete mode 100644 app/ipc/index.ts delete mode 100644 app/ipc/log_handler.ts delete mode 100644 app/ipc/read_file.ts delete mode 100644 app/ipc/slide_metadata.ts delete mode 100644 app/ipc/theme_handlers.ts delete mode 100644 app/ipc/upload_image.ts delete mode 100644 app/ipc/user_config_handlers.ts delete mode 100644 app/main.ts delete mode 100644 app/preloads/index.ts delete mode 100644 app/types/index.d.ts delete mode 100644 app/utils/constants.ts delete mode 100644 app/utils/dialog.ts delete mode 100644 app/utils/index.ts delete mode 100644 app/utils/servers.ts delete mode 100644 build.js create mode 100644 docker-compose.yml rename {servers/fastapi/fonts => fonts}/Fraunces/Fraunces-Regular.otf (100%) rename {servers/fastapi/fonts => fonts}/Inria Serif/InriaSerif-Regular.ttf (100%) rename {servers/fastapi/fonts => fonts}/Montserrat/Montserrat-Regular.ttf (100%) rename {servers/fastapi/fonts => fonts}/Satoshi/Satoshi-Regular.otf (100%) rename {servers/fastapi/fonts => fonts}/inter/Inter.otf (100%) create mode 100644 nginx.conf delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 resources/ui/assets/css/tailwind.css delete mode 100644 resources/ui/assets/css/tailwind.import.css delete mode 100644 resources/ui/assets/images/presenton_logo.png delete mode 100644 resources/ui/assets/images/presenton_short_filled.png delete mode 100644 resources/ui/homepage/index.html delete mode 100644 resources/ui/homepage/script.js delete mode 100644 servers/fastapi/.vscode/settings.json create mode 100644 servers/fastapi/api/assets/icons_vectorstore.json rename servers/fastapi/api/routers/presentation/handlers/{generate_titles.py => generate_outlines.py} (57%) create mode 100644 servers/fastapi/api/routers/presentation/handlers/generate_presentation.py create mode 100644 servers/fastapi/api/routers/presentation/handlers/list_ollama_pulled_models.py create mode 100644 servers/fastapi/api/routers/presentation/handlers/list_supported_ollama_models.py create mode 100644 servers/fastapi/api/routers/presentation/handlers/pull_ollama_model.py create mode 100644 servers/fastapi/api/routers/presentation/mixins/fetch_assets_on_generation.py create mode 100644 servers/fastapi/api/services/redis.py create mode 100644 servers/fastapi/api/utils/supported_ollama_models.py rename servers/fastapi/api/{ => utils}/utils.py (72%) create mode 100644 servers/fastapi/api/utils/variable_length_models.py create mode 100644 servers/fastapi/assets/icons/deepseek.png create mode 100644 servers/fastapi/assets/icons/gemma.png create mode 100644 servers/fastapi/assets/icons/meta.png create mode 100644 servers/fastapi/assets/icons/qwen.png delete mode 100644 servers/fastapi/poetry.lock delete mode 100644 servers/fastapi/poetry.toml create mode 100644 servers/fastapi/ppt_config_generator/parsers.py create mode 100644 servers/fastapi/ppt_config_generator/ppt_outlines_generator.py delete mode 100644 servers/fastapi/ppt_config_generator/ppt_title_summary_generator.py create mode 100644 servers/fastapi/ppt_config_generator/structure_generator.py create mode 100644 servers/fastapi/ppt_generator/models/llm_models_with_validations.py delete mode 100644 servers/fastapi/pyproject.toml create mode 100644 servers/fastapi/requirements.txt delete mode 100644 servers/fastapi/server.spec create mode 100644 servers/fastapi/tests/test_ollama.py create mode 100644 servers/nextjs/app/(presentation-generator)/components/MarkdownEditor.tsx create mode 100644 servers/nextjs/app/(presentation-generator)/presentation/[id]/loading.tsx rename app/services/settings-store.ts => servers/nextjs/app/(presentation-generator)/services/setting-store.ts (68%) delete mode 100644 servers/nextjs/app/(presentation-generator)/utils/log.ts create mode 100644 servers/nextjs/app/api/can-change-keys/route.ts create mode 100644 servers/nextjs/app/api/export-as-pdf/route.ts create mode 100644 servers/nextjs/app/api/footer/route.ts create mode 100644 servers/nextjs/app/api/get-theme-from-name/route.ts create mode 100644 servers/nextjs/app/api/read-file/route.ts create mode 100644 servers/nextjs/app/api/slide-metadata/route.ts create mode 100644 servers/nextjs/app/api/static/[...filepath]/route.ts create mode 100644 servers/nextjs/app/api/theme/route.ts create mode 100644 servers/nextjs/app/api/upload-image/route.ts create mode 100644 servers/nextjs/app/api/user-config/route.ts delete mode 100644 servers/nextjs/app/robots.ts delete mode 100644 servers/nextjs/app/setting/SettingPage.tsx create mode 100644 servers/nextjs/app/settings/SettingPage.tsx rename servers/nextjs/app/{setting => settings}/loading.tsx (100%) rename servers/nextjs/app/{setting => settings}/page.tsx (100%) delete mode 100644 servers/nextjs/app/sitemap.ts create mode 100644 servers/nextjs/app/storeInitializer.tsx create mode 100644 servers/nextjs/data/presenton-settings.db create mode 100644 servers/nextjs/store/slices/userConfig.ts create mode 100644 servers/nextjs/utils/storeHelpers.ts create mode 100644 start.js delete mode 100644 tsconfig.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..c0e3eddd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.venv +.env +.next +node_modules +out +build +.git +.gitignore +tmp \ No newline at end of file diff --git a/.gitignore b/.gitignore index 53a24601..e55e0c33 100644 --- a/.gitignore +++ b/.gitignore @@ -1,193 +1,10 @@ -# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore - -# Logs - -logs -_.log -npm-debug.log_ -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Caches - -.cache - -# Diagnostic reports (https://nodejs.org/api/report.html) - -report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json - -# Runtime data - -pids -_.pid -_.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover - -lib-cov - -# Coverage directory used by tools like istanbul - -coverage -*.lcov - -# nyc test coverage - -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) - -.grunt - -# Bower dependency directory (https://bower.io/) - -bower_components - -# node-waf configuration - -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) - -build/Release - -# Dependency directories - -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) - -web_modules/ - -# TypeScript cache - -*.tsbuildinfo - -# Optional npm cache directory - -.npm - -# Optional eslint cache - -.eslintcache - -# Optional stylelint cache - -.stylelintcache - -# Microbundle cache - -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history - -.node_repl_history - -# Output of 'npm pack' - -*.tgz - -# Yarn Integrity file - -.yarn-integrity - -# dotenv environment variable files - .env -.env.development.local -.env.test.local -.env.production.local -.env.local -servers/fastapi/.env - -# parcel-bundler cache (https://parceljs.org/) - -.parcel-cache - -# Next.js build output - -.next -out - -# Nuxt.js build / generate output - -.nuxt -dist - -# Gatsby files - -# Comment in the public line in if your project uses Gatsby and not Next.js - -# https://nextjs.org/blog/next-9-1#public-directory-support - -# public - -# vuepress build output - -.vuepress/dist - -# vuepress v2.x temp and cache directory - -.temp - -# Docusaurus cache and generated files - -.docusaurus - -# Serverless directories - -.serverless/ - -# FuseBox cache - -.fusebox/ - -# DynamoDB Local files - -.dynamodb/ - -# TernJS port file - -.tern-port - -# Stores VSCode versions used for testing VSCode extensions - -.vscode-test - -# yarn v2 - -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -# IntelliJ based IDEs -.idea - -# Finder (MacOS) folder config -.DS_Store - -app_dist - -env .venv +build __pycache__ - -*.db - -resources/nextjs -resources/fastapi - -servers/nextjs/data -servers/fastapi/build -servers/nextjs/out - -dependencies +.pytest_cache +.next +node_modules +out +user_data +tmp \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..ecf0dbbb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,53 @@ +FROM python:3.11-slim-bookworm + +# Install Node.js and npm +RUN apt-get update && apt-get install -y \ + nodejs \ + npm \ + nginx \ + curl \ + redis-server + +# Create a working directory +WORKDIR /app + +# Set environment variables +ENV APP_DATA_DIRECTORY=/app/user_data +ENV TEMP_DIRECTORY=/tmp/presenton + +# Install ollama +RUN curl -fsSL https://ollama.com/install.sh | sh + +# Install dependencies for FastAPI +COPY servers/fastapi/requirements.txt ./ +RUN pip install -r requirements.txt + +# Install dependencies for Next.js +WORKDIR /app/servers/nextjs +COPY servers/nextjs/package.json servers/nextjs/package-lock.json ./ +RUN npm install + +# Install chrome for puppeteer +RUN npx puppeteer browsers install chrome --install-deps + +# Copy Next.js app +COPY servers/nextjs/ /app/servers/nextjs/ + +# Build the Next.js app +WORKDIR /app/servers/nextjs +RUN npm run build + +WORKDIR /app + +# Copy FastAPI and start script +COPY servers/fastapi/ ./servers/fastapi/ +COPY start.js LICENSE NOTICE ./ + +# Copy nginx configuration +COPY nginx.conf /etc/nginx/nginx.conf + +# Expose the port +EXPOSE 80 + +# Start the servers +CMD ["/bin/bash", "-c", "ollama serve & service nginx start && service redis-server start && node /app/start.js"] \ No newline at end of file diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 00000000..4c8d2c2b --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,43 @@ +FROM python:3.11-slim-bookworm + +# Install Node.js and npm +RUN apt-get update && apt-get install -y \ + nodejs \ + npm \ + nginx \ + curl \ + redis-server + +# Change working directory +WORKDIR /app + +RUN ls -a + +# Set environment variables +ENV APP_DATA_DIRECTORY=/app/user_data +ENV TEMP_DIRECTORY=/tmp/presenton + +# Install ollama +RUN curl -fsSL https://ollama.com/install.sh | sh + +# Install dependencies for FastAPI +COPY servers/fastapi/requirements.txt ./ +RUN pip install -r requirements.txt + + +# Install dependencies for Next.js +WORKDIR /app/servers/nextjs +COPY servers/nextjs/package.json servers/nextjs/package-lock.json ./ +RUN npm install + +# Install chrome for puppeteer +RUN npx puppeteer browsers install chrome --install-deps + +# Copy nginx configuration +COPY nginx.conf /etc/nginx/nginx.conf + +# Expose the port +EXPOSE 80 3000 8000 6379 + +# Start the servers +CMD ["/bin/bash", "-c", "ollama serve & service nginx start & service redis-server start && node /app/start.js"] \ No newline at end of file diff --git a/README.md b/README.md index 3905cab8..e0f2f2d8 100644 --- a/README.md +++ b/README.md @@ -5,17 +5,15 @@ # Open-Source, Locally-Run AI Presentation Generator (Gamma Alternative) -**Presenton** is an open-source desktop application for generating presentations with AI — all running locally on your device. Stay in control of your data and privacy while using models like OpenAI, Gemini, and others. Just plug in your own API keys and only pay for what you use. +**Presenton** is an open-source application for generating presentations with AI — all running locally on your device. Stay in control of your data and privacy while using models like OpenAI, Gemini, and others. Just plug in your own API keys and only pay for what you use. ![Demo](readme_assets/demo.gif) -## 💻📥 Download Desktop App -[Download Link](https://presenton.ai/download) - ## ✨ More Freedom with AI Presentations * ✅ **Bring Your Own Key** — Only pay for what you use. OpenAI, Gemini (More coming soon...) +* ✅ **Ollama Support** — Run open-source models locally with Ollama integration * ✅ **Runs Locally** — All code runs on your device * ✅ **Privacy-First** — No tracking, no data stored by us * ✅ **Flexible** — Generate presentations from prompts or outlines @@ -28,12 +26,12 @@ ##### Linux/MacOS (Bash/Zsh Shell): ```bash -docker run -it --name presenton -p 5000:80 -v "./user_data:/app/user_data" ghcr.io/presenton/presenton:latest +docker run -it --name presenton -p 5000:80 -v "./user_data:/app/user_data" ghcr.io/presenton/presenton:v0.3.0-beta ``` ##### Windows (PowerShell): ```bash -docker run -it --name presenton -p 5000:80 -v "${PWD}\user_data:/app/user_data" ghcr.io/presenton/presenton:latest +docker run -it --name presenton -p 5000:80 -v "${PWD}\user_data:/app/user_data" ghcr.io/presenton/presenton:v0.3.0-beta ``` #### 2. Open Presenton @@ -41,21 +39,141 @@ Open http://localhost:5000 on browser of your choice to use Presenton. > **Note: You can replace 5000 with any other port number of your choice to run Presenton on a different port number.** -## Running electron app using source code +## Deployment Configurations -Before following these steps make sure [Poetry](https://python-poetry.org/docs/) is installed on your system. +You may want to directly provide your API KEYS as environment variables and keep them hidden. You can set these environment variables to achieve it. -#### 1. Clone this repository -```git clone https://github.com/presenton/presenton.git``` +- **CAN_CHANGE_KEYS=[true/false]**: Set this to **false** if you want to keep API Keys hidden and make them unmodifiable. +- **LLM=[openai/google/ollama]**: Select **LLM** of your choice. +- **OPENAI_API_KEY=[Your OpenAI API Key]**: Provide this if **LLM** is set to **openai** +- **GOOGLE_API_KEY=[Your Google API Key]**: Provide this if **LLM** is set to **google** +- **OLLAMA_MODEL=[Ollama Model Name]**: Provide this if **LLM** is set to **ollama** +- **PEXELS_API_KEY=[Your Pexels API Key]**: Provide this if **LLM** is set to **ollama** -> Note: Switch to **windows_build** branch to run Presenton on Windows +### Using Openai +```bash +docker run -it --name presenton -p 5000:80 -e LLM="openai" -e OPENAI_API_KEY="******" -e CAN_CHANGE_KEYS="false" -v "./user_data:/app/user_data" ghcr.io/presenton/presenton:v0.3.0-beta +``` -#### 2. Setup Electron, Python and NextJS Environments. -```cd presenton && npm run setup:env``` +### Using Ollama +```bash +docker run -it --name presenton -p 5000:80 -e LLM="ollama" -e OLLAMA_MODEL="llama3.2:3b" -e PEXELS_API_KEY="*******" -e CAN_CHANGE_KEYS="false" -v "./user_data:/app/user_data" ghcr.io/presenton/presenton:v0.3.0-beta +``` -#### 3. Run Presenton -```npm run dev``` +#### Running Presenton with GPU Support +To use GPU acceleration with Ollama models, you need to install and configure the NVIDIA Container Toolkit. This allows Docker containers to access your NVIDIA GPU. + +Once the NVIDIA Container Toolkit is installed and configured, you can run Presenton with GPU support by adding the `--gpus=all` flag: + +```bash +docker run -it --name presenton --gpus=all -p 5000:80 -e LLM="ollama" -e OLLAMA_MODEL="llama3.2:3b" -e PEXELS_API_KEY="*******" -e CAN_CHANGE_KEYS="false" -v "./user_data:/app/user_data" ghcr.io/presenton/presenton:v0.3.0-beta +``` + +> **Note:** GPU acceleration significantly improves the performance of Ollama models, especially for larger models. Make sure you have sufficient GPU memory for your chosen model. + + +#### Supported Ollama Models: + +##### Llama Models: +| Model | Size | Graph Support | +|-------|------|---------------| +| `llama3:8b` | 4.7GB | ❌ No | +| `llama3:70b` | 40GB | ✅ Yes | +| `llama3.1:8b` | 4.9GB | ❌ No | +| `llama3.1:70b` | 43GB | ✅ Yes | +| `llama3.1:405b` | 243GB | ✅ Yes | +| `llama3.2:1b` | 1.3GB | ❌ No | +| `llama3.2:3b` | 2GB | ❌ No | +| `llama3.3:70b` | 43GB | ✅ Yes | +| `llama4:16x17b` | 67GB | ✅ Yes | +| `llama4:128x17b` | 245GB | ✅ Yes | + +##### Gemma Models: +| Model | Size | Graph Support | +|-------|------|---------------| +| `gemma3:1b` | 815MB | ❌ No | +| `gemma3:4b` | 3.3GB | ❌ No | +| `gemma3:12b` | 8.1GB | ❌ No | +| `gemma3:27b` | 17GB | ✅ Yes | + +##### DeepSeek Models: +| Model | Size | Graph Support | +|-------|------|---------------| +| `deepseek-r1:1.5b` | 1.1GB | ❌ No | +| `deepseek-r1:7b` | 4.7GB | ❌ No | +| `deepseek-r1:8b` | 5.2GB | ❌ No | +| `deepseek-r1:14b` | 9GB | ❌ No | +| `deepseek-r1:32b` | 20GB | ✅ Yes | +| `deepseek-r1:70b` | 43GB | ✅ Yes | +| `deepseek-r1:671b` | 404GB | ✅ Yes | + +##### Qwen Models: +| Model | Size | Graph Support | +|-------|------|---------------| +| `qwen3:0.6b` | 523MB | ❌ No | +| `qwen3:1.7b` | 1.4GB | ❌ No | +| `qwen3:4b` | 2.6GB | ❌ No | +| `qwen3:8b` | 5.2GB | ❌ No | +| `qwen3:14b` | 9.3GB | ❌ No | +| `qwen3:30b` | 19GB | ✅ Yes | +| `qwen3:32b` | 20GB | ✅ Yes | +| `qwen3:235b` | 142GB | ✅ Yes | + +> **Note:** Models with graph support can generate charts and diagrams in presentations. Larger models provide better quality but require more system resources. + + +## Using Presenton API + +### Generate Presentation + +Endpoint: `/api/v1/ppt/generate/presentation` + +Method: `POST` + +Content-Type: `multipart/form-data` + +#### Request Body + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| prompt | string | Yes | The main topic or prompt for generating the presentation | +| n_slides | integer | No | Number of slides to generate (default: 8, min: 5, max: 15) | +| language | string | No | Language for the presentation (default: "English") | +| theme | string | No | Presentation theme (default: "light"). Available options: "light", "dark", "cream", "royal_blue", "faint_yellow", "light_red", "dark_pink" | +| documents | File[] | No | Optional list of document files to include in the presentation. Supported file types: PDF, TXT, PPTX, DOCX | +| export_as | string | No | Export format ("pptx" or "pdf", default: "pptx") | + +#### Response + +```json +{ + "presentation_id": "string", + "path": "string", + "edit_path": "string" +} +``` + +#### Example Request + +```bash +curl -X POST http://localhost:5000/api/v1/ppt/generate/presentation \ + -F "prompt=Introduction to Machine Learning" \ + -F "n_slides=5" \ + -F "language=English" \ + -F "theme=light" \ + -F "export_as=pptx" +``` + +#### Example Response + +```json +{ + "presentation_id": "d3000f96-096c-4768-b67b-e99aed029b57", + "path": "/static/user_data/d3000f96-096c-4768-b67b-e99aed029b57/Introduction_to_Machine_Learning.pptx", + "edit_path": "/presentation?id=d3000f96-096c-4768-b67b-e99aed029b57" +} +``` ## Features @@ -68,13 +186,16 @@ Before following these steps make sure [Poetry](https://python-poetry.org/docs/) ### 3. Review and edit outline ![Demo](readme_assets/images/outline.png) -### 4. Present on app +### 4. Select theme +![Demo](readme_assets/images/select-theme.png) + +### 5. Present on app ![Demo](readme_assets/images/present.png) -### 5. Change theme +### 6. Change theme ![Demo](readme_assets/images/change-theme.png) -### 6. Export presentation as PDF and PPTX +### 7. Export presentation as PDF and PPTX ![Demo](readme_assets/images/export-presentation.png) ## Community diff --git a/app/ipc/export_handlers.ts b/app/ipc/export_handlers.ts deleted file mode 100644 index aec762f6..00000000 --- a/app/ipc/export_handlers.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { BrowserWindow, ipcMain, } from "electron"; -import { baseDir, downloadsDir } from "../utils/constants"; -import fs from "fs"; -import path from "path"; -import { showFileDownloadedDialog } from "../utils/dialog"; -import { sanitizeFilename } from "../utils"; - - -export function setupExportHandlers() { - ipcMain.handle("file-downloaded", async (_, filePath: string): Promise => { - const fileName = path.basename(filePath); - const destinationPath = path.join(downloadsDir, fileName); - - await fs.promises.rename(filePath, destinationPath); - const success = await showFileDownloadedDialog(destinationPath); - return { success }; - }); - - ipcMain.handle("export-as-pdf", async (_, id: string, title: string) => { - const ppt_url = `${process.env.NEXT_PUBLIC_URL}/pdf-maker?id=${id}`; - const browser = new BrowserWindow({ - width: 1280, - height: 720, - icon: path.join(baseDir, "resources/ui/assets/images/presenton_short_filled.png"), - webPreferences: { - webSecurity: false, - - preload: path.join(__dirname, '../preloads/index.js'), - }, - show: false, - }); - browser.loadURL(ppt_url); - - const success = await new Promise((resolve, _) => { - browser.webContents.on('did-finish-load', async () => { - // Wait for 1 second to make sure the page is loaded - await new Promise((resolve, _) => { - setTimeout(resolve, 1000); - }); - - const pdfBuffer = await browser.webContents.printToPDF({ - printBackground: true, - pageSize: { width: 1280 / 96, height: 720 / 96 }, - margins: { top: 0, right: 0, bottom: 0, left: 0 } - }); - browser.close(); - const sanitizedTitle = sanitizeFilename(title); - const destinationPath = path.join(downloadsDir, `${sanitizedTitle}.pdf`); - await fs.promises.writeFile(destinationPath, pdfBuffer); - - const success = await showFileDownloadedDialog(destinationPath); - resolve(success); - }); - }); - return { success }; - }) - -} \ No newline at end of file diff --git a/app/ipc/footer_handlers.ts b/app/ipc/footer_handlers.ts deleted file mode 100644 index 264a3a68..00000000 --- a/app/ipc/footer_handlers.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { ipcMain } from 'electron'; -import { settingsStore } from '../services/settings-store'; - -const FOOTER_KEY = 'footer'; - -export function setupFooterHandlers() { - ipcMain.handle('get-footer', async () => { - try { - const properties = settingsStore.get(FOOTER_KEY); - - return { properties }; - } catch (error) { - console.error('Error retrieving footer properties:', error); - throw error; - } - }); - - ipcMain.handle('set-footer', async (_, properties: any) => { - try { - if (!properties) { - throw new Error('Properties are required'); - } - - - settingsStore.set(FOOTER_KEY, properties); - return { success: true }; - } catch (error) { - console.error('Error saving footer properties:', error); - throw error; - } - }); -} \ No newline at end of file diff --git a/app/ipc/index.ts b/app/ipc/index.ts deleted file mode 100644 index aedb1154..00000000 --- a/app/ipc/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { setupExportHandlers } from "./export_handlers"; -import { setupUserConfigHandlers } from "./user_config_handlers"; -import { setupSlideMetadataHandlers } from "./slide_metadata"; -import { setupReadFile } from "./read_file"; -import { setupFooterHandlers } from "./footer_handlers"; -import { setupThemeHandlers } from "./theme_handlers"; -import { setupUploadImage } from "./upload_image"; -import { setupLogHandler } from "./log_handler"; -export function setupIpcHandlers() { - setupExportHandlers(); - setupUserConfigHandlers(); - setupSlideMetadataHandlers(); - setupReadFile(); - setupFooterHandlers(); - setupThemeHandlers(); - setupUploadImage(); - setupLogHandler(); -} \ No newline at end of file diff --git a/app/ipc/log_handler.ts b/app/ipc/log_handler.ts deleted file mode 100644 index 213c0b00..00000000 --- a/app/ipc/log_handler.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ipcMain } from 'electron'; -import * as fs from 'fs'; -import * as path from 'path'; -import { userDataDir } from '../utils/constants'; - -export function setupLogHandler() { - // Ensure logs directory exists - const logsDir = path.join(userDataDir, 'logs'); - if (!fs.existsSync(logsDir)) { - fs.mkdirSync(logsDir, { recursive: true }); - } - - const logFilePath = path.join(logsDir, 'nextjs.log'); - - // Handle log writing through IPC - non-blocking - ipcMain.handle('write-nextjs-log', (_, logData: string) => { - try { - const timestamp = new Date().toISOString(); - const logEntry = `[${timestamp}] ${logData}\n`; - - // Use non-blocking write - fs.appendFile(logFilePath, logEntry, (err) => { - if (err) { - console.error('Error writing to log file:', err); - } - }); - - return { success: true }; - } catch (error) { - console.error('Error in log handler:', error); - return { success: false, error: (error as Error).message }; - } - }); - - // Handle log clearing - ipcMain.handle('clear-nextjs-logs', () => { - try { - // Create a new empty file, effectively clearing the old one - fs.writeFile(logFilePath, '', (err) => { - if (err) { - console.error('Error clearing log file:', err); - } - }); - return { success: true }; - } catch (error) { - console.error('Error in clear logs handler:', error); - return { success: false, error: (error as Error).message }; - } - }); -} diff --git a/app/ipc/read_file.ts b/app/ipc/read_file.ts deleted file mode 100644 index 4a4bac68..00000000 --- a/app/ipc/read_file.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ipcMain } from "electron"; -import fs from "fs"; -import path from "path"; -export function setupReadFile() { - ipcMain.handle("read-file", async (_, filePath: string) => { - const normalizedPath = path.normalize(filePath); - return fs.readFileSync(normalizedPath, 'utf-8'); - }); -} \ No newline at end of file diff --git a/app/ipc/slide_metadata.ts b/app/ipc/slide_metadata.ts deleted file mode 100644 index f4e75875..00000000 --- a/app/ipc/slide_metadata.ts +++ /dev/null @@ -1,351 +0,0 @@ -import { BrowserWindow, ipcMain } from "electron"; -import fs from 'fs'; -import path from 'path'; -import { tempDir } from "../utils/constants"; - - -interface Position { - left: number; - top: number; - width: number; - height: number; -} - -interface FontStyles { - name: string; - size: number; - bold: boolean; - weight: number; - color: string; -} - -interface TextElement { - position: Position; - paragraphs: { - alignment: number; - text: string; - font: FontStyles; - }[]; -} - -interface PictureElement { - position: Position; - picture: { - is_network: boolean; - path: string; - }; - shape: string | null; - object_fit: { - fit: string | null; - focus: number[]; - }; - overlay: string | null; - border_radius: number[]; -} - -interface BoxElement { - position: Position; - type: number; - fill: { - color: string; - }; - border_radius: number; - stroke: { - color: string; - thickness: number; - }; - shadow: { - radius: number; - color: string; - offset: number; - opacity: number; - angle: number; - }; -} - -interface LineElement { - position: Position; - lineType: number; - thickness: string; - color: string; -} - -interface GraphElement { - position: Position; - picture: { - is_network: boolean; - path: string; - }; - border_radius: number[]; -} - -type SlideElement = TextElement | PictureElement | BoxElement | LineElement | GraphElement; - - - - -export function setupSlideMetadataHandlers() { - ipcMain.handle("get-slide-metadata", async (_, url: string, theme: string, customColors?: any) => { - let win: BrowserWindow | null = null; - - try { - win = new BrowserWindow({ - width: 1920, - height: 1080, - webPreferences: { - webSecurity: false, - preload: path.join(__dirname, '../preloads/index.js'), - }, - show: false, - }); - - await win.loadURL(url, { userAgent: 'electron' }); - - - await win.webContents.executeJavaScript(` - new Promise((resolve) => { - const check = () => { - const el = document.querySelector('[data-element-type="slide-container"]'); - if (el) return resolve(true); - setTimeout(check, 200); - }; - check(); - }); - `); - const metadata = await win.webContents.executeJavaScript( - ` - (() => { - const rgbToHex = (color) => { - if (!color || color === "transparent" || color === "none") return "000000"; - if (color.startsWith("#")) return color.replace("#", ""); - const matches = color.match(/\\d+/g); - if (!matches) return "000000"; - const [r, g, b] = matches.map(x => parseInt(x)); - return [r, g, b].map(x => x.toString(16).padStart(2, "0")).join(""); - }; - - const slidesMetadata = []; - const slideContainers = document.querySelectorAll('[data-element-type="slide-container"]'); - - slideContainers.forEach((container) => { - const containerEl = container; - containerEl.style.width = "1280px"; - containerEl.style.height = "720px"; - containerEl.style.transform = "none"; - - const containerRect = containerEl.getBoundingClientRect(); - const slideIndex = parseInt(containerEl.getAttribute("data-slide-index") || "0"); - const backgroundColor = rgbToHex(window.getComputedStyle(containerEl).backgroundColor); - - const elements = []; - const slideElements = containerEl.querySelectorAll('[data-slide-element]:not([data-element-type="slide-container"])'); - - slideElements.forEach((element) => { - const el = element; - const elementRect = el.getBoundingClientRect(); - const computedStyle = window.getComputedStyle(el); - - const position = { - left: Math.round(elementRect.left - containerRect.left), - top: Math.round(elementRect.top - containerRect.top), - width: Math.round(elementRect.width), - height: Math.round(elementRect.height), - }; - - const elementType = el.getAttribute("data-element-type"); - if (!elementType) return; - - switch (elementType) { - case "text": - elements.push({ - position, - paragraphs: [{ - alignment: el.getAttribute("data-is-align") === 'true' ? 2 : 1, - text: el.getAttribute("data-text-content") || el.textContent || "", - font: { - name: computedStyle.fontFamily.split('_')[2] || 'Inter', - size: parseInt(computedStyle.fontSize), - bold: parseInt(computedStyle.fontWeight) >= 500, - weight: parseInt(computedStyle.fontWeight), - color: rgbToHex(computedStyle.color), - }, - }], - }); - break; - - case "picture": - const imgEl = el.tagName.toLowerCase() === "img" ? el : el.querySelector("img"); - if (imgEl) { - elements.push({ - position, - picture: { - is_network: imgEl.src.startsWith("http"), - path: imgEl.src || imgEl.getAttribute("data-image-path") || "", - }, - shape: imgEl.getAttribute('data-image-type'), - object_fit: { - fit: imgEl.getAttribute('data-object-fit'), - focus: [ - parseFloat(imgEl.getAttribute('data-focial-point-x') || '0'), - parseFloat(imgEl.getAttribute('data-focial-point-y') || '0'), - ], - }, - overlay: el.getAttribute("data-is-icon") ? "ffffff" : null, - border_radius: Array(4).fill(parseInt(computedStyle.borderRadius) || 0), - }); - } - break; - - case "graph": - elements.push({ - position, - picture: { - is_network: true, - path: \`__GRAPH_PLACEHOLDER__\${el.getAttribute("data-element-id")}\`, - }, - border_radius: [0, 0, 0, 0], - }); - break; - - case "slide-box": - case "filledbox": - const boxShadow = computedStyle.boxShadow; - let shadowRadius = 0; - let shadowColor = "000000"; - let shadowOffsetX = 0; - let shadowOffsetY = 0; - let shadowOpacity = 0; - - if (boxShadow && boxShadow !== "none") { - const boxShadowRegex = - /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+),?\\s*([\\d.]+)?\\)?\\s+(-?\\d+)px\\s+(-?\\d+)px\\s+(-?\\d+)px/; - const match = boxShadow.match(boxShadowRegex); - - if (match) { - const r = match[1]; - const g = match[2]; - const b = match[3]; - const rgbStr = "rgb(" + r + ", " + g + ", " + b + ")"; - shadowColor = rgbToHex(rgbStr); - shadowOpacity = match[4] ? parseFloat(match[4]) : 1; - shadowOffsetX = parseInt(match[5]); - shadowOffsetY = parseInt(match[6]); - shadowRadius = parseInt(match[7]); - } - } - - elements.push({ - position, - type: - computedStyle.borderRadius === "9999px" || - computedStyle.borderRadius === "50%" - ? 9 - : 5, - fill: { - color: rgbToHex(computedStyle.backgroundColor), - }, - border_radius: parseInt(computedStyle.borderRadius) || 0, - stroke: { - color: rgbToHex(computedStyle.borderColor), - thickness: parseInt(computedStyle.borderWidth) || 0, - }, - shadow: { - radius: shadowRadius, - color: shadowColor, - offset: Math.sqrt( - shadowOffsetX * shadowOffsetX + - shadowOffsetY * shadowOffsetY - ), - opacity: shadowOpacity, - angle: Math.round( - (Math.atan2(shadowOffsetY, shadowOffsetX) * 180) / Math.PI - ), - }, - }); - break; - - case "line": - elements.push({ - position, - lineType: 1, - thickness: computedStyle.borderWidth || computedStyle.height, - color: rgbToHex( - computedStyle.borderColor || computedStyle.backgroundColor - ), - }); - break; - } - }); - - slidesMetadata.push({ slideIndex, backgroundColor, elements }); - }); - - return slidesMetadata; - })(); -` - ) - // ✅ Handle Graphs: capture each graph element as an image - const graphIds: { id: string; bounds: Electron.Rectangle }[] = await win.webContents.executeJavaScript(` - (() => { - return Array.from(document.querySelectorAll('[data-element-type="graph"]')).map(el => el.getAttribute("data-element-id")); - })(); - `); - - for (const id of graphIds) { - try { - // Scroll into view first - await win.webContents.executeJavaScript(` - document.querySelector('[data-element-id="${id}"]').scrollIntoView({ behavior: 'instant', block: 'center' }); - - `); - // Wait a bit for any animations/rendering to complete - await new Promise((r) => setTimeout(r, 2000)); - - const bounds: Electron.Rectangle = await win.webContents.executeJavaScript(` - (() => { - const el = document.querySelector('[data-element-id="${id}"]'); - if (!el) return null; - const rect = el.getBoundingClientRect(); - return { - x: Math.round(rect.left), - y: Math.round(rect.top), - width: Math.round(rect.width), - height: Math.round(rect.height), - }; - })(); - `); - - const image = await win.webContents.capturePage(bounds); - const buffer = image.toJPEG(100); - - - if (buffer.length === 0) { - console.error("Empty buffer! Graph not captured."); - continue; - } - - const filePath = path.join(tempDir, `chart-${id}-${Date.now()}.jpeg`); - fs.writeFileSync(filePath, buffer); - - // Update metadata - metadata.forEach((slide: any) => { - slide.elements.forEach((element: any) => { - if ("picture" in element && element.picture.path === `__GRAPH_PLACEHOLDER__${id}`) { - element.picture.path = filePath; - } - }); - }); - } catch (err) { - console.error(`Failed to capture or save chart-${id}:`, err); - } - } - return metadata; - } catch (error) { - console.error("Error during page preparation:", error); - throw error; - } finally { - // if (browser) await browser.close(); - if (win) win.close(); - } - }); -} diff --git a/app/ipc/theme_handlers.ts b/app/ipc/theme_handlers.ts deleted file mode 100644 index 027335c4..00000000 --- a/app/ipc/theme_handlers.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { ipcMain } from 'electron'; -import { settingsStore } from '../services/settings-store'; - -const THEME_KEY = 'theme'; - -export function setupThemeHandlers() { - ipcMain.handle('get-theme', async () => { - try { - const theme = settingsStore.get(THEME_KEY); - - return { theme }; - } catch (error) { - console.error('Error retrieving theme:', error); - throw error; - } - }); - - ipcMain.handle('set-theme', async (_, themeData: any) => { - try { - if (!themeData) { - throw new Error('Theme data is required'); - } - - - settingsStore.set(THEME_KEY, themeData); - return { success: true }; - } catch (error) { - console.error('Error saving theme:', error); - throw error; - } - }); -} \ No newline at end of file diff --git a/app/ipc/upload_image.ts b/app/ipc/upload_image.ts deleted file mode 100644 index ad102dd6..00000000 --- a/app/ipc/upload_image.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ipcMain } from "electron"; -import path from "path"; -import fs from "fs"; -import crypto from "crypto"; -import { userDataDir } from "../utils/constants"; - -export function setupUploadImage() { - ipcMain.handle("upload-image", async (_, file: Buffer) => { - try { - // Create uploads directory if it doesn't exist - const uploadsDir = path.join(userDataDir, "uploads"); - fs.mkdirSync(uploadsDir, { recursive: true }); - - // Generate unique filename - const filename = `${crypto.randomBytes(16).toString('hex')}.png`; - const filePath = path.join(uploadsDir, filename); - - // Write file to disk - await fs.writeFileSync(filePath, file); - - // Return the relative path that can be used in the frontend - return filePath; - } catch (error) { - console.error("Error saving image:", error); - throw error; - } - }); -} \ No newline at end of file diff --git a/app/ipc/user_config_handlers.ts b/app/ipc/user_config_handlers.ts deleted file mode 100644 index 24a0c7e5..00000000 --- a/app/ipc/user_config_handlers.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ipcMain } from "electron"; -import { getUserConfig, setUserConfig } from "../utils"; - -export function setupUserConfigHandlers() { - ipcMain.handle("get-user-config", async (_, __) => { - return getUserConfig(); - }); - - ipcMain.handle("set-user-config", async (_, userConfig: UserConfig) => { - setUserConfig(userConfig); - }); -} diff --git a/app/main.ts b/app/main.ts deleted file mode 100644 index 1da30897..00000000 --- a/app/main.ts +++ /dev/null @@ -1,98 +0,0 @@ -require("dotenv").config(); -import { app, BrowserWindow } from "electron"; -import path from "path"; -import { findUnusedPorts, killProcess, setupEnv, setUserConfig } from "./utils"; -import { startFastApiServer, startNextJsServer } from "./utils/servers"; -import { ChildProcessByStdio } from "child_process"; -import { baseDir, fastapiDir, isDev, localhost, nextjsDir, tempDir, userConfigPath, userDataDir } from "./utils/constants"; -import { setupIpcHandlers } from "./ipc"; - - -var win: BrowserWindow | undefined; -var fastApiProcess: ChildProcessByStdio | undefined; -var nextjsProcess: any; - -app.commandLine.appendSwitch('gtk-version', '3'); - -const createWindow = () => { - win = new BrowserWindow({ - width: 1280, - height: 720, - icon: path.join(baseDir, "resources/ui/assets/images/presenton_short_filled.png"), - webPreferences: { - webSecurity: false, - preload: path.join(__dirname, 'preloads/index.js'), - }, - }); -}; - -async function startServers(fastApiPort: number, nextjsPort: number) { - try { - fastApiProcess = await startFastApiServer( - fastapiDir, - fastApiPort, - { - DEBUG: isDev ? "True" : "False", - LLM: process.env.LLM, - OPENAI_API_KEY: process.env.OPENAI_API_KEY, - GOOGLE_API_KEY: process.env.GOOGLE_API_KEY, - APP_DATA_DIRECTORY: userDataDir, - TEMP_DIRECTORY: tempDir, - USER_CONFIG_PATH: userConfigPath, - }, - isDev, - ); - nextjsProcess = await startNextJsServer( - nextjsDir, - nextjsPort, - { - NEXT_PUBLIC_FAST_API: process.env.NEXT_PUBLIC_FAST_API, - TEMP_DIRECTORY: process.env.TEMP_DIRECTORY, - NEXT_PUBLIC_URL: process.env.NEXT_PUBLIC_URL, - NEXT_PUBLIC_USER_CONFIG_PATH: process.env.NEXT_PUBLIC_USER_CONFIG_PATH, - }, - isDev, - ) - } catch (error) { - console.error("Server startup error:", error); - } -} - -async function stopServers() { - if (fastApiProcess?.pid) { - await killProcess(fastApiProcess.pid); - } - if (nextjsProcess) { - if (isDev) { - await killProcess(nextjsProcess.pid); - } else { - nextjsProcess.close(); - } - } -} - -app.whenReady().then(async () => { - createWindow(); - win?.loadFile(path.join(baseDir, "resources/ui/homepage/index.html")); - - setUserConfig({ - LLM: process.env.LLM, - OPENAI_API_KEY: process.env.OPENAI_API_KEY, - GOOGLE_API_KEY: process.env.GOOGLE_API_KEY, - }) - - const [fastApiPort, nextjsPort] = await findUnusedPorts(); - console.log(`FastAPI port: ${fastApiPort}, NextJS port: ${nextjsPort}`); - - //? Setup environment variables to be used in the preloads - setupEnv(fastApiPort, nextjsPort); - setupIpcHandlers(); - - await startServers(fastApiPort, nextjsPort); - win?.loadURL(`${localhost}:${nextjsPort}`); -}); - -app.on("window-all-closed", async () => { - await stopServers(); - app.quit(); -}); diff --git a/app/preloads/index.ts b/app/preloads/index.ts deleted file mode 100644 index c5b3e49a..00000000 --- a/app/preloads/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { contextBridge, ipcRenderer } from 'electron'; - -contextBridge.exposeInMainWorld('env', { - NEXT_PUBLIC_FAST_API: process.env.NEXT_PUBLIC_FAST_API || '', - NEXT_PUBLIC_URL: process.env.NEXT_PUBLIC_URL || '', - TEMP_DIRECTORY: process.env.TEMP_DIRECTORY || '', - NEXT_PUBLIC_USER_CONFIG_PATH: process.env.NEXT_PUBLIC_USER_CONFIG_PATH || '', -}); - - -contextBridge.exposeInMainWorld('electron', { - fileDownloaded: (filePath: string) => ipcRenderer.invoke("file-downloaded", filePath), - exportAsPDF: (id: string, title: string) => ipcRenderer.invoke("export-as-pdf", id, title), - getUserConfig: () => ipcRenderer.invoke("get-user-config"), - setUserConfig: (userConfig: UserConfig) => ipcRenderer.invoke("set-user-config", userConfig), - readFile: (filePath: string) => ipcRenderer.invoke("read-file", filePath), - getSlideMetadata: (url: string, theme: string, customColors?: any, tempDirectory?: string) => - ipcRenderer.invoke("get-slide-metadata", url, theme, customColors, tempDirectory), - getFooter: (userId: string) => ipcRenderer.invoke("get-footer", userId), - setFooter: (userId: string, properties: any) => ipcRenderer.invoke("set-footer", userId, properties), - getTheme: (userId: string) => ipcRenderer.invoke("get-theme", userId), - setTheme: (userId: string, themeData: any) => ipcRenderer.invoke("set-theme", userId, themeData), - uploadImage: (file: Buffer) => ipcRenderer.invoke("upload-image", file), - writeNextjsLog: (logData: string) => ipcRenderer.invoke("write-nextjs-log", logData), - clearNextjsLogs: () => ipcRenderer.invoke("clear-nextjs-logs"), -}); diff --git a/app/types/index.d.ts b/app/types/index.d.ts deleted file mode 100644 index 90eca4a1..00000000 --- a/app/types/index.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -interface FastApiEnv { - DEBUG?: string, - LLM?: string, - OPENAI_API_KEY?: string, - GOOGLE_API_KEY?: string, - APP_DATA_DIRECTORY?: string, - TEMP_DIRECTORY?: string, - USER_CONFIG_PATH?: string, -} - -interface NextJsEnv { - NEXT_PUBLIC_FAST_API?: string, - TEMP_DIRECTORY?: string, - NEXT_PUBLIC_URL?: string, - NEXT_PUBLIC_USER_CONFIG_PATH?: string, -} - -interface UserConfig { - LLM?: string, - OPENAI_API_KEY?: string, - GOOGLE_API_KEY?: string, -} - -interface IPCStatus { - success: boolean, - message?: string, -} \ No newline at end of file diff --git a/app/utils/constants.ts b/app/utils/constants.ts deleted file mode 100644 index dded6650..00000000 --- a/app/utils/constants.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { app } from "electron" -import path from "path" - -export const localhost = "http://127.0.0.1" - - -export const isDev = !app.isPackaged; -export const baseDir = app.getAppPath(); -export const fastapiDir = isDev ? path.join(baseDir, "servers/fastapi") : path.join(baseDir, "resources/fastapi"); -export const nextjsDir = isDev ? path.join(baseDir, "servers/nextjs") : path.join(baseDir, "resources/nextjs"); - -export const tempDir = path.join(app.getPath("temp"), "presenton") -export const userDataDir = app.getPath("userData") -export const downloadsDir = app.getPath("downloads") -export const userConfigPath = path.join(userDataDir, "userConfig.json") -export const logsDir = path.join(userDataDir, "logs") \ No newline at end of file diff --git a/app/utils/dialog.ts b/app/utils/dialog.ts deleted file mode 100644 index fec26bb3..00000000 --- a/app/utils/dialog.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { shell } from "electron"; -import { dialog } from "electron"; -import path from "path"; - -export async function showFileDownloadedDialog(filePath: string): Promise { - try { - const { response } = await dialog.showMessageBox({ - type: 'question', - buttons: ['Open File', 'Open Folder', 'Cancel'], - defaultId: 0, - title: 'File Downloaded', - message: 'What would you like to do?' - }); - - if (response === 0) { - await shell.openPath(filePath); - } else if (response === 1) { - await shell.openPath(path.dirname(filePath)); - } - - return true; - } catch (error: any) { - console.error('Error handling downloaded file:', error); - return false; - } -} \ No newline at end of file diff --git a/app/utils/index.ts b/app/utils/index.ts deleted file mode 100644 index eb9105c7..00000000 --- a/app/utils/index.ts +++ /dev/null @@ -1,83 +0,0 @@ -import net from 'net' -import treeKill from 'tree-kill' -import fs from 'fs' -import { localhost, tempDir, userConfigPath } from './constants' - -export function setUserConfig(userConfig: UserConfig) { - let existingConfig: UserConfig = {} - - if (fs.existsSync(userConfigPath)) { - const configData = fs.readFileSync(userConfigPath, 'utf-8') - existingConfig = JSON.parse(configData) - } - const mergedConfig: UserConfig = { - LLM: userConfig.LLM || existingConfig.LLM, - OPENAI_API_KEY: userConfig.OPENAI_API_KEY || existingConfig.OPENAI_API_KEY, - GOOGLE_API_KEY: userConfig.GOOGLE_API_KEY || existingConfig.GOOGLE_API_KEY - } - fs.writeFileSync(userConfigPath, JSON.stringify(mergedConfig)) -} - -export function getUserConfig(): UserConfig { - if (!fs.existsSync(userConfigPath)) { - return {} - } - const configData = fs.readFileSync(userConfigPath, 'utf-8') - return JSON.parse(configData) -} - -export function setupEnv(fastApiPort: number, nextjsPort: number) { - process.env.NEXT_PUBLIC_FAST_API = `${localhost}:${fastApiPort}`; - process.env.TEMP_DIRECTORY = tempDir; - process.env.NEXT_PUBLIC_USER_CONFIG_PATH = userConfigPath; - process.env.NEXT_PUBLIC_URL = `${localhost}:${nextjsPort}`; -} - - -export function killProcess(pid: number) { - return new Promise((resolve, reject) => { - treeKill(pid, "SIGTERM", (err: any) => { - if (err) { - console.error(`Error killing process ${pid}:`, err) - reject(err) - } else { - console.log(`Process ${pid} killed`) - resolve(true) - } - }) - }) -} - -export async function findUnusedPorts(startPort: number = 40000, count: number = 2): Promise { - const ports: number[] = []; - console.log(`Finding ${count} unused ports starting from ${startPort}`); - - const isPortAvailable = (port: number): Promise => { - return new Promise((resolve) => { - const server = net.createServer(); - server.once('error', () => { - resolve(false); - }); - server.once('listening', () => { - server.close(); - resolve(true); - }); - server.listen(port); - }); - }; - - let currentPort = startPort; - while (ports.length < count) { - if (await isPortAvailable(currentPort)) { - ports.push(currentPort); - } - currentPort++; - } - - return ports; -} - - -export function sanitizeFilename(filename: string): string { - return filename.replace(/[\\/:*?"<>|]/g, '_'); -} \ No newline at end of file diff --git a/app/utils/servers.ts b/app/utils/servers.ts deleted file mode 100644 index 6949bc7b..00000000 --- a/app/utils/servers.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { spawn } from "child_process"; -import { localhost, logsDir, userDataDir } from "./constants"; -import http from "http"; -import fs from "fs"; - -// @ts-ignore -import handler from "serve-handler"; -import path from "path"; - -export async function startFastApiServer( - directory: string, - port: number, - env: FastApiEnv, - isDev: boolean, -) { - // Start FastAPI server - const startCommand = isDev ? [ - ".venv/bin/python", - ["server_autoreload.py", "--port", port.toString()], - ] : [ - "./fastapi", ["--port", port.toString()], - ]; - - - const fastApiProcess = spawn( - startCommand[0] as string, - startCommand[1] as string[], - { - cwd: directory, - stdio: ["inherit", "pipe", "pipe"], - env: { ...process.env, ...env }, - } - ); - fastApiProcess.stdout.on("data", (data: any) => { - fs.appendFileSync(path.join(logsDir, "fastapi-server.log"), data); - console.log(`FastAPI: ${data}`); - }); - fastApiProcess.stderr.on("data", (data: any) => { - fs.appendFileSync(path.join(logsDir, "fastapi-server.log"), data); - console.error(`FastAPI: ${data}`); - }); - // Wait for FastAPI server to start - await waitForServer(`${localhost}:${port}/docs`); - return fastApiProcess; -} - -export async function startNextJsServer( - directory: string, - port: number, - env: NextJsEnv, - isDev: boolean, -) { - let nextjsProcess; - - if (isDev) { - // Start NextJS development server - nextjsProcess = spawn( - "npm", - ["run", "dev", "--", "-p", port.toString()], - { - cwd: directory, - stdio: ["inherit", "pipe", "pipe"], - env: { ...process.env, ...env }, - } - ); - nextjsProcess.stdout.on("data", (data: any) => { - fs.appendFileSync(path.join(logsDir, "nextjs-server.log"), data); - console.log(`NextJS: ${data}`); - }); - nextjsProcess.stderr.on("data", (data: any) => { - fs.appendFileSync(path.join(logsDir, "nextjs-server.log"), data); - console.error(`NextJS: ${data}`); - }); - } else { - // Start NextJS build server - nextjsProcess = startNextjsBuildServer(directory, port); - } - - // Wait for NextJS server to start - await waitForServer(`${localhost}:${port}`); - return nextjsProcess; -} - -async function startNextjsBuildServer(directory: string, port: number) { - const server = http.createServer((req, res) => { - return handler(req, res, { - public: directory, - cleanUrls: true, - }); - }); - - server.listen(port); - return server; -} - - -async function waitForServer(url: string, timeout = 30000): Promise { - const startTime = Date.now(); - - while (Date.now() - startTime < timeout) { - try { - await new Promise((resolve, reject) => { - http.get(url, (res) => { - if (res.statusCode === 200 || res.statusCode === 304) { - resolve(); - } else { - reject(new Error(`Unexpected status code: ${res.statusCode}`)); - } - }).on('error', reject); - }); - return; - } catch (error) { - await new Promise(resolve => setTimeout(resolve, 1000)); - } - } - throw new Error(`Server did not start within ${timeout}ms`); -} \ No newline at end of file diff --git a/build.js b/build.js deleted file mode 100644 index 2abcd9d0..00000000 --- a/build.js +++ /dev/null @@ -1,23 +0,0 @@ -const builder = require("electron-builder") - -const config = { - appId: "ai.presenton", - asar: false, - directories: { - output: "dist", - }, - files: [ - "resources", - "app_dist", - "node_modules", - "NOTICE", - ], - linux: { - artifactName: "Presenton-${version}.${ext}", - target: ["AppImage"], - icon: "resources/ui/assets/images/presenton_short_filled.png", - }, -} - - -builder.build({ config }) \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..52262bf0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,54 @@ +services: + production: + # image: ghcr.io/presenton/presenton:latest + build: + context: . + dockerfile: Dockerfile + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + ports: + # You can replace 5000 with any other port number of your choice to run Presenton on a different port number. + - "5000:80" + volumes: + - ./user_data:/app/user_data + environment: + - CAN_CHANGE_KEYS=${CAN_CHANGE_KEYS} + - LLM=${LLM} + - OPENAI_API_KEY=${OPENAI_API_KEY} + - GOOGLE_API_KEY=${GOOGLE_API_KEY} + - OLLAMA_MODEL=${OLLAMA_MODEL} + - PEXELS_API_KEY=${PEXELS_API_KEY} + + development: + build: + context: . + dockerfile: Dockerfile.dev + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + ports: + - "5000:80" + - "3000:3000" + - "8000:8000" + volumes: + - .:/app + environment: + - NODE_ENV=development + - CAN_CHANGE_KEYS=${CAN_CHANGE_KEYS} + - LLM=${LLM} + - OPENAI_API_KEY=${OPENAI_API_KEY} + - GOOGLE_API_KEY=${GOOGLE_API_KEY} + - OLLAMA_MODEL=${OLLAMA_MODEL} + - PEXELS_API_KEY=${PEXELS_API_KEY} + - LANGCHAIN_TRACING_V2=${LANGCHAIN_TRACING_V2} + - LANGCHAIN_API_KEY=${LANGCHAIN_API_KEY} + - LANGCHAIN_PROJECT=${LANGCHAIN_PROJECT} \ No newline at end of file diff --git a/servers/fastapi/fonts/Fraunces/Fraunces-Regular.otf b/fonts/Fraunces/Fraunces-Regular.otf similarity index 100% rename from servers/fastapi/fonts/Fraunces/Fraunces-Regular.otf rename to fonts/Fraunces/Fraunces-Regular.otf diff --git a/servers/fastapi/fonts/Inria Serif/InriaSerif-Regular.ttf b/fonts/Inria Serif/InriaSerif-Regular.ttf similarity index 100% rename from servers/fastapi/fonts/Inria Serif/InriaSerif-Regular.ttf rename to fonts/Inria Serif/InriaSerif-Regular.ttf diff --git a/servers/fastapi/fonts/Montserrat/Montserrat-Regular.ttf b/fonts/Montserrat/Montserrat-Regular.ttf similarity index 100% rename from servers/fastapi/fonts/Montserrat/Montserrat-Regular.ttf rename to fonts/Montserrat/Montserrat-Regular.ttf diff --git a/servers/fastapi/fonts/Satoshi/Satoshi-Regular.otf b/fonts/Satoshi/Satoshi-Regular.otf similarity index 100% rename from servers/fastapi/fonts/Satoshi/Satoshi-Regular.otf rename to fonts/Satoshi/Satoshi-Regular.otf diff --git a/servers/fastapi/fonts/inter/Inter.otf b/fonts/inter/Inter.otf similarity index 100% rename from servers/fastapi/fonts/inter/Inter.otf rename to fonts/inter/Inter.otf diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 00000000..4277d977 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,29 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; +error_log /var/log/nginx/error.log; + +events { + worker_connections 1024; +} + +http { + client_max_body_size 20M; + + server { + listen 80; + server_name localhost; + + location / { + proxy_pass http://localhost:3000; + proxy_read_timeout 30m; + proxy_connect_timeout 30m; + } + + location /api/v1/ { + proxy_pass http://localhost:8000; + proxy_read_timeout 30m; + proxy_connect_timeout 30m; + } + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 9b96fa25..00000000 --- a/package-lock.json +++ /dev/null @@ -1,5984 +0,0 @@ -{ - "name": "presenton", - "version": "0.2.0-beta", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "presenton", - "version": "0.2.0-beta", - "dependencies": { - "@tailwindcss/cli": "^4.1.5", - "dotenv": "^16.5.0", - "electron-squirrel-startup": "^1.0.1", - "puppeteer": "^24.8.2", - "serve-handler": "^6.1.6", - "tailwindcss": "^4.1.5", - "tree-kill": "^1.2.2" - }, - "devDependencies": { - "electron": "^36.1.0", - "electron-builder": "^26.0.12", - "typescript": "^5.8.3" - }, - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@develar/schema-utils": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", - "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@electron/asar": { - "version": "3.2.18", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.18.tgz", - "integrity": "sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - }, - "bin": { - "asar": "bin/asar.js" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/@electron/asar/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@electron/asar/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@electron/fuses": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", - "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.1", - "fs-extra": "^9.0.1", - "minimist": "^1.2.5" - }, - "bin": { - "electron-fuses": "dist/bin.js" - } - }, - "node_modules/@electron/fuses/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@electron/node-gyp": { - "version": "10.2.0-electron.1", - "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", - "integrity": "sha512-CrYo6TntjpoMO1SHjl5Pa/JoUsECNqNdB7Kx49WLQpWzPw53eEITJ2Hs9fh/ryUYDn4pxZz11StaBYBrLFJdqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^8.1.0", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.2.1", - "nopt": "^6.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@electron/node-gyp/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@electron/node-gyp/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@electron/notarize": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", - "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.1", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@electron/notarize/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@electron/osx-sign": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz", - "integrity": "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "compare-version": "^0.1.2", - "debug": "^4.3.4", - "fs-extra": "^10.0.0", - "isbinaryfile": "^4.0.8", - "minimist": "^1.2.6", - "plist": "^3.0.5" - }, - "bin": { - "electron-osx-flat": "bin/electron-osx-flat.js", - "electron-osx-sign": "bin/electron-osx-sign.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/@electron/rebuild": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz", - "integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", - "@malept/cross-spawn-promise": "^2.0.0", - "chalk": "^4.0.0", - "debug": "^4.1.1", - "detect-libc": "^2.0.1", - "fs-extra": "^10.0.0", - "got": "^11.7.0", - "node-abi": "^3.45.0", - "node-api-version": "^0.2.0", - "ora": "^5.1.0", - "read-binary-file-arch": "^1.0.6", - "semver": "^7.3.5", - "tar": "^6.0.5", - "yargs": "^17.0.1" - }, - "bin": { - "electron-rebuild": "lib/cli.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/@electron/universal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz", - "integrity": "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@electron/asar": "^3.2.7", - "@malept/cross-spawn-promise": "^2.0.0", - "debug": "^4.3.1", - "dir-compare": "^4.2.0", - "fs-extra": "^11.1.1", - "minimatch": "^9.0.3", - "plist": "^3.1.0" - }, - "engines": { - "node": ">=16.4" - } - }, - "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@electron/universal/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@electron/windows-sign": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", - "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "peer": true, - "dependencies": { - "cross-dirname": "^0.1.0", - "debug": "^4.3.4", - "fs-extra": "^11.1.1", - "minimist": "^1.2.8", - "postject": "^1.0.0-alpha.6" - }, - "bin": { - "electron-windows-sign": "bin/electron-windows-sign.js" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@electron/windows-sign/node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true, - "license": "MIT" - }, - "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, - "license": "ISC", - "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/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/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, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/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, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/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, - "license": "MIT", - "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/@isaacs/cliui/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, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/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, - "license": "MIT", - "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/@malept/cross-spawn-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", - "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], - "license": "Apache-2.0", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/@malept/flatpak-bundler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "hasInstallScript": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "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, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@puppeteer/browsers": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.4.tgz", - "integrity": "sha512-9DxbZx+XGMNdjBynIs4BRSz+M3iRDeB7qRcAr6UORFLphCIM2x3DXgOucvADiifcqCE4XePFUKcnaAMyGbrDlQ==", - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.4.0", - "extract-zip": "^2.0.1", - "progress": "^2.0.3", - "proxy-agent": "^6.5.0", - "semver": "^7.7.1", - "tar-fs": "^3.0.8", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tailwindcss/cli": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.1.5.tgz", - "integrity": "sha512-Kr567rDwDjY1VUnfqh5/+DCpRf4B8lPs5O9flP4kri7n4AM2aubrIxGSh5GN8s+awUKw/U4+6kNlEnZbBNfUeg==", - "dependencies": { - "@parcel/watcher": "^2.5.1", - "@tailwindcss/node": "4.1.5", - "@tailwindcss/oxide": "4.1.5", - "enhanced-resolve": "^5.18.1", - "mri": "^1.2.0", - "picocolors": "^1.1.1", - "tailwindcss": "4.1.5" - }, - "bin": { - "tailwindcss": "dist/index.mjs" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.5.tgz", - "integrity": "sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg==", - "dependencies": { - "enhanced-resolve": "^5.18.1", - "jiti": "^2.4.2", - "lightningcss": "1.29.2", - "tailwindcss": "4.1.5" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.5.tgz", - "integrity": "sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA==", - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.1.5", - "@tailwindcss/oxide-darwin-arm64": "4.1.5", - "@tailwindcss/oxide-darwin-x64": "4.1.5", - "@tailwindcss/oxide-freebsd-x64": "4.1.5", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.5", - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.5", - "@tailwindcss/oxide-linux-arm64-musl": "4.1.5", - "@tailwindcss/oxide-linux-x64-gnu": "4.1.5", - "@tailwindcss/oxide-linux-x64-musl": "4.1.5", - "@tailwindcss/oxide-wasm32-wasi": "4.1.5", - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.5", - "@tailwindcss/oxide-win32-x64-msvc": "4.1.5" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.5.tgz", - "integrity": "sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.5.tgz", - "integrity": "sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.5.tgz", - "integrity": "sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.5.tgz", - "integrity": "sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.5.tgz", - "integrity": "sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.5.tgz", - "integrity": "sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.5.tgz", - "integrity": "sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.5.tgz", - "integrity": "sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.5.tgz", - "integrity": "sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.5.tgz", - "integrity": "sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@emnapi/wasi-threads": "^1.0.2", - "@napi-rs/wasm-runtime": "^0.2.9", - "@tybys/wasm-util": "^0.9.0", - "tslib": "^2.8.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.5.tgz", - "integrity": "sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.5.tgz", - "integrity": "sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "license": "MIT" - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.15.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*", - "xmlbuilder": ">=11.0.1" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/verror": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", - "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/7zip-bin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", - "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/app-builder-bin": { - "version": "5.0.0-alpha.12", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz", - "integrity": "sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/app-builder-lib": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.0.12.tgz", - "integrity": "sha512-+/CEPH1fVKf6HowBUs6LcAIoRcjeqgvAeoSE+cl7Y7LndyQ9ViGPYibNk7wmhMHzNgHIuIbw4nWADPO+4mjgWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@develar/schema-utils": "~2.6.5", - "@electron/asar": "3.2.18", - "@electron/fuses": "^1.8.0", - "@electron/notarize": "2.5.0", - "@electron/osx-sign": "1.3.1", - "@electron/rebuild": "3.7.0", - "@electron/universal": "2.0.1", - "@malept/flatpak-bundler": "^0.4.0", - "@types/fs-extra": "9.0.13", - "async-exit-hook": "^2.0.1", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", - "chromium-pickle-js": "^0.2.0", - "config-file-ts": "0.2.8-rc1", - "debug": "^4.3.4", - "dotenv": "^16.4.5", - "dotenv-expand": "^11.0.6", - "ejs": "^3.1.8", - "electron-publish": "26.0.11", - "fs-extra": "^10.1.0", - "hosted-git-info": "^4.1.0", - "is-ci": "^3.0.0", - "isbinaryfile": "^5.0.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.3", - "lazy-val": "^1.0.5", - "minimatch": "^10.0.0", - "plist": "3.1.0", - "resedit": "^1.7.0", - "semver": "^7.3.8", - "tar": "^6.1.12", - "temp-file": "^3.4.0", - "tiny-async-pool": "1.3.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "dmg-builder": "26.0.12", - "electron-builder-squirrel-windows": "26.0.12" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", - "license": "Apache-2.0" - }, - "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==", - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", - "license": "Apache-2.0", - "optional": true - }, - "node_modules/bare-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.4.tgz", - "integrity": "sha512-r8+26Voz8dGX3AYpJdFb1ZPaUSM8XOLCZvy+YGpRTmwPHIxA7Z3Jov/oMPtV7hfRQbOnH8qGlLTzQAbgtdNN0Q==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4" - }, - "engines": { - "bare": ">=1.16.0" - }, - "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } - } - }, - "node_modules/bare-os": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", - "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "bare": ">=1.14.0" - } - }, - "node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-os": "^3.0.1" - } - }, - "node_modules/bare-stream": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", - "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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" - } - ], - "license": "MIT" - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/boolean": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/builder-util": { - "version": "26.0.11", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.0.11.tgz", - "integrity": "sha512-xNjXfsldUEe153h1DraD0XvDOpqGR0L5eKFkdReB7eFW5HqysDZFfly4rckda6y9dF39N3pkPlOblcfHKGw+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/debug": "^4.1.6", - "7zip-bin": "~5.2.0", - "app-builder-bin": "5.0.0-alpha.12", - "builder-util-runtime": "9.3.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.6", - "debug": "^4.3.4", - "fs-extra": "^10.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "is-ci": "^3.0.0", - "js-yaml": "^4.1.0", - "sanitize-filename": "^1.6.3", - "source-map-support": "^0.5.19", - "stat-mode": "^1.0.0", - "temp-file": "^3.4.0", - "tiny-async-pool": "1.3.0" - } - }, - "node_modules/builder-util-runtime": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.3.1.tgz", - "integrity": "sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/cacache/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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, - "license": "MIT", - "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/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chromium-bidi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-5.1.0.tgz", - "integrity": "sha512-9MSRhWRVoRPDG0TgzkHrshFSJJNZzfY5UFqUMuksg7zL1yoZIZ3jLB0YAgHclbiAxPI86pBnwDX1tbzoiV8aFw==", - "license": "Apache-2.0", - "dependencies": { - "mitt": "^3.0.1", - "zod": "^3.24.1" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/chromium-pickle-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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==", - "license": "MIT", - "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==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/config-file-ts": { - "version": "0.2.8-rc1", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", - "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^10.3.12", - "typescript": "^5.4.3" - } - }, - "node_modules/config-file-ts/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/config-file-ts/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/config-file-ts/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.1.0" - } - }, - "node_modules/cross-dirname": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", - "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "optional": true, - "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/define-properties": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-libc": { - "version": "2.0.4", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/devtools-protocol": { - "version": "0.0.1439962", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1439962.tgz", - "integrity": "sha512-jJF48UdryzKiWhJ1bLKr7BFWUQCEIT5uCNbDLqkQJBtkFxYzILJH44WN0PDKMIlGDN7Utb8vyUY85C3w4R/t2g==", - "license": "BSD-3-Clause" - }, - "node_modules/dir-compare": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", - "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5", - "p-limit": "^3.1.0 " - } - }, - "node_modules/dir-compare/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/dir-compare/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dmg-builder": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.0.12.tgz", - "integrity": "sha512-59CAAjAhTaIMCN8y9kD573vDkxbs1uhDcrFLHSgutYdPcGOU35Rf95725snvzEOy4BFB7+eLJ8djCNPmGwG67w==", - "dev": true, - "license": "MIT", - "dependencies": { - "app-builder-lib": "26.0.12", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", - "fs-extra": "^10.1.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" - }, - "optionalDependencies": { - "dmg-license": "^1.0.11" - } - }, - "node_modules/dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", - "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" - }, - "bin": { - "dmg-license": "bin/dmg-license.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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, - "license": "MIT" - }, - "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, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron": { - "version": "36.1.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-36.1.0.tgz", - "integrity": "sha512-gnp3BnbKdGsVc7cm1qlEaZc8pJsR08mIs8H/yTo8gHEtFkGGJbDTVZOYNAfbQlL0aXh+ozv+CnyiNeDNkT1Upg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^22.7.7", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, - "node_modules/electron-builder": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.0.12.tgz", - "integrity": "sha512-cD1kz5g2sgPTMFHjLxfMjUK5JABq3//J4jPswi93tOPFz6btzXYtK5NrDt717NRbukCUDOrrvmYVOWERlqoiXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "app-builder-lib": "26.0.12", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", - "chalk": "^4.1.2", - "dmg-builder": "26.0.12", - "fs-extra": "^10.1.0", - "is-ci": "^3.0.0", - "lazy-val": "^1.0.5", - "simple-update-notifier": "2.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "electron-builder": "cli.js", - "install-app-deps": "install-app-deps.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/electron-builder-squirrel-windows": { - "version": "26.0.12", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.0.12.tgz", - "integrity": "sha512-kpwXM7c/ayRUbYVErQbsZ0nQZX4aLHQrPEG9C4h9vuJCXylwFH8a7Jgi2VpKIObzCXO7LKHiCw4KdioFLFOgqA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "app-builder-lib": "26.0.12", - "builder-util": "26.0.11", - "electron-winstaller": "5.4.0" - } - }, - "node_modules/electron-publish": { - "version": "26.0.11", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.0.11.tgz", - "integrity": "sha512-a8QRH0rAPIWH9WyyS5LbNvW9Ark6qe63/LqDB7vu2JXYpi0Gma5Q60Dh4tmTqhOBQt0xsrzD8qE7C+D7j+B24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/fs-extra": "^9.0.11", - "builder-util": "26.0.11", - "builder-util-runtime": "9.3.1", - "chalk": "^4.1.2", - "form-data": "^4.0.0", - "fs-extra": "^10.1.0", - "lazy-val": "^1.0.5", - "mime": "^2.5.2" - } - }, - "node_modules/electron-squirrel-startup": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.1.tgz", - "integrity": "sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==", - "dependencies": { - "debug": "^2.2.0" - } - }, - "node_modules/electron-squirrel-startup/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/electron-squirrel-startup/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/electron-winstaller": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", - "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@electron/asar": "^3.2.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash": "^4.17.21", - "temp": "^0.9.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "@electron/windows-sign": "^1.1.2" - } - }, - "node_modules/electron-winstaller/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/electron-winstaller/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron-winstaller/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/electron/node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/electron/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/electron/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/electron/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "optional": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "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, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/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, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "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==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", - "license": "MIT", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global-agent": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "11.8.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-corefoundation": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "cli-truncate": "^2.1.0", - "node-addon-api": "^1.6.3" - }, - "engines": { - "node": "^8.11.2 || >=10" - } - }, - "node_modules/iconv-corefoundation/node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true, - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isbinaryfile": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.4.tgz", - "integrity": "sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "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/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/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, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "license": "MIT" - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/lazy-val": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", - "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lightningcss": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", - "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.29.2", - "lightningcss-darwin-x64": "1.29.2", - "lightningcss-freebsd-x64": "1.29.2", - "lightningcss-linux-arm-gnueabihf": "1.29.2", - "lightningcss-linux-arm64-gnu": "1.29.2", - "lightningcss-linux-arm64-musl": "1.29.2", - "lightningcss-linux-x64-gnu": "1.29.2", - "lightningcss-linux-x64-musl": "1.29.2", - "lightningcss-win32-arm64-msvc": "1.29.2", - "lightningcss-win32-x64-msvc": "1.29.2" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", - "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", - "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", - "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", - "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", - "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", - "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", - "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", - "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", - "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.29.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", - "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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==", - "license": "MIT" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/matcher": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "license": "MIT" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-abi": { - "version": "3.75.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", - "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" - }, - "node_modules/node-api-version": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", - "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - } - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pac-proxy-agent": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", - "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", - "license": "MIT", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.6", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "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, - "license": "BlueOak-1.0.0", - "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-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==" - }, - "node_modules/pe-library": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", - "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jet2jet" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/postject": { - "version": "1.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", - "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "commander": "^9.4.0" - }, - "bin": { - "postject": "dist/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/postject/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-agent": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", - "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.6", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.1.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-agent/node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "24.8.2", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.8.2.tgz", - "integrity": "sha512-Sn6SBPwJ6ASFvQ7knQkR+yG7pcmr4LfXzmoVp3NR0xXyBbPhJa8a8ybtb6fnw1g/DD/2t34//yirubVczko37w==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@puppeteer/browsers": "2.10.4", - "chromium-bidi": "5.1.0", - "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1439962", - "puppeteer-core": "24.8.2", - "typed-query-selector": "^2.12.0" - }, - "bin": { - "puppeteer": "lib/cjs/puppeteer/node/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/puppeteer-core": { - "version": "24.8.2", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.8.2.tgz", - "integrity": "sha512-wNw5cRZOHiFibWc0vdYCYO92QuKTbJ8frXiUfOq/UGJWMqhPoBThTKkV+dJ99YyWfzJ2CfQQ4T1nhhR0h8FlVw==", - "license": "Apache-2.0", - "dependencies": { - "@puppeteer/browsers": "2.10.4", - "chromium-bidi": "5.1.0", - "debug": "^4.4.0", - "devtools-protocol": "0.0.1439962", - "typed-query-selector": "^2.12.0", - "ws": "^8.18.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/read-binary-file-arch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", - "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "bin": { - "read-binary-file-arch": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resedit": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", - "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pe-library": "^0.4.1" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jet2jet" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/roarr": { - "version": "2.15.4", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "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==", - "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" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dev": true, - "license": "WTFPL OR ISC", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true, - "license": "ISC" - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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, - "license": "MIT", - "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, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/stat-mode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", - "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/streamx": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", - "license": "MIT", - "dependencies": { - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "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==", - "license": "MIT", - "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": { - "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, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sumchecker": { - "version": "3.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "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, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tailwindcss": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.5.tgz", - "integrity": "sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==" - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", - "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^4.0.1", - "bare-path": "^3.0.0" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp-file": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", - "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-exit-hook": "^2.0.1", - "fs-extra": "^10.0.0" - } - }, - "node_modules/temp/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/tiny-async-pool": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", - "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^5.5.0" - } - }, - "node_modules/tiny-async-pool/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dev": true, - "license": "WTFPL", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "0.13.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-query-selector": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", - "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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, - "license": "MIT" - }, - "node_modules/verror": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", - "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "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, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "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==", - "license": "MIT", - "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": { - "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, - "license": "MIT", - "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/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "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==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.24.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", - "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index f114897e..00000000 --- a/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "presenton", - "main": "app_dist/main.js", - "version": "0.2.0-beta", - "description": "Presenton Open Source", - "homepage": "https://presenton.ai", - "author": { - "name": "Presenton", - "email": "contact@presenton.ai" - }, - "scripts": { - "dev": "rm -rf app_dist && tsc && electron .", - "setup:env": "npm install && cd servers/fastapi && poetry env remove --all && poetry install && .venv/bin/pip uninstall -y hf_xet && cd ../../servers/nextjs && npm install", - "install:pyinstaller": "cd servers/fastapi && .venv/bin/pip install pyinstaller", - "build:ts": "rm -rf app_dist && tsc", - "build:css": "tailwindcss -i ./resources/ui/assets/css/tailwind.import.css -o ./resources/ui/assets/css/tailwind.css --watch", - "build:nextjs": "rm -rf resources/nextjs && cd servers/nextjs && npm run build && cp -r out ../../resources/nextjs", - "build:fastapi": "rm -rf resources/fastapi && cd servers/fastapi && .venv/bin/pyinstaller --distpath ../../resources server.spec", - "build:electron": "rm -rf app_dist && tsc && node build.js", - "build:all": "npm run clean:build && npm run setup:env && npm run build:ts && npm run install:pyinstaller && npm run build:nextjs && npm run build:fastapi && npm run build:electron", - "clean:build": "rm -rf resources/nextjs && rm -rf resources/fastapi && rm -rf app_dist" - }, - "devDependencies": { - "electron": "^36.1.0", - "electron-builder": "^26.0.12", - "typescript": "^5.8.3" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "dependencies": { - "@tailwindcss/cli": "^4.1.5", - "dotenv": "^16.5.0", - "electron-squirrel-startup": "^1.0.1", - "puppeteer": "^24.8.2", - "serve-handler": "^6.1.6", - "tailwindcss": "^4.1.5", - "tree-kill": "^1.2.2" - } -} \ No newline at end of file diff --git a/resources/ui/assets/css/tailwind.css b/resources/ui/assets/css/tailwind.css deleted file mode 100644 index 52f4669e..00000000 --- a/resources/ui/assets/css/tailwind.css +++ /dev/null @@ -1,4270 +0,0 @@ -/*! tailwindcss v4.1.5 | MIT License | https://tailwindcss.com */ -@layer properties; -@layer theme, base, components, utilities; -@layer theme { - :root, :host { - --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", - "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", - "Courier New", monospace; - --color-red-50: oklch(97.1% 0.013 17.38); - --color-red-300: oklch(80.8% 0.114 19.571); - --color-red-400: oklch(70.4% 0.191 22.216); - --color-red-500: oklch(63.7% 0.237 25.331); - --color-red-600: oklch(57.7% 0.245 27.325); - --color-red-700: oklch(50.5% 0.213 27.518); - --color-orange-500: oklch(70.5% 0.213 47.604); - --color-green-50: oklch(98.2% 0.018 155.826); - --color-green-100: oklch(96.2% 0.044 156.743); - --color-green-700: oklch(52.7% 0.154 150.069); - --color-emerald-500: oklch(69.6% 0.17 162.48); - --color-emerald-600: oklch(59.6% 0.145 163.225); - --color-emerald-700: oklch(50.8% 0.118 165.612); - --color-blue-50: oklch(97% 0.014 254.604); - --color-blue-100: oklch(93.2% 0.032 255.585); - --color-blue-200: oklch(88.2% 0.059 254.128); - --color-blue-300: oklch(80.9% 0.105 251.813); - --color-blue-400: oklch(70.7% 0.165 254.624); - --color-blue-500: oklch(62.3% 0.214 259.815); - --color-blue-600: oklch(54.6% 0.245 262.881); - --color-blue-700: oklch(48.8% 0.243 264.376); - --color-blue-800: oklch(42.4% 0.199 265.638); - --color-blue-900: oklch(37.9% 0.146 265.522); - --color-indigo-600: oklch(51.1% 0.262 276.966); - --color-indigo-700: oklch(45.7% 0.24 277.023); - --color-purple-50: oklch(97.7% 0.014 308.299); - --color-purple-100: oklch(94.6% 0.033 307.174); - --color-purple-200: oklch(90.2% 0.063 306.703); - --color-purple-400: oklch(71.4% 0.203 305.504); - --color-purple-500: oklch(62.7% 0.265 303.9); - --color-purple-600: oklch(55.8% 0.288 302.321); - --color-purple-700: oklch(49.6% 0.265 301.924); - --color-pink-500: oklch(65.6% 0.241 354.308); - --color-gray-50: oklch(98.5% 0.002 247.839); - --color-gray-100: oklch(96.7% 0.003 264.542); - --color-gray-200: oklch(92.8% 0.006 264.531); - --color-gray-300: oklch(87.2% 0.01 258.338); - --color-gray-400: oklch(70.7% 0.022 261.325); - --color-gray-500: oklch(55.1% 0.027 264.364); - --color-gray-600: oklch(44.6% 0.03 256.802); - --color-gray-700: oklch(37.3% 0.034 259.733); - --color-gray-800: oklch(27.8% 0.033 256.848); - --color-gray-900: oklch(21% 0.034 264.665); - --color-black: #000; - --color-white: #fff; - --spacing: 0.25rem; - --container-sm: 24rem; - --container-md: 28rem; - --container-lg: 32rem; - --container-3xl: 48rem; - --container-7xl: 80rem; - --text-xs: 0.75rem; - --text-xs--line-height: calc(1 / 0.75); - --text-sm: 0.875rem; - --text-sm--line-height: calc(1.25 / 0.875); - --text-base: 1rem; - --text-base--line-height: calc(1.5 / 1); - --text-lg: 1.125rem; - --text-lg--line-height: calc(1.75 / 1.125); - --text-xl: 1.25rem; - --text-xl--line-height: calc(1.75 / 1.25); - --text-2xl: 1.5rem; - --text-2xl--line-height: calc(2 / 1.5); - --text-3xl: 1.875rem; - --text-3xl--line-height: calc(2.25 / 1.875); - --text-4xl: 2.25rem; - --text-4xl--line-height: calc(2.5 / 2.25); - --font-weight-normal: 400; - --font-weight-medium: 500; - --font-weight-semibold: 600; - --font-weight-bold: 700; - --tracking-tight: -0.025em; - --tracking-widest: 0.1em; - --leading-relaxed: 1.625; - --radius-sm: 0.25rem; - --radius-md: 0.375rem; - --radius-lg: 0.5rem; - --radius-xl: 0.75rem; - --ease-out: cubic-bezier(0, 0, 0.2, 1); - --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); - --animate-spin: spin 1s linear infinite; - --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; - --blur-sm: 8px; - --blur-xl: 24px; - --aspect-video: 16 / 9; - --default-transition-duration: 150ms; - --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - --default-font-family: var(--font-sans); - --default-mono-font-family: var(--font-mono); - } -} -@layer base { - *, ::after, ::before, ::backdrop, ::file-selector-button { - box-sizing: border-box; - margin: 0; - padding: 0; - border: 0 solid; - } - html, :host { - line-height: 1.5; - -webkit-text-size-adjust: 100%; - tab-size: 4; - font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); - font-feature-settings: var(--default-font-feature-settings, normal); - font-variation-settings: var(--default-font-variation-settings, normal); - -webkit-tap-highlight-color: transparent; - } - hr { - height: 0; - color: inherit; - border-top-width: 1px; - } - abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - } - h1, h2, h3, h4, h5, h6 { - font-size: inherit; - font-weight: inherit; - } - a { - color: inherit; - -webkit-text-decoration: inherit; - text-decoration: inherit; - } - b, strong { - font-weight: bolder; - } - code, kbd, samp, pre { - font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); - font-feature-settings: var(--default-mono-font-feature-settings, normal); - font-variation-settings: var(--default-mono-font-variation-settings, normal); - font-size: 1em; - } - small { - font-size: 80%; - } - sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; - } - sub { - bottom: -0.25em; - } - sup { - top: -0.5em; - } - table { - text-indent: 0; - border-color: inherit; - border-collapse: collapse; - } - :-moz-focusring { - outline: auto; - } - progress { - vertical-align: baseline; - } - summary { - display: list-item; - } - ol, ul, menu { - list-style: none; - } - img, svg, video, canvas, audio, iframe, embed, object { - display: block; - vertical-align: middle; - } - img, video { - max-width: 100%; - height: auto; - } - button, input, select, optgroup, textarea, ::file-selector-button { - font: inherit; - font-feature-settings: inherit; - font-variation-settings: inherit; - letter-spacing: inherit; - color: inherit; - border-radius: 0; - background-color: transparent; - opacity: 1; - } - :where(select:is([multiple], [size])) optgroup { - font-weight: bolder; - } - :where(select:is([multiple], [size])) optgroup option { - padding-inline-start: 20px; - } - ::file-selector-button { - margin-inline-end: 4px; - } - ::placeholder { - opacity: 1; - } - @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { - ::placeholder { - color: currentcolor; - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, currentcolor 50%, transparent); - } - } - } - textarea { - resize: vertical; - } - ::-webkit-search-decoration { - -webkit-appearance: none; - } - ::-webkit-date-and-time-value { - min-height: 1lh; - text-align: inherit; - } - ::-webkit-datetime-edit { - display: inline-flex; - } - ::-webkit-datetime-edit-fields-wrapper { - padding: 0; - } - ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { - padding-block: 0; - } - :-moz-ui-invalid { - box-shadow: none; - } - button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { - appearance: button; - } - ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { - height: auto; - } - [hidden]:where(:not([hidden="until-found"])) { - display: none !important; - } -} -@layer utilities { - .pointer-events-auto { - pointer-events: auto; - } - .pointer-events-none { - pointer-events: none; - } - .visible { - visibility: visible; - } - .sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; - } - .absolute { - position: absolute; - } - .fixed { - position: fixed; - } - .relative { - position: relative; - } - .static { - position: static; - } - .sticky { - position: sticky; - } - .-inset-\[2px\] { - inset: calc(2px * -1); - } - .inset-0 { - inset: calc(var(--spacing) * 0); - } - .inset-x-0 { - inset-inline: calc(var(--spacing) * 0); - } - .inset-y-0 { - inset-block: calc(var(--spacing) * 0); - } - .top-0 { - top: calc(var(--spacing) * 0); - } - .top-1 { - top: calc(var(--spacing) * 1); - } - .top-1\/2 { - top: calc(1/2 * 100%); - } - .top-2 { - top: calc(var(--spacing) * 2); - } - .top-2\.5 { - top: calc(var(--spacing) * 2.5); - } - .top-4 { - top: calc(var(--spacing) * 4); - } - .top-\[5\.2rem\] { - top: 5.2rem; - } - .top-\[50\%\] { - top: 50%; - } - .-right-4 { - right: calc(var(--spacing) * -4); - } - .right-0 { - right: calc(var(--spacing) * 0); - } - .right-1 { - right: calc(var(--spacing) * 1); - } - .right-2 { - right: calc(var(--spacing) * 2); - } - .right-4 { - right: calc(var(--spacing) * 4); - } - .right-5 { - right: calc(var(--spacing) * 5); - } - .right-6 { - right: calc(var(--spacing) * 6); - } - .-bottom-4 { - bottom: calc(var(--spacing) * -4); - } - .bottom-0 { - bottom: calc(var(--spacing) * 0); - } - .bottom-2 { - bottom: calc(var(--spacing) * 2); - } - .bottom-4 { - bottom: calc(var(--spacing) * 4); - } - .bottom-5 { - bottom: calc(var(--spacing) * 5); - } - .bottom-6 { - bottom: calc(var(--spacing) * 6); - } - .bottom-20 { - bottom: calc(var(--spacing) * 20); - } - .-left-7 { - left: calc(var(--spacing) * -7); - } - .left-0 { - left: calc(var(--spacing) * 0); - } - .left-1 { - left: calc(var(--spacing) * 1); - } - .left-1\/2 { - left: calc(1/2 * 100%); - } - .left-2 { - left: calc(var(--spacing) * 2); - } - .left-3 { - left: calc(var(--spacing) * 3); - } - .left-4 { - left: calc(var(--spacing) * 4); - } - .left-\[50\%\] { - left: 50%; - } - .z-10 { - z-index: 10; - } - .z-20 { - z-index: 20; - } - .z-30 { - z-index: 30; - } - .z-40 { - z-index: 40; - } - .z-50 { - z-index: 50; - } - .z-\[-10\] { - z-index: -10; - } - .z-\[100\] { - z-index: 100; - } - .order-1 { - order: 1; - } - .col-span-2 { - grid-column: span 2 / span 2; - } - .col-span-3 { - grid-column: span 3 / span 3; - } - .container { - width: 100%; - @media (width >= 40rem) { - max-width: 40rem; - } - @media (width >= 48rem) { - max-width: 48rem; - } - @media (width >= 64rem) { - max-width: 64rem; - } - @media (width >= 80rem) { - max-width: 80rem; - } - @media (width >= 96rem) { - max-width: 96rem; - } - } - .-mx-1 { - margin-inline: calc(var(--spacing) * -1); - } - .mx-2 { - margin-inline: calc(var(--spacing) * 2); - } - .mx-auto { - margin-inline: auto; - } - .my-1 { - margin-block: calc(var(--spacing) * 1); - } - .my-4 { - margin-block: calc(var(--spacing) * 4); - } - .my-6 { - margin-block: calc(var(--spacing) * 6); - } - .my-10 { - margin-block: calc(var(--spacing) * 10); - } - .mt-0 { - margin-top: calc(var(--spacing) * 0); - } - .mt-0\.5 { - margin-top: calc(var(--spacing) * 0.5); - } - .mt-1 { - margin-top: calc(var(--spacing) * 1); - } - .mt-2 { - margin-top: calc(var(--spacing) * 2); - } - .mt-4 { - margin-top: calc(var(--spacing) * 4); - } - .mt-6 { - margin-top: calc(var(--spacing) * 6); - } - .mt-8 { - margin-top: calc(var(--spacing) * 8); - } - .mt-10 { - margin-top: calc(var(--spacing) * 10); - } - .mt-12 { - margin-top: calc(var(--spacing) * 12); - } - .mt-16 { - margin-top: calc(var(--spacing) * 16); - } - .mt-20 { - margin-top: calc(var(--spacing) * 20); - } - .mt-40 { - margin-top: calc(var(--spacing) * 40); - } - .mr-0 { - margin-right: calc(var(--spacing) * 0); - } - .mr-1 { - margin-right: calc(var(--spacing) * 1); - } - .mr-2 { - margin-right: calc(var(--spacing) * 2); - } - .mr-4 { - margin-right: calc(var(--spacing) * 4); - } - .mb-1 { - margin-bottom: calc(var(--spacing) * 1); - } - .mb-2 { - margin-bottom: calc(var(--spacing) * 2); - } - .mb-3 { - margin-bottom: calc(var(--spacing) * 3); - } - .mb-4 { - margin-bottom: calc(var(--spacing) * 4); - } - .mb-5 { - margin-bottom: calc(var(--spacing) * 5); - } - .mb-6 { - margin-bottom: calc(var(--spacing) * 6); - } - .mb-8 { - margin-bottom: calc(var(--spacing) * 8); - } - .mb-10 { - margin-bottom: calc(var(--spacing) * 10); - } - .mb-12 { - margin-bottom: calc(var(--spacing) * 12); - } - .-ml-\[300px\] { - margin-left: calc(300px * -1); - } - .ml-0 { - margin-left: calc(var(--spacing) * 0); - } - .ml-1 { - margin-left: calc(var(--spacing) * 1); - } - .ml-2 { - margin-left: calc(var(--spacing) * 2); - } - .ml-auto { - margin-left: auto; - } - .line-clamp-1 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; - } - .line-clamp-2 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - } - .line-clamp-3 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 3; - } - .line-clamp-6 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 6; - } - .block { - display: block; - } - .contents { - display: contents; - } - .flex { - display: flex; - } - .grid { - display: grid; - } - .hidden { - display: none; - } - .inline-block { - display: inline-block; - } - .inline-flex { - display: inline-flex; - } - .table { - display: table; - } - .aspect-\[4\/3\] { - aspect-ratio: 4/3; - } - .aspect-\[16\/9\] { - aspect-ratio: 16/9; - } - .aspect-square { - aspect-ratio: 1 / 1; - } - .aspect-video { - aspect-ratio: var(--aspect-video); - } - .\!h-6 { - height: calc(var(--spacing) * 6) !important; - } - .h-0 { - height: calc(var(--spacing) * 0); - } - .h-0\.5 { - height: calc(var(--spacing) * 0.5); - } - .h-1 { - height: calc(var(--spacing) * 1); - } - .h-1\.5 { - height: calc(var(--spacing) * 1.5); - } - .h-2 { - height: calc(var(--spacing) * 2); - } - .h-2\.5 { - height: calc(var(--spacing) * 2.5); - } - .h-3 { - height: calc(var(--spacing) * 3); - } - .h-3\.5 { - height: calc(var(--spacing) * 3.5); - } - .h-4 { - height: calc(var(--spacing) * 4); - } - .h-5 { - height: calc(var(--spacing) * 5); - } - .h-6 { - height: calc(var(--spacing) * 6); - } - .h-7 { - height: calc(var(--spacing) * 7); - } - .h-8 { - height: calc(var(--spacing) * 8); - } - .h-9 { - height: calc(var(--spacing) * 9); - } - .h-10 { - height: calc(var(--spacing) * 10); - } - .h-12 { - height: calc(var(--spacing) * 12); - } - .h-14 { - height: calc(var(--spacing) * 14); - } - .h-16 { - height: calc(var(--spacing) * 16); - } - .h-20 { - height: calc(var(--spacing) * 20); - } - .h-24 { - height: calc(var(--spacing) * 24); - } - .h-28 { - height: calc(var(--spacing) * 28); - } - .h-32 { - height: calc(var(--spacing) * 32); - } - .h-40 { - height: calc(var(--spacing) * 40); - } - .h-48 { - height: calc(var(--spacing) * 48); - } - .h-64 { - height: calc(var(--spacing) * 64); - } - .h-\[1px\] { - height: 1px; - } - .h-\[2px\] { - height: 2px; - } - .h-\[3px\] { - height: 3px; - } - .h-\[16px\] { - height: 16px; - } - .h-\[24px\] { - height: 24px; - } - .h-\[32px\] { - height: 32px; - } - .h-\[34px\] { - height: 34px; - } - .h-\[48px\] { - height: 48px; - } - .h-\[60vh\] { - height: 60vh; - } - .h-\[80vh\] { - height: 80vh; - } - .h-\[85vh\] { - height: 85vh; - } - .h-\[120px\] { - height: 120px; - } - .h-\[210px\] { - height: 210px; - } - .h-\[calc\(100\%-100px\)\] { - height: calc(100% - 100px); - } - .h-\[calc\(100vh-100px\)\] { - height: calc(100vh - 100px); - } - .h-\[calc\(100vh-120px\)\] { - height: calc(100vh - 120px); - } - .h-\[calc\(100vh-150px\)\] { - height: calc(100vh - 150px); - } - .h-\[calc\(100vh-200px\)\] { - height: calc(100vh - 200px); - } - .h-\[calc\(100vh-300px\)\] { - height: calc(100vh - 300px); - } - .h-\[var\(--radix-select-trigger-height\)\] { - height: var(--radix-select-trigger-height); - } - .h-full { - height: 100%; - } - .h-px { - height: 1px; - } - .h-screen { - height: 100vh; - } - .max-h-96 { - max-height: calc(var(--spacing) * 96); - } - .max-h-\[20px\] { - max-height: 20px; - } - .max-h-\[80vh\] { - max-height: 80vh; - } - .max-h-\[100px\] { - max-height: 100px; - } - .max-h-\[300px\] { - max-height: 300px; - } - .max-h-\[500px\] { - max-height: 500px; - } - .max-h-\[720px\] { - max-height: 720px; - } - .max-h-full { - max-height: 100%; - } - .max-h-screen { - max-height: 100vh; - } - .min-h-\[60px\] { - min-height: 60px; - } - .min-h-\[70vh\] { - min-height: 70vh; - } - .min-h-\[100px\] { - min-height: 100px; - } - .min-h-\[120px\] { - min-height: 120px; - } - .min-h-\[150px\] { - min-height: 150px; - } - .min-h-\[200px\] { - min-height: 200px; - } - .min-h-\[300px\] { - min-height: 300px; - } - .min-h-screen { - min-height: 100vh; - } - .\!w-6 { - width: calc(var(--spacing) * 6) !important; - } - .w-0 { - width: calc(var(--spacing) * 0); - } - .w-0\.5 { - width: calc(var(--spacing) * 0.5); - } - .w-1 { - width: calc(var(--spacing) * 1); - } - .w-1\.5 { - width: calc(var(--spacing) * 1.5); - } - .w-1\/2 { - width: calc(1/2 * 100%); - } - .w-1\/3 { - width: calc(1/3 * 100%); - } - .w-2 { - width: calc(var(--spacing) * 2); - } - .w-2\.5 { - width: calc(var(--spacing) * 2.5); - } - .w-2\/3 { - width: calc(2/3 * 100%); - } - .w-3 { - width: calc(var(--spacing) * 3); - } - .w-3\.5 { - width: calc(var(--spacing) * 3.5); - } - .w-3\/4 { - width: calc(3/4 * 100%); - } - .w-3\/5 { - width: calc(3/5 * 100%); - } - .w-4 { - width: calc(var(--spacing) * 4); - } - .w-5 { - width: calc(var(--spacing) * 5); - } - .w-6 { - width: calc(var(--spacing) * 6); - } - .w-8 { - width: calc(var(--spacing) * 8); - } - .w-9 { - width: calc(var(--spacing) * 9); - } - .w-10 { - width: calc(var(--spacing) * 10); - } - .w-12 { - width: calc(var(--spacing) * 12); - } - .w-16 { - width: calc(var(--spacing) * 16); - } - .w-20 { - width: calc(var(--spacing) * 20); - } - .w-24 { - width: calc(var(--spacing) * 24); - } - .w-32 { - width: calc(var(--spacing) * 32); - } - .w-36 { - width: calc(var(--spacing) * 36); - } - .w-40 { - width: calc(var(--spacing) * 40); - } - .w-48 { - width: calc(var(--spacing) * 48); - } - .w-56 { - width: calc(var(--spacing) * 56); - } - .w-60 { - width: calc(var(--spacing) * 60); - } - .w-72 { - width: calc(var(--spacing) * 72); - } - .w-\[1px\] { - width: 1px; - } - .w-\[3px\] { - width: 3px; - } - .w-\[16px\] { - width: 16px; - } - .w-\[30\%\] { - width: 30%; - } - .w-\[32px\] { - width: 32px; - } - .w-\[34px\] { - width: 34px; - } - .w-\[70\%\] { - width: 70%; - } - .w-\[80\%\] { - width: 80%; - } - .w-\[80px\] { - width: 80px; - } - .w-\[85\%\] { - width: 85%; - } - .w-\[87\%\] { - width: 87%; - } - .w-\[95\%\] { - width: 95%; - } - .w-\[102px\] { - width: 102px; - } - .w-\[120px\] { - width: 120px; - } - .w-\[160px\] { - width: 160px; - } - .w-\[180px\] { - width: 180px; - } - .w-\[200px\] { - width: 200px; - } - .w-\[204px\] { - width: 204px; - } - .w-\[250px\] { - width: 250px; - } - .w-\[280px\] { - width: 280px; - } - .w-\[300px\] { - width: 300px; - } - .w-\[350px\] { - width: 350px; - } - .w-\[400px\] { - width: 400px; - } - .w-\[500px\] { - width: 500px; - } - .w-\[600px\] { - width: 600px; - } - .w-auto { - width: auto; - } - .w-full { - width: 100%; - } - .w-screen { - width: 100vw; - } - .max-w-3xl { - max-width: var(--container-3xl); - } - .max-w-7xl { - max-width: var(--container-7xl); - } - .max-w-\[20px\] { - max-width: 20px; - } - .max-w-\[90vw\] { - max-width: 90vw; - } - .max-w-\[200px\] { - max-width: 200px; - } - .max-w-\[300px\] { - max-width: 300px; - } - .max-w-\[350px\] { - max-width: 350px; - } - .max-w-\[1000px\] { - max-width: 1000px; - } - .max-w-\[1100px\] { - max-width: 1100px; - } - .max-w-\[1280px\] { - max-width: 1280px; - } - .max-w-\[1440px\] { - max-width: 1440px; - } - .max-w-full { - max-width: 100%; - } - .max-w-lg { - max-width: var(--container-lg); - } - .max-w-md { - max-width: var(--container-md); - } - .max-w-none { - max-width: none; - } - .min-w-8 { - min-width: calc(var(--spacing) * 8); - } - .min-w-\[8rem\] { - min-width: 8rem; - } - .min-w-\[60px\] { - min-width: 60px; - } - .min-w-\[100px\] { - min-width: 100px; - } - .min-w-\[162px\] { - min-width: 162px; - } - .min-w-\[280px\] { - min-width: 280px; - } - .min-w-\[300px\] { - min-width: 300px; - } - .min-w-\[var\(--radix-select-trigger-width\)\] { - min-width: var(--radix-select-trigger-width); - } - .flex-1 { - flex: 1; - } - .flex-shrink { - flex-shrink: 1; - } - .flex-shrink-0 { - flex-shrink: 0; - } - .shrink-0 { - flex-shrink: 0; - } - .flex-grow { - flex-grow: 1; - } - .grow { - flex-grow: 1; - } - .caption-bottom { - caption-side: bottom; - } - .border-collapse { - border-collapse: collapse; - } - .-translate-x-1 { - --tw-translate-x: calc(var(--spacing) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .-translate-x-1\/2 { - --tw-translate-x: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .-translate-x-\[30\%\] { - --tw-translate-x: calc(30% * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .-translate-x-full { - --tw-translate-x: -100%; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .translate-x-0 { - --tw-translate-x: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .translate-x-\[-50\%\] { - --tw-translate-x: -50%; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .-translate-y-1 { - --tw-translate-y: calc(var(--spacing) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .-translate-y-1\/2 { - --tw-translate-y: calc(calc(1/2 * 100%) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .translate-y-\[-50\%\] { - --tw-translate-y: -50%; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - .scale-95 { - --tw-scale-x: 95%; - --tw-scale-y: 95%; - --tw-scale-z: 95%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - .scale-100 { - --tw-scale-x: 100%; - --tw-scale-y: 100%; - --tw-scale-z: 100%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - .scale-110 { - --tw-scale-x: 110%; - --tw-scale-y: 110%; - --tw-scale-z: 110%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - .transform { - transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); - } - .animate-pulse { - animation: var(--animate-pulse); - } - .animate-spin { - animation: var(--animate-spin); - } - .cursor-crosshair { - cursor: crosshair; - } - .cursor-default { - cursor: default; - } - .cursor-grab { - cursor: grab; - } - .cursor-not-allowed { - cursor: not-allowed; - } - .cursor-pointer { - cursor: pointer; - } - .cursor-text { - cursor: text; - } - .cursor-wait { - cursor: wait; - } - .touch-none { - touch-action: none; - } - .resize { - resize: both; - } - .list-inside { - list-style-position: inside; - } - .list-decimal { - list-style-type: decimal; - } - .grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); - } - .grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - .grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - .grid-cols-4 { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - .flex-col { - flex-direction: column; - } - .flex-col-reverse { - flex-direction: column-reverse; - } - .flex-wrap { - flex-wrap: wrap; - } - .items-center { - align-items: center; - } - .items-end { - align-items: flex-end; - } - .items-start { - align-items: flex-start; - } - .justify-between { - justify-content: space-between; - } - .justify-center { - justify-content: center; - } - .justify-end { - justify-content: flex-end; - } - .justify-start { - justify-content: flex-start; - } - .gap-1 { - gap: calc(var(--spacing) * 1); - } - .gap-1\.5 { - gap: calc(var(--spacing) * 1.5); - } - .gap-2 { - gap: calc(var(--spacing) * 2); - } - .gap-3 { - gap: calc(var(--spacing) * 3); - } - .gap-4 { - gap: calc(var(--spacing) * 4); - } - .gap-6 { - gap: calc(var(--spacing) * 6); - } - .gap-8 { - gap: calc(var(--spacing) * 8); - } - .gap-10 { - gap: calc(var(--spacing) * 10); - } - .gap-12 { - gap: calc(var(--spacing) * 12); - } - .gap-14 { - gap: calc(var(--spacing) * 14); - } - .gap-\[2px\] { - gap: 2px; - } - .space-y-1 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-1\.5 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-2 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-3 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-4 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-6 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-8 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-\[3px\] { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(3px * var(--tw-space-y-reverse)); - margin-block-end: calc(3px * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-x-1 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 1) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-x-reverse))); - } - } - .space-x-2 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); - } - } - .space-x-4 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))); - } - } - .truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .overflow-auto { - overflow: auto; - } - .overflow-hidden { - overflow: hidden; - } - .overflow-x-auto { - overflow-x: auto; - } - .overflow-x-hidden { - overflow-x: hidden; - } - .overflow-y-auto { - overflow-y: auto; - } - .rounded { - border-radius: 0.25rem; - } - .rounded-\[8px\] { - border-radius: 8px; - } - .rounded-\[20px\] { - border-radius: 20px; - } - .rounded-\[32px\] { - border-radius: 32px; - } - .rounded-\[50\%\] { - border-radius: 50%; - } - .rounded-\[inherit\] { - border-radius: inherit; - } - .rounded-full { - border-radius: calc(infinity * 1px); - } - .rounded-lg { - border-radius: var(--radius-lg); - } - .rounded-md { - border-radius: var(--radius-md); - } - .rounded-none { - border-radius: 0; - } - .rounded-sm { - border-radius: var(--radius-sm); - } - .rounded-xl { - border-radius: var(--radius-xl); - } - .rounded-t-lg { - border-top-left-radius: var(--radius-lg); - border-top-right-radius: var(--radius-lg); - } - .rounded-r-lg { - border-top-right-radius: var(--radius-lg); - border-bottom-right-radius: var(--radius-lg); - } - .rounded-b-lg { - border-bottom-right-radius: var(--radius-lg); - border-bottom-left-radius: var(--radius-lg); - } - .rounded-b-none { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } - .border { - border-style: var(--tw-border-style); - border-width: 1px; - } - .border-0 { - border-style: var(--tw-border-style); - border-width: 0px; - } - .border-2 { - border-style: var(--tw-border-style); - border-width: 2px; - } - .border-4 { - border-style: var(--tw-border-style); - border-width: 4px; - } - .border-t { - border-top-style: var(--tw-border-style); - border-top-width: 1px; - } - .border-r { - border-right-style: var(--tw-border-style); - border-right-width: 1px; - } - .border-b { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - } - .border-l { - border-left-style: var(--tw-border-style); - border-left-width: 1px; - } - .border-dashed { - --tw-border-style: dashed; - border-style: dashed; - } - .border-none { - --tw-border-style: none; - border-style: none; - } - .border-\[\#5146E5\] { - border-color: #5146E5; - } - .border-\[\#9034EA\] { - border-color: #9034EA; - } - .border-blue-100 { - border-color: var(--color-blue-100); - } - .border-blue-200 { - border-color: var(--color-blue-200); - } - .border-blue-300 { - border-color: var(--color-blue-300); - } - .border-blue-400 { - border-color: var(--color-blue-400); - } - .border-blue-500 { - border-color: var(--color-blue-500); - } - .border-current { - border-color: currentcolor; - } - .border-gray-100 { - border-color: var(--color-gray-100); - } - .border-gray-200 { - border-color: var(--color-gray-200); - } - .border-gray-300 { - border-color: var(--color-gray-300); - } - .border-gray-400 { - border-color: var(--color-gray-400); - } - .border-gray-800 { - border-color: var(--color-gray-800); - } - .border-purple-200 { - border-color: var(--color-purple-200); - } - .border-purple-400 { - border-color: var(--color-purple-400); - } - .border-red-300 { - border-color: var(--color-red-300); - } - .border-transparent { - border-color: transparent; - } - .border-white { - border-color: var(--color-white); - } - .border-white\/10 { - border-color: color-mix(in srgb, #fff 10%, transparent); - @supports (color: color-mix(in lab, red, red)) { - border-color: color-mix(in oklab, var(--color-white) 10%, transparent); - } - } - .border-t-blue-200 { - border-top-color: var(--color-blue-200); - } - .border-t-purple-600 { - border-top-color: var(--color-purple-600); - } - .border-t-transparent { - border-top-color: transparent; - } - .border-r-blue-200 { - border-right-color: var(--color-blue-200); - } - .border-b-gray-50 { - border-bottom-color: var(--color-gray-50); - } - .border-l-gray-50 { - border-left-color: var(--color-gray-50); - } - .border-l-transparent { - border-left-color: transparent; - } - .bg-\[\#5141e5\] { - background-color: #5141e5; - } - .bg-\[\#5146E5\] { - background-color: #5146E5; - } - .bg-\[\#6358fd\] { - background-color: #6358fd; - } - .bg-\[\#030303\] { - background-color: #030303; - } - .bg-\[\#E9E8F8\] { - background-color: #E9E8F8; - } - .bg-\[\#EDEDED\] { - background-color: #EDEDED; - } - .bg-\[\#F9F9F9\] { - background-color: #F9F9F9; - } - .bg-\[\#e8f0fe\] { - background-color: #e8f0fe; - } - .bg-\[\#f3f3f3\] { - background-color: #f3f3f3; - } - .bg-\[\#f8f9fa\] { - background-color: #f8f9fa; - } - .bg-black { - background-color: var(--color-black); - } - .bg-black\/0 { - background-color: color-mix(in srgb, #000 0%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 0%, transparent); - } - } - .bg-black\/20 { - background-color: color-mix(in srgb, #000 20%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 20%, transparent); - } - } - .bg-black\/50 { - background-color: color-mix(in srgb, #000 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 50%, transparent); - } - } - .bg-black\/70 { - background-color: color-mix(in srgb, #000 70%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 70%, transparent); - } - } - .bg-black\/80 { - background-color: color-mix(in srgb, #000 80%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 80%, transparent); - } - } - .bg-blue-50 { - background-color: var(--color-blue-50); - } - .bg-blue-100 { - background-color: var(--color-blue-100); - } - .bg-blue-200 { - background-color: var(--color-blue-200); - } - .bg-blue-300 { - background-color: var(--color-blue-300); - } - .bg-blue-400 { - background-color: var(--color-blue-400); - } - .bg-blue-500 { - background-color: var(--color-blue-500); - } - .bg-blue-600 { - background-color: var(--color-blue-600); - } - .bg-current { - background-color: currentcolor; - } - .bg-emerald-600 { - background-color: var(--color-emerald-600); - } - .bg-gray-50 { - background-color: var(--color-gray-50); - } - .bg-gray-100 { - background-color: var(--color-gray-100); - } - .bg-gray-200 { - background-color: var(--color-gray-200); - } - .bg-gray-300 { - background-color: var(--color-gray-300); - } - .bg-gray-400 { - background-color: var(--color-gray-400); - } - .bg-gray-600 { - background-color: var(--color-gray-600); - } - .bg-gray-900 { - background-color: var(--color-gray-900); - } - .bg-green-50 { - background-color: var(--color-green-50); - } - .bg-green-100 { - background-color: var(--color-green-100); - } - .bg-indigo-600 { - background-color: var(--color-indigo-600); - } - .bg-purple-50 { - background-color: var(--color-purple-50); - } - .bg-purple-600 { - background-color: var(--color-purple-600); - } - .bg-red-500 { - background-color: var(--color-red-500); - } - .bg-transparent { - background-color: transparent; - } - .bg-white { - background-color: var(--color-white); - } - .bg-white\/20 { - background-color: color-mix(in srgb, #fff 20%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 20%, transparent); - } - } - .bg-white\/30 { - background-color: color-mix(in srgb, #fff 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 30%, transparent); - } - } - .bg-white\/50 { - background-color: color-mix(in srgb, #fff 50%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 50%, transparent); - } - } - .bg-white\/70 { - background-color: color-mix(in srgb, #fff 70%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 70%, transparent); - } - } - .bg-white\/80 { - background-color: color-mix(in srgb, #fff 80%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 80%, transparent); - } - } - .bg-white\/90 { - background-color: color-mix(in srgb, #fff 90%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 90%, transparent); - } - } - .bg-gradient-to-b { - --tw-gradient-position: to bottom in oklab; - background-image: linear-gradient(var(--tw-gradient-stops)); - } - .bg-gradient-to-r { - --tw-gradient-position: to right in oklab; - background-image: linear-gradient(var(--tw-gradient-stops)); - } - .from-\[\#9034EA\] { - --tw-gradient-from: #9034EA; - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-blue-600 { - --tw-gradient-from: var(--color-blue-600); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-gray-50 { - --tw-gradient-from: var(--color-gray-50); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .from-purple-500 { - --tw-gradient-from: var(--color-purple-500); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .via-\[\#5146E5\] { - --tw-gradient-via: #5146E5; - --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-via-stops); - } - .via-pink-500 { - --tw-gradient-via: var(--color-pink-500); - --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-via-stops); - } - .to-\[\#5146E5\] { - --tw-gradient-to: #5146E5; - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-\[\#9034EA\] { - --tw-gradient-to: #9034EA; - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-gray-100 { - --tw-gradient-to: var(--color-gray-100); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-indigo-600 { - --tw-gradient-to: var(--color-indigo-600); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-orange-500 { - --tw-gradient-to: var(--color-orange-500); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .to-white { - --tw-gradient-to: var(--color-white); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - .fill-current { - fill: currentcolor; - } - .stroke-white { - stroke: var(--color-white); - } - .object-contain { - object-fit: contain; - } - .object-cover { - object-fit: cover; - } - .p-0 { - padding: calc(var(--spacing) * 0); - } - .p-1 { - padding: calc(var(--spacing) * 1); - } - .p-1\.5 { - padding: calc(var(--spacing) * 1.5); - } - .p-2 { - padding: calc(var(--spacing) * 2); - } - .p-3 { - padding: calc(var(--spacing) * 3); - } - .p-4 { - padding: calc(var(--spacing) * 4); - } - .p-5 { - padding: calc(var(--spacing) * 5); - } - .p-6 { - padding: calc(var(--spacing) * 6); - } - .p-8 { - padding: calc(var(--spacing) * 8); - } - .p-\[1px\] { - padding: 1px; - } - .p-\[2px\] { - padding: 2px; - } - .px-1 { - padding-inline: calc(var(--spacing) * 1); - } - .px-2 { - padding-inline: calc(var(--spacing) * 2); - } - .px-3 { - padding-inline: calc(var(--spacing) * 3); - } - .px-4 { - padding-inline: calc(var(--spacing) * 4); - } - .px-5 { - padding-inline: calc(var(--spacing) * 5); - } - .px-6 { - padding-inline: calc(var(--spacing) * 6); - } - .px-8 { - padding-inline: calc(var(--spacing) * 8); - } - .py-1 { - padding-block: calc(var(--spacing) * 1); - } - .py-1\.5 { - padding-block: calc(var(--spacing) * 1.5); - } - .py-2 { - padding-block: calc(var(--spacing) * 2); - } - .py-2\.5 { - padding-block: calc(var(--spacing) * 2.5); - } - .py-3 { - padding-block: calc(var(--spacing) * 3); - } - .py-4 { - padding-block: calc(var(--spacing) * 4); - } - .py-5 { - padding-block: calc(var(--spacing) * 5); - } - .py-6 { - padding-block: calc(var(--spacing) * 6); - } - .py-8 { - padding-block: calc(var(--spacing) * 8); - } - .py-12 { - padding-block: calc(var(--spacing) * 12); - } - .py-\[10px\] { - padding-block: 10px; - } - .pt-0 { - padding-top: calc(var(--spacing) * 0); - } - .pt-2 { - padding-top: calc(var(--spacing) * 2); - } - .pt-4 { - padding-top: calc(var(--spacing) * 4); - } - .pt-6 { - padding-top: calc(var(--spacing) * 6); - } - .pt-8 { - padding-top: calc(var(--spacing) * 8); - } - .pt-20 { - padding-top: calc(var(--spacing) * 20); - } - .pr-2 { - padding-right: calc(var(--spacing) * 2); - } - .pr-4 { - padding-right: calc(var(--spacing) * 4); - } - .pr-6 { - padding-right: calc(var(--spacing) * 6); - } - .pr-8 { - padding-right: calc(var(--spacing) * 8); - } - .pb-1 { - padding-bottom: calc(var(--spacing) * 1); - } - .pb-2 { - padding-bottom: calc(var(--spacing) * 2); - } - .pb-3 { - padding-bottom: calc(var(--spacing) * 3); - } - .pb-4 { - padding-bottom: calc(var(--spacing) * 4); - } - .pb-6 { - padding-bottom: calc(var(--spacing) * 6); - } - .pb-8 { - padding-bottom: calc(var(--spacing) * 8); - } - .pb-10 { - padding-bottom: calc(var(--spacing) * 10); - } - .pb-16 { - padding-bottom: calc(var(--spacing) * 16); - } - .pl-2 { - padding-left: calc(var(--spacing) * 2); - } - .pl-6 { - padding-left: calc(var(--spacing) * 6); - } - .pl-8 { - padding-left: calc(var(--spacing) * 8); - } - .pl-10 { - padding-left: calc(var(--spacing) * 10); - } - .text-center { - text-align: center; - } - .text-end { - text-align: end; - } - .text-left { - text-align: left; - } - .text-right { - text-align: right; - } - .text-start { - text-align: start; - } - .align-bottom { - vertical-align: bottom; - } - .align-middle { - vertical-align: middle; - } - .align-top { - vertical-align: top; - } - .font-mono { - font-family: var(--font-mono); - } - .text-2xl { - font-size: var(--text-2xl); - line-height: var(--tw-leading, var(--text-2xl--line-height)); - } - .text-3xl { - font-size: var(--text-3xl); - line-height: var(--tw-leading, var(--text-3xl--line-height)); - } - .text-4xl { - font-size: var(--text-4xl); - line-height: var(--tw-leading, var(--text-4xl--line-height)); - } - .text-base { - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - } - .text-lg { - font-size: var(--text-lg); - line-height: var(--tw-leading, var(--text-lg--line-height)); - } - .text-sm { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - .text-xl { - font-size: var(--text-xl); - line-height: var(--tw-leading, var(--text-xl--line-height)); - } - .text-xs { - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - } - .text-\[4px\] { - font-size: 4px; - } - .text-\[5px\] { - font-size: 5px; - } - .text-\[6px\] { - font-size: 6px; - } - .text-\[8px\] { - font-size: 8px; - } - .text-\[10px\] { - font-size: 10px; - } - .text-\[13px\] { - font-size: 13px; - } - .text-\[16px\] { - font-size: 16px; - } - .text-\[20px\] { - font-size: 20px; - } - .text-\[24px\] { - font-size: 24px; - } - .text-\[26px\] { - font-size: 26px; - } - .text-\[32px\] { - font-size: 32px; - } - .text-\[40px\] { - font-size: 40px; - } - .leading-3 { - --tw-leading: calc(var(--spacing) * 3); - line-height: calc(var(--spacing) * 3); - } - .leading-6 { - --tw-leading: calc(var(--spacing) * 6); - line-height: calc(var(--spacing) * 6); - } - .leading-\[20px\] { - --tw-leading: 20px; - line-height: 20px; - } - .leading-\[24px\] { - --tw-leading: 24px; - line-height: 24px; - } - .leading-\[26px\] { - --tw-leading: 26px; - line-height: 26px; - } - .leading-\[32px\] { - --tw-leading: 32px; - line-height: 32px; - } - .leading-\[36px\] { - --tw-leading: 36px; - line-height: 36px; - } - .leading-\[40px\] { - --tw-leading: 40px; - line-height: 40px; - } - .leading-\[48px\] { - --tw-leading: 48px; - line-height: 48px; - } - .leading-none { - --tw-leading: 1; - line-height: 1; - } - .leading-relaxed { - --tw-leading: var(--leading-relaxed); - line-height: var(--leading-relaxed); - } - .font-\[400\] { - --tw-font-weight: 400; - font-weight: 400; - } - .font-bold { - --tw-font-weight: var(--font-weight-bold); - font-weight: var(--font-weight-bold); - } - .font-medium { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - .font-normal { - --tw-font-weight: var(--font-weight-normal); - font-weight: var(--font-weight-normal); - } - .font-semibold { - --tw-font-weight: var(--font-weight-semibold); - font-weight: var(--font-weight-semibold); - } - .tracking-\[0\.64px\] { - --tw-tracking: 0.64px; - letter-spacing: 0.64px; - } - .tracking-tight { - --tw-tracking: var(--tracking-tight); - letter-spacing: var(--tracking-tight); - } - .tracking-widest { - --tw-tracking: var(--tracking-widest); - letter-spacing: var(--tracking-widest); - } - .whitespace-nowrap { - white-space: nowrap; - } - .text-\[\#000\] { - color: #000; - } - .text-\[\#2E2E2E\] { - color: #2E2E2E; - } - .text-\[\#6c7081\] { - color: #6c7081; - } - .text-\[\#444\] { - color: #444; - } - .text-\[\#5146E5\] { - color: #5146E5; - } - .text-\[\#9034EA\] { - color: #9034EA; - } - .text-\[\#51459e\] { - color: #51459e; - } - .text-\[\#101828\] { - color: #101828; - } - .text-\[\#667085\] { - color: #667085; - } - .text-black { - color: var(--color-black); - } - .text-blue-500 { - color: var(--color-blue-500); - } - .text-blue-600 { - color: var(--color-blue-600); - } - .text-blue-700 { - color: var(--color-blue-700); - } - .text-blue-800 { - color: var(--color-blue-800); - } - .text-blue-900 { - color: var(--color-blue-900); - } - .text-emerald-600 { - color: var(--color-emerald-600); - } - .text-gray-100 { - color: var(--color-gray-100); - } - .text-gray-400 { - color: var(--color-gray-400); - } - .text-gray-500 { - color: var(--color-gray-500); - } - .text-gray-600 { - color: var(--color-gray-600); - } - .text-gray-700 { - color: var(--color-gray-700); - } - .text-gray-800 { - color: var(--color-gray-800); - } - .text-gray-900 { - color: var(--color-gray-900); - } - .text-green-700 { - color: var(--color-green-700); - } - .text-purple-400 { - color: var(--color-purple-400); - } - .text-purple-600 { - color: var(--color-purple-600); - } - .text-red-500 { - color: var(--color-red-500); - } - .text-red-700 { - color: var(--color-red-700); - } - .text-white { - color: var(--color-white); - } - .text-white\/80 { - color: color-mix(in srgb, #fff 80%, transparent); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-white) 80%, transparent); - } - } - .capitalize { - text-transform: capitalize; - } - .italic { - font-style: italic; - } - .underline { - text-decoration-line: underline; - } - .underline-offset-4 { - text-underline-offset: 4px; - } - .antialiased { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - .opacity-0 { - opacity: 0%; - } - .opacity-20 { - opacity: 20%; - } - .opacity-50 { - opacity: 50%; - } - .opacity-60 { - opacity: 60%; - } - .opacity-70 { - opacity: 70%; - } - .opacity-75 { - opacity: 75%; - } - .opacity-90 { - opacity: 90%; - } - .opacity-100 { - opacity: 100%; - } - .shadow { - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-2xl { - --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-lg { - --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-md { - --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-sm { - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-xl { - --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .ring { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .ring-0 { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .ring-2 { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .ring-\[\#5141e5\] { - --tw-ring-color: #5141e5; - } - .ring-\[\#5146E5\] { - --tw-ring-color: #5146E5; - } - .outline { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - .outline-2 { - outline-style: var(--tw-outline-style); - outline-width: 2px; - } - .outline-blue-500 { - outline-color: var(--color-blue-500); - } - .blur-xl { - --tw-blur: blur(var(--blur-xl)); - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .brightness-0 { - --tw-brightness: brightness(0%); - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .invert { - --tw-invert: invert(100%); - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .filter { - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .backdrop-blur-sm { - --tw-backdrop-blur: blur(var(--blur-sm)); - -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); - backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); - } - .backdrop-filter { - -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); - backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); - } - .transition { - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .transition-all { - transition-property: all; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .transition-colors { - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .transition-opacity { - transition-property: opacity; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .transition-transform { - transition-property: transform, translate, scale, rotate; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } - .duration-200 { - --tw-duration: 200ms; - transition-duration: 200ms; - } - .duration-300 { - --tw-duration: 300ms; - transition-duration: 300ms; - } - .duration-500 { - --tw-duration: 500ms; - transition-duration: 500ms; - } - .ease-in-out { - --tw-ease: var(--ease-in-out); - transition-timing-function: var(--ease-in-out); - } - .ease-out { - --tw-ease: var(--ease-out); - transition-timing-function: var(--ease-out); - } - .outline-none { - --tw-outline-style: none; - outline-style: none; - } - .select-none { - -webkit-user-select: none; - user-select: none; - } - .group-hover\:scale-105 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - --tw-scale-x: 105%; - --tw-scale-y: 105%; - --tw-scale-z: 105%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - } - } - .group-hover\:border-blue-500 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - border-color: var(--color-blue-500); - } - } - } - .group-hover\:bg-black\/10 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - background-color: color-mix(in srgb, #000 10%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 10%, transparent); - } - } - } - } - .group-hover\:bg-black\/20 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - background-color: color-mix(in srgb, #000 20%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 20%, transparent); - } - } - } - } - .group-hover\:bg-purple-100 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - background-color: var(--color-purple-100); - } - } - } - .group-hover\:stroke-black { - &:is(:where(.group):hover *) { - @media (hover: hover) { - stroke: var(--color-black); - } - } - } - .group-hover\:text-blue-500 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - color: var(--color-blue-500); - } - } - } - .group-hover\:text-gray-600 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - color: var(--color-gray-600); - } - } - } - .group-hover\:text-gray-900 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - color: var(--color-gray-900); - } - } - } - .group-hover\:opacity-100 { - &:is(:where(.group):hover *) { - @media (hover: hover) { - opacity: 100%; - } - } - } - .group-\[\.destructive\]\:text-red-300 { - &:is(:where(.group):is(.destructive) *) { - color: var(--color-red-300); - } - } - .peer-disabled\:cursor-not-allowed { - &:is(:where(.peer):disabled ~ *) { - cursor: not-allowed; - } - } - .peer-disabled\:opacity-70 { - &:is(:where(.peer):disabled ~ *) { - opacity: 70%; - } - } - .file\:border-0 { - &::file-selector-button { - border-style: var(--tw-border-style); - border-width: 0px; - } - } - .file\:bg-transparent { - &::file-selector-button { - background-color: transparent; - } - } - .file\:text-sm { - &::file-selector-button { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - } - .file\:font-medium { - &::file-selector-button { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - } - .last\:border-b-0 { - &:last-child { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 0px; - } - } - .hover\:scale-105 { - &:hover { - @media (hover: hover) { - --tw-scale-x: 105%; - --tw-scale-y: 105%; - --tw-scale-z: 105%; - scale: var(--tw-scale-x) var(--tw-scale-y); - } - } - } - .hover\:border { - &:hover { - @media (hover: hover) { - border-style: var(--tw-border-style); - border-width: 1px; - } - } - } - .hover\:border-\[\#5141e5\] { - &:hover { - @media (hover: hover) { - border-color: #5141e5; - } - } - } - .hover\:border-\[\#5146E5\] { - &:hover { - @media (hover: hover) { - border-color: #5146E5; - } - } - } - .hover\:border-blue-200 { - &:hover { - @media (hover: hover) { - border-color: var(--color-blue-200); - } - } - } - .hover\:border-purple-200 { - &:hover { - @media (hover: hover) { - border-color: var(--color-purple-200); - } - } - } - .hover\:bg-\[\#4338ca\] { - &:hover { - @media (hover: hover) { - background-color: #4338ca; - } - } - } - .hover\:bg-\[\#4638c7\] { - &:hover { - @media (hover: hover) { - background-color: #4638c7; - } - } - } - .hover\:bg-\[\#5141e5\]\/80 { - &:hover { - @media (hover: hover) { - background-color: color-mix(in oklab, #5141e5 80%, transparent); - } - } - } - .hover\:bg-\[\#5146E5\] { - &:hover { - @media (hover: hover) { - background-color: #5146E5; - } - } - } - .hover\:bg-\[\#5146E5\]\/80 { - &:hover { - @media (hover: hover) { - background-color: color-mix(in oklab, #5146E5 80%, transparent); - } - } - } - .hover\:bg-\[\#5146E5\]\/90 { - &:hover { - @media (hover: hover) { - background-color: color-mix(in oklab, #5146E5 90%, transparent); - } - } - } - .hover\:bg-\[\#E9E8F8\] { - &:hover { - @media (hover: hover) { - background-color: #E9E8F8; - } - } - } - .hover\:bg-\[\#f1f3f4\] { - &:hover { - @media (hover: hover) { - background-color: #f1f3f4; - } - } - } - .hover\:bg-\[\#f8f9fa\] { - &:hover { - @media (hover: hover) { - background-color: #f8f9fa; - } - } - } - .hover\:bg-blue-100 { - &:hover { - @media (hover: hover) { - background-color: var(--color-blue-100); - } - } - } - .hover\:bg-blue-600 { - &:hover { - @media (hover: hover) { - background-color: var(--color-blue-600); - } - } - } - .hover\:bg-blue-700 { - &:hover { - @media (hover: hover) { - background-color: var(--color-blue-700); - } - } - } - .hover\:bg-emerald-700 { - &:hover { - @media (hover: hover) { - background-color: var(--color-emerald-700); - } - } - } - .hover\:bg-gray-50 { - &:hover { - @media (hover: hover) { - background-color: var(--color-gray-50); - } - } - } - .hover\:bg-gray-100 { - &:hover { - @media (hover: hover) { - background-color: var(--color-gray-100); - } - } - } - .hover\:bg-gray-200 { - &:hover { - @media (hover: hover) { - background-color: var(--color-gray-200); - } - } - } - .hover\:bg-gray-700 { - &:hover { - @media (hover: hover) { - background-color: var(--color-gray-700); - } - } - } - .hover\:bg-indigo-700 { - &:hover { - @media (hover: hover) { - background-color: var(--color-indigo-700); - } - } - } - .hover\:bg-purple-700 { - &:hover { - @media (hover: hover) { - background-color: var(--color-purple-700); - } - } - } - .hover\:bg-red-50 { - &:hover { - @media (hover: hover) { - background-color: var(--color-red-50); - } - } - } - .hover\:bg-red-600 { - &:hover { - @media (hover: hover) { - background-color: var(--color-red-600); - } - } - } - .hover\:bg-white { - &:hover { - @media (hover: hover) { - background-color: var(--color-white); - } - } - } - .hover\:bg-white\/20 { - &:hover { - @media (hover: hover) { - background-color: color-mix(in srgb, #fff 20%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 20%, transparent); - } - } - } - } - .hover\:bg-white\/80 { - &:hover { - @media (hover: hover) { - background-color: color-mix(in srgb, #fff 80%, transparent); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-white) 80%, transparent); - } - } - } - } - .hover\:from-blue-700 { - &:hover { - @media (hover: hover) { - --tw-gradient-from: var(--color-blue-700); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - } - } - .hover\:to-indigo-700 { - &:hover { - @media (hover: hover) { - --tw-gradient-to: var(--color-indigo-700); - --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); - } - } - } - .hover\:text-blue-700 { - &:hover { - @media (hover: hover) { - color: var(--color-blue-700); - } - } - } - .hover\:text-gray-600 { - &:hover { - @media (hover: hover) { - color: var(--color-gray-600); - } - } - } - .hover\:text-gray-700 { - &:hover { - @media (hover: hover) { - color: var(--color-gray-700); - } - } - } - .hover\:text-red-500 { - &:hover { - @media (hover: hover) { - color: var(--color-red-500); - } - } - } - .hover\:text-red-600 { - &:hover { - @media (hover: hover) { - color: var(--color-red-600); - } - } - } - .hover\:text-white { - &:hover { - @media (hover: hover) { - color: var(--color-white); - } - } - } - .hover\:no-underline { - &:hover { - @media (hover: hover) { - text-decoration-line: none; - } - } - } - .hover\:underline { - &:hover { - @media (hover: hover) { - text-decoration-line: underline; - } - } - } - .hover\:opacity-90 { - &:hover { - @media (hover: hover) { - opacity: 90%; - } - } - } - .hover\:opacity-100 { - &:hover { - @media (hover: hover) { - opacity: 100%; - } - } - } - .hover\:shadow-md { - &:hover { - @media (hover: hover) { - --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - } - .hover\:shadow-xl { - &:hover { - @media (hover: hover) { - --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - } - .hover\:ring-2 { - &:hover { - @media (hover: hover) { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - } - .hover\:ring-gray-200 { - &:hover { - @media (hover: hover) { - --tw-ring-color: var(--color-gray-200); - } - } - } - .hover\:outline { - &:hover { - @media (hover: hover) { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - } - } - .hover\:outline-gray-400 { - &:hover { - @media (hover: hover) { - outline-color: var(--color-gray-400); - } - } - } - .group-\[\.destructive\]\:hover\:text-red-50 { - &:is(:where(.group):is(.destructive) *) { - &:hover { - @media (hover: hover) { - color: var(--color-red-50); - } - } - } - } - .focus\:border-\[\#5146E5\] { - &:focus { - border-color: #5146E5; - } - } - .focus\:border-blue-500 { - &:focus { - border-color: var(--color-blue-500); - } - } - .focus\:border-transparent { - &:focus { - border-color: transparent; - } - } - .focus\:bg-gray-50 { - &:focus { - background-color: var(--color-gray-50); - } - } - .focus\:opacity-100 { - &:focus { - opacity: 100%; - } - } - .focus\:ring-0 { - &:focus { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus\:ring-1 { - &:focus { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus\:ring-2 { - &:focus { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus\:ring-4 { - &:focus { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus\:ring-blue-200 { - &:focus { - --tw-ring-color: var(--color-blue-200); - } - } - .focus\:ring-blue-500\/20 { - &:focus { - --tw-ring-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent); - @supports (color: color-mix(in lab, red, red)) { - --tw-ring-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent); - } - } - } - .focus\:ring-emerald-500 { - &:focus { - --tw-ring-color: var(--color-emerald-500); - } - } - .focus\:ring-red-300 { - &:focus { - --tw-ring-color: var(--color-red-300); - } - } - .focus\:ring-offset-2 { - &:focus { - --tw-ring-offset-width: 2px; - --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - } - } - .focus\:outline-none { - &:focus { - --tw-outline-style: none; - outline-style: none; - } - } - .group-\[\.destructive\]\:focus\:ring-red-400 { - &:is(:where(.group):is(.destructive) *) { - &:focus { - --tw-ring-color: var(--color-red-400); - } - } - } - .group-\[\.destructive\]\:focus\:ring-offset-red-600 { - &:is(:where(.group):is(.destructive) *) { - &:focus { - --tw-ring-offset-color: var(--color-red-600); - } - } - } - .focus-visible\:ring-0 { - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus-visible\:ring-1 { - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus-visible\:ring-2 { - &:focus-visible { - --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .focus-visible\:ring-\[\#5146E5\] { - &:focus-visible { - --tw-ring-color: #5146E5; - } - } - .focus-visible\:ring-blue-300 { - &:focus-visible { - --tw-ring-color: var(--color-blue-300); - } - } - .focus-visible\:ring-offset-0 { - &:focus-visible { - --tw-ring-offset-width: 0px; - --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - } - } - .focus-visible\:ring-offset-2 { - &:focus-visible { - --tw-ring-offset-width: 2px; - --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - } - } - .focus-visible\:outline-none { - &:focus-visible { - --tw-outline-style: none; - outline-style: none; - } - } - .disabled\:pointer-events-none { - &:disabled { - pointer-events: none; - } - } - .disabled\:cursor-not-allowed { - &:disabled { - cursor: not-allowed; - } - } - .disabled\:opacity-50 { - &:disabled { - opacity: 50%; - } - } - .data-\[disabled\]\:pointer-events-none { - &[data-disabled] { - pointer-events: none; - } - } - .data-\[disabled\]\:opacity-50 { - &[data-disabled] { - opacity: 50%; - } - } - .data-\[disabled\=true\]\:pointer-events-none { - &[data-disabled="true"] { - pointer-events: none; - } - } - .data-\[disabled\=true\]\:opacity-50 { - &[data-disabled="true"] { - opacity: 50%; - } - } - .data-\[side\=bottom\]\:translate-y-1 { - &[data-side="bottom"] { - --tw-translate-y: calc(var(--spacing) * 1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[side\=left\]\:-translate-x-1 { - &[data-side="left"] { - --tw-translate-x: calc(var(--spacing) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[side\=right\]\:translate-x-1 { - &[data-side="right"] { - --tw-translate-x: calc(var(--spacing) * 1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[side\=top\]\:-translate-y-1 { - &[data-side="top"] { - --tw-translate-y: calc(var(--spacing) * -1); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[state\=active\]\:shadow { - &[data-state="active"] { - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - } - .data-\[state\=checked\]\:translate-x-4 { - &[data-state="checked"] { - --tw-translate-x: calc(var(--spacing) * 4); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[state\=closed\]\:duration-300 { - &[data-state="closed"] { - --tw-duration: 300ms; - transition-duration: 300ms; - } - } - .data-\[state\=open\]\:duration-500 { - &[data-state="open"] { - --tw-duration: 500ms; - transition-duration: 500ms; - } - } - .data-\[state\=unchecked\]\:translate-x-0 { - &[data-state="unchecked"] { - --tw-translate-x: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[swipe\=cancel\]\:translate-x-0 { - &[data-swipe="cancel"] { - --tw-translate-x: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\] { - &[data-swipe="end"] { - --tw-translate-x: var(--radix-toast-swipe-end-x); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\] { - &[data-swipe="move"] { - --tw-translate-x: var(--radix-toast-swipe-move-x); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .data-\[swipe\=move\]\:transition-none { - &[data-swipe="move"] { - transition-property: none; - } - } - .max-lg\:h-\[180px\] { - @media (width < 64rem) { - height: 180px; - } - } - .max-lg\:h-\[300px\] { - @media (width < 64rem) { - height: 300px; - } - } - .max-md\:pointer-events-none { - @media (width < 48rem) { - pointer-events: none; - } - } - .max-md\:mt-4 { - @media (width < 48rem) { - margin-top: calc(var(--spacing) * 4); - } - } - .max-md\:mb-4 { - @media (width < 48rem) { - margin-bottom: calc(var(--spacing) * 4); - } - } - .max-md\:block { - @media (width < 48rem) { - display: block; - } - } - .max-md\:h-\[140px\] { - @media (width < 48rem) { - height: 140px; - } - } - .max-md\:h-\[200px\] { - @media (width < 48rem) { - height: 200px; - } - } - .sm\:top-4 { - @media (width >= 40rem) { - top: calc(var(--spacing) * 4); - } - } - .sm\:right-4 { - @media (width >= 40rem) { - right: calc(var(--spacing) * 4); - } - } - .sm\:left-4 { - @media (width >= 40rem) { - left: calc(var(--spacing) * 4); - } - } - .sm\:mx-4 { - @media (width >= 40rem) { - margin-inline: calc(var(--spacing) * 4); - } - } - .sm\:mt-8 { - @media (width >= 40rem) { - margin-top: calc(var(--spacing) * 8); - } - } - .sm\:flex { - @media (width >= 40rem) { - display: flex; - } - } - .sm\:h-5 { - @media (width >= 40rem) { - height: calc(var(--spacing) * 5); - } - } - .sm\:h-14 { - @media (width >= 40rem) { - height: calc(var(--spacing) * 14); - } - } - .sm\:w-5 { - @media (width >= 40rem) { - width: calc(var(--spacing) * 5); - } - } - .sm\:w-14 { - @media (width >= 40rem) { - width: calc(var(--spacing) * 14); - } - } - .sm\:w-\[400px\] { - @media (width >= 40rem) { - width: 400px; - } - } - .sm\:max-w-\[500px\] { - @media (width >= 40rem) { - max-width: 500px; - } - } - .sm\:max-w-sm { - @media (width >= 40rem) { - max-width: var(--container-sm); - } - } - .sm\:min-w-10 { - @media (width >= 40rem) { - min-width: calc(var(--spacing) * 10); - } - } - .sm\:min-w-\[330px\] { - @media (width >= 40rem) { - min-width: 330px; - } - } - .sm\:grid-cols-2 { - @media (width >= 40rem) { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } - .sm\:flex-col { - @media (width >= 40rem) { - flex-direction: column; - } - } - .sm\:flex-row { - @media (width >= 40rem) { - flex-direction: row; - } - } - .sm\:justify-end { - @media (width >= 40rem) { - justify-content: flex-end; - } - } - .sm\:gap-2 { - @media (width >= 40rem) { - gap: calc(var(--spacing) * 2); - } - } - .sm\:gap-4 { - @media (width >= 40rem) { - gap: calc(var(--spacing) * 4); - } - } - .sm\:gap-5 { - @media (width >= 40rem) { - gap: calc(var(--spacing) * 5); - } - } - .sm\:gap-6 { - @media (width >= 40rem) { - gap: calc(var(--spacing) * 6); - } - } - .sm\:gap-8 { - @media (width >= 40rem) { - gap: calc(var(--spacing) * 8); - } - } - .sm\:gap-18 { - @media (width >= 40rem) { - gap: calc(var(--spacing) * 18); - } - } - .sm\:space-x-2 { - @media (width >= 40rem) { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); - } - } - } - .sm\:rounded-lg { - @media (width >= 40rem) { - border-radius: var(--radius-lg); - } - } - .sm\:p-2 { - @media (width >= 40rem) { - padding: calc(var(--spacing) * 2); - } - } - .sm\:p-4 { - @media (width >= 40rem) { - padding: calc(var(--spacing) * 4); - } - } - .sm\:p-6 { - @media (width >= 40rem) { - padding: calc(var(--spacing) * 6); - } - } - .sm\:px-6 { - @media (width >= 40rem) { - padding-inline: calc(var(--spacing) * 6); - } - } - .sm\:px-12 { - @media (width >= 40rem) { - padding-inline: calc(var(--spacing) * 12); - } - } - .sm\:py-6 { - @media (width >= 40rem) { - padding-block: calc(var(--spacing) * 6); - } - } - .sm\:py-\[40px\] { - @media (width >= 40rem) { - padding-block: 40px; - } - } - .sm\:pr-4 { - @media (width >= 40rem) { - padding-right: calc(var(--spacing) * 4); - } - } - .sm\:pb-2 { - @media (width >= 40rem) { - padding-bottom: calc(var(--spacing) * 2); - } - } - .sm\:text-left { - @media (width >= 40rem) { - text-align: left; - } - } - .sm\:text-2xl { - @media (width >= 40rem) { - font-size: var(--text-2xl); - line-height: var(--tw-leading, var(--text-2xl--line-height)); - } - } - .sm\:text-base { - @media (width >= 40rem) { - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - } - } - .sm\:text-lg { - @media (width >= 40rem) { - font-size: var(--text-lg); - line-height: var(--tw-leading, var(--text-lg--line-height)); - } - } - .sm\:text-xl { - @media (width >= 40rem) { - font-size: var(--text-xl); - line-height: var(--tw-leading, var(--text-xl--line-height)); - } - } - .md\:block { - @media (width >= 48rem) { - display: block; - } - } - .md\:flex { - @media (width >= 48rem) { - display: flex; - } - } - .md\:h-\[32px\] { - @media (width >= 48rem) { - height: 32px; - } - } - .md\:h-\[64px\] { - @media (width >= 48rem) { - height: 64px; - } - } - .md\:h-\[210px\] { - @media (width >= 48rem) { - height: 210px; - } - } - .md\:w-\[32px\] { - @media (width >= 48rem) { - width: 32px; - } - } - .md\:w-\[64px\] { - @media (width >= 48rem) { - width: 64px; - } - } - .md\:w-\[90\%\] { - @media (width >= 48rem) { - width: 90%; - } - } - .md\:w-\[162px\] { - @media (width >= 48rem) { - width: 162px; - } - } - .md\:max-w-\[300px\] { - @media (width >= 48rem) { - max-width: 300px; - } - } - .md\:max-w-\[420px\] { - @media (width >= 48rem) { - max-width: 420px; - } - } - .md\:grid-cols-2 { - @media (width >= 48rem) { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } - .md\:grid-cols-3 { - @media (width >= 48rem) { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - } - .md\:flex-row { - @media (width >= 48rem) { - flex-direction: row; - } - } - .md\:items-center { - @media (width >= 48rem) { - align-items: center; - } - } - .md\:gap-4 { - @media (width >= 48rem) { - gap: calc(var(--spacing) * 4); - } - } - .md\:gap-6 { - @media (width >= 48rem) { - gap: calc(var(--spacing) * 6); - } - } - .md\:gap-8 { - @media (width >= 48rem) { - gap: calc(var(--spacing) * 8); - } - } - .md\:gap-10 { - @media (width >= 48rem) { - gap: calc(var(--spacing) * 10); - } - } - .md\:gap-12 { - @media (width >= 48rem) { - gap: calc(var(--spacing) * 12); - } - } - .md\:space-y-2 { - @media (width >= 48rem) { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); - } - } - } - .md\:p-6 { - @media (width >= 48rem) { - padding: calc(var(--spacing) * 6); - } - } - .md\:px-8 { - @media (width >= 48rem) { - padding-inline: calc(var(--spacing) * 8); - } - } - .md\:py-3 { - @media (width >= 48rem) { - padding-block: calc(var(--spacing) * 3); - } - } - .md\:text-base { - @media (width >= 48rem) { - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--line-height)); - } - } - .lg\:mt-3 { - @media (width >= 64rem) { - margin-top: calc(var(--spacing) * 3); - } - } - .lg\:mt-4 { - @media (width >= 64rem) { - margin-top: calc(var(--spacing) * 4); - } - } - .lg\:mt-10 { - @media (width >= 64rem) { - margin-top: calc(var(--spacing) * 10); - } - } - .lg\:mt-12 { - @media (width >= 64rem) { - margin-top: calc(var(--spacing) * 12); - } - } - .lg\:mt-16 { - @media (width >= 64rem) { - margin-top: calc(var(--spacing) * 16); - } - } - .lg\:mb-4 { - @media (width >= 64rem) { - margin-bottom: calc(var(--spacing) * 4); - } - } - .lg\:mb-16 { - @media (width >= 64rem) { - margin-bottom: calc(var(--spacing) * 16); - } - } - .lg\:block { - @media (width >= 64rem) { - display: block; - } - } - .lg\:flex { - @media (width >= 64rem) { - display: flex; - } - } - .lg\:grid { - @media (width >= 64rem) { - display: grid; - } - } - .lg\:hidden { - @media (width >= 64rem) { - display: none; - } - } - .lg\:aspect-\[4\/4\] { - @media (width >= 64rem) { - aspect-ratio: 4/4; - } - } - .lg\:min-h-\[300px\] { - @media (width >= 64rem) { - min-height: 300px; - } - } - .lg\:w-1\/2 { - @media (width >= 64rem) { - width: calc(1/2 * 100%); - } - } - .lg\:w-16 { - @media (width >= 64rem) { - width: calc(var(--spacing) * 16); - } - } - .lg\:w-\[30\%\] { - @media (width >= 64rem) { - width: 30%; - } - } - .lg\:w-\[60\%\] { - @media (width >= 64rem) { - width: 60%; - } - } - .lg\:max-w-\[70\%\] { - @media (width >= 64rem) { - max-width: 70%; - } - } - .lg\:grid-cols-1 { - @media (width >= 64rem) { - grid-template-columns: repeat(1, minmax(0, 1fr)); - } - } - .lg\:grid-cols-2 { - @media (width >= 64rem) { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } - .lg\:grid-cols-3 { - @media (width >= 64rem) { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - } - .lg\:grid-cols-4 { - @media (width >= 64rem) { - grid-template-columns: repeat(4, minmax(0, 1fr)); - } - } - .lg\:grid-cols-5 { - @media (width >= 64rem) { - grid-template-columns: repeat(5, minmax(0, 1fr)); - } - } - .lg\:flex-row { - @media (width >= 64rem) { - flex-direction: row; - } - } - .lg\:gap-6 { - @media (width >= 64rem) { - gap: calc(var(--spacing) * 6); - } - } - .lg\:gap-8 { - @media (width >= 64rem) { - gap: calc(var(--spacing) * 8); - } - } - .lg\:gap-10 { - @media (width >= 64rem) { - gap: calc(var(--spacing) * 10); - } - } - .lg\:gap-16 { - @media (width >= 64rem) { - gap: calc(var(--spacing) * 16); - } - } - .lg\:space-y-2 { - @media (width >= 64rem) { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); - } - } - } - .lg\:space-y-3 { - @media (width >= 64rem) { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))); - } - } - } - .lg\:space-y-4 { - @media (width >= 64rem) { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); - } - } - } - .lg\:space-y-6 { - @media (width >= 64rem) { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); - } - } - } - .lg\:space-y-8 { - @media (width >= 64rem) { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse))); - } - } - } - .lg\:space-y-14 { - @media (width >= 64rem) { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 14) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 14) * calc(1 - var(--tw-space-y-reverse))); - } - } - } - .lg\:p-6 { - @media (width >= 64rem) { - padding: calc(var(--spacing) * 6); - } - } - .lg\:px-20 { - @media (width >= 64rem) { - padding-inline: calc(var(--spacing) * 20); - } - } - .lg\:py-\[86px\] { - @media (width >= 64rem) { - padding-block: 86px; - } - } - .lg\:pb-8 { - @media (width >= 64rem) { - padding-bottom: calc(var(--spacing) * 8); - } - } - .lg\:text-\[20px\] { - @media (width >= 64rem) { - font-size: 20px; - } - } - .lg\:text-\[24px\] { - @media (width >= 64rem) { - font-size: 24px; - } - } - .lg\:text-\[32px\] { - @media (width >= 64rem) { - font-size: 32px; - } - } - .lg\:text-\[40px\] { - @media (width >= 64rem) { - font-size: 40px; - } - } - .lg\:leading-\[30px\] { - @media (width >= 64rem) { - --tw-leading: 30px; - line-height: 30px; - } - } - .lg\:leading-\[32px\] { - @media (width >= 64rem) { - --tw-leading: 32px; - line-height: 32px; - } - } - .lg\:leading-\[48px\] { - @media (width >= 64rem) { - --tw-leading: 48px; - line-height: 48px; - } - } - .xl\:relative { - @media (width >= 80rem) { - position: relative; - } - } - .xl\:z-auto { - @media (width >= 80rem) { - z-index: auto; - } - } - .xl\:block { - @media (width >= 80rem) { - display: block; - } - } - .xl\:hidden { - @media (width >= 80rem) { - display: none; - } - } - .xl\:w-\[70\%\] { - @media (width >= 80rem) { - width: 70%; - } - } - .xl\:max-w-\[65\%\] { - @media (width >= 80rem) { - max-width: 65%; - } - } - .xl\:translate-x-0 { - @media (width >= 80rem) { - --tw-translate-x: calc(var(--spacing) * 0); - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .\32 xl\:gap-6 { - @media (width >= 96rem) { - gap: calc(var(--spacing) * 6); - } - } - .\[\&_\[cmdk-group-heading\]\]\:px-2 { - & [cmdk-group-heading] { - padding-inline: calc(var(--spacing) * 2); - } - } - .\[\&_\[cmdk-group-heading\]\]\:py-1\.5 { - & [cmdk-group-heading] { - padding-block: calc(var(--spacing) * 1.5); - } - } - .\[\&_\[cmdk-group-heading\]\]\:text-xs { - & [cmdk-group-heading] { - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - } - } - .\[\&_\[cmdk-group-heading\]\]\:font-medium { - & [cmdk-group-heading] { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - } - .\[\&_\[cmdk-group\]\]\:px-2 { - & [cmdk-group] { - padding-inline: calc(var(--spacing) * 2); - } - } - .\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 { - & [cmdk-group]:not([hidden]) ~[cmdk-group] { - padding-top: calc(var(--spacing) * 0); - } - } - .\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 { - & [cmdk-input-wrapper] svg { - height: calc(var(--spacing) * 5); - } - } - .\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 { - & [cmdk-input-wrapper] svg { - width: calc(var(--spacing) * 5); - } - } - .\[\&_\[cmdk-input\]\]\:h-12 { - & [cmdk-input] { - height: calc(var(--spacing) * 12); - } - } - .\[\&_\[cmdk-item\]\]\:px-2 { - & [cmdk-item] { - padding-inline: calc(var(--spacing) * 2); - } - } - .\[\&_\[cmdk-item\]\]\:py-3 { - & [cmdk-item] { - padding-block: calc(var(--spacing) * 3); - } - } - .\[\&_\[cmdk-item\]_svg\]\:h-5 { - & [cmdk-item] svg { - height: calc(var(--spacing) * 5); - } - } - .\[\&_\[cmdk-item\]_svg\]\:w-5 { - & [cmdk-item] svg { - width: calc(var(--spacing) * 5); - } - } - .\[\&_svg\]\:pointer-events-none { - & svg { - pointer-events: none; - } - } - .\[\&_svg\]\:size-4 { - & svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - } - .\[\&_svg\]\:shrink-0 { - & svg { - flex-shrink: 0; - } - } - .\[\&_tr\]\:border-b { - & tr { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - } - } - .\[\&_tr\:last-child\]\:border-0 { - & tr:last-child { - border-style: var(--tw-border-style); - border-width: 0px; - } - } - .\[\&\+div\]\:text-xs { - &+div { - font-size: var(--text-xs); - line-height: var(--tw-leading, var(--text-xs--line-height)); - } - } - .\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0 { - &:has([role=checkbox]) { - padding-right: calc(var(--spacing) * 0); - } - } - .\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\] { - &>[role=checkbox] { - --tw-translate-y: 2px; - translate: var(--tw-translate-x) var(--tw-translate-y); - } - } - .\[\&\>span\]\:line-clamp-1 { - &>span { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 1; - } - } - .\[\&\>svg\]\:size-4 { - &>svg { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - } - .\[\&\>svg\]\:shrink-0 { - &>svg { - flex-shrink: 0; - } - } - .\[\&\>tr\]\:last\:border-b-0 { - &>tr { - &:last-child { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 0px; - } - } - } - .\[\&\[data-state\=open\]\>svg\]\:rotate-180 { - &[data-state=open]>svg { - rotate: 180deg; - } - } -} -@property --tw-translate-x { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-translate-y { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-translate-z { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-scale-x { - syntax: "*"; - inherits: false; - initial-value: 1; -} -@property --tw-scale-y { - syntax: "*"; - inherits: false; - initial-value: 1; -} -@property --tw-scale-z { - syntax: "*"; - inherits: false; - initial-value: 1; -} -@property --tw-rotate-x { - syntax: "*"; - inherits: false; -} -@property --tw-rotate-y { - syntax: "*"; - inherits: false; -} -@property --tw-rotate-z { - syntax: "*"; - inherits: false; -} -@property --tw-skew-x { - syntax: "*"; - inherits: false; -} -@property --tw-skew-y { - syntax: "*"; - inherits: false; -} -@property --tw-space-y-reverse { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-space-x-reverse { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-border-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@property --tw-gradient-position { - syntax: "*"; - inherits: false; -} -@property --tw-gradient-from { - syntax: ""; - inherits: false; - initial-value: #0000; -} -@property --tw-gradient-via { - syntax: ""; - inherits: false; - initial-value: #0000; -} -@property --tw-gradient-to { - syntax: ""; - inherits: false; - initial-value: #0000; -} -@property --tw-gradient-stops { - syntax: "*"; - inherits: false; -} -@property --tw-gradient-via-stops { - syntax: "*"; - inherits: false; -} -@property --tw-gradient-from-position { - syntax: ""; - inherits: false; - initial-value: 0%; -} -@property --tw-gradient-via-position { - syntax: ""; - inherits: false; - initial-value: 50%; -} -@property --tw-gradient-to-position { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-leading { - syntax: "*"; - inherits: false; -} -@property --tw-font-weight { - syntax: "*"; - inherits: false; -} -@property --tw-tracking { - syntax: "*"; - inherits: false; -} -@property --tw-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-inset-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-inset-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-inset-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-ring-color { - syntax: "*"; - inherits: false; -} -@property --tw-ring-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-inset-ring-color { - syntax: "*"; - inherits: false; -} -@property --tw-inset-ring-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-ring-inset { - syntax: "*"; - inherits: false; -} -@property --tw-ring-offset-width { - syntax: ""; - inherits: false; - initial-value: 0px; -} -@property --tw-ring-offset-color { - syntax: "*"; - inherits: false; - initial-value: #fff; -} -@property --tw-ring-offset-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-outline-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@property --tw-blur { - syntax: "*"; - inherits: false; -} -@property --tw-brightness { - syntax: "*"; - inherits: false; -} -@property --tw-contrast { - syntax: "*"; - inherits: false; -} -@property --tw-grayscale { - syntax: "*"; - inherits: false; -} -@property --tw-hue-rotate { - syntax: "*"; - inherits: false; -} -@property --tw-invert { - syntax: "*"; - inherits: false; -} -@property --tw-opacity { - syntax: "*"; - inherits: false; -} -@property --tw-saturate { - syntax: "*"; - inherits: false; -} -@property --tw-sepia { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-drop-shadow-size { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-blur { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-brightness { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-contrast { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-grayscale { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-hue-rotate { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-invert { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-opacity { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-saturate { - syntax: "*"; - inherits: false; -} -@property --tw-backdrop-sepia { - syntax: "*"; - inherits: false; -} -@property --tw-duration { - syntax: "*"; - inherits: false; -} -@property --tw-ease { - syntax: "*"; - inherits: false; -} -@keyframes spin { - to { - transform: rotate(360deg); - } -} -@keyframes pulse { - 50% { - opacity: 0.5; - } -} -@layer properties { - @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { - *, ::before, ::after, ::backdrop { - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-translate-z: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-scale-z: 1; - --tw-rotate-x: initial; - --tw-rotate-y: initial; - --tw-rotate-z: initial; - --tw-skew-x: initial; - --tw-skew-y: initial; - --tw-space-y-reverse: 0; - --tw-space-x-reverse: 0; - --tw-border-style: solid; - --tw-gradient-position: initial; - --tw-gradient-from: #0000; - --tw-gradient-via: #0000; - --tw-gradient-to: #0000; - --tw-gradient-stops: initial; - --tw-gradient-via-stops: initial; - --tw-gradient-from-position: 0%; - --tw-gradient-via-position: 50%; - --tw-gradient-to-position: 100%; - --tw-leading: initial; - --tw-font-weight: initial; - --tw-tracking: initial; - --tw-shadow: 0 0 #0000; - --tw-shadow-color: initial; - --tw-shadow-alpha: 100%; - --tw-inset-shadow: 0 0 #0000; - --tw-inset-shadow-color: initial; - --tw-inset-shadow-alpha: 100%; - --tw-ring-color: initial; - --tw-ring-shadow: 0 0 #0000; - --tw-inset-ring-color: initial; - --tw-inset-ring-shadow: 0 0 #0000; - --tw-ring-inset: initial; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-offset-shadow: 0 0 #0000; - --tw-outline-style: solid; - --tw-blur: initial; - --tw-brightness: initial; - --tw-contrast: initial; - --tw-grayscale: initial; - --tw-hue-rotate: initial; - --tw-invert: initial; - --tw-opacity: initial; - --tw-saturate: initial; - --tw-sepia: initial; - --tw-drop-shadow: initial; - --tw-drop-shadow-color: initial; - --tw-drop-shadow-alpha: 100%; - --tw-drop-shadow-size: initial; - --tw-backdrop-blur: initial; - --tw-backdrop-brightness: initial; - --tw-backdrop-contrast: initial; - --tw-backdrop-grayscale: initial; - --tw-backdrop-hue-rotate: initial; - --tw-backdrop-invert: initial; - --tw-backdrop-opacity: initial; - --tw-backdrop-saturate: initial; - --tw-backdrop-sepia: initial; - --tw-duration: initial; - --tw-ease: initial; - } - } -} diff --git a/resources/ui/assets/css/tailwind.import.css b/resources/ui/assets/css/tailwind.import.css deleted file mode 100644 index f173aa4c..00000000 --- a/resources/ui/assets/css/tailwind.import.css +++ /dev/null @@ -1 +0,0 @@ -@import 'tailwindcss'; \ No newline at end of file diff --git a/resources/ui/assets/images/presenton_logo.png b/resources/ui/assets/images/presenton_logo.png deleted file mode 100644 index 4a3ac3175c1528d4f91624117332eaafbce70061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882000 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

DG3!$WvN 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�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ⅈ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

O;wP$Qt})UP(pWFF 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%0A`}FQ?ulS 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 )%L-Dw6X&&gJ@EhVfD59P(8jp{{C$O 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%0Dwa)$#RpWWi~{;=|H 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 Ts^we-D)v2H{an^LB{Ts5uAcN~ diff --git a/resources/ui/assets/images/presenton_short_filled.png b/resources/ui/assets/images/presenton_short_filled.png deleted file mode 100644 index 1b76bc0bacd0077228aaf533dd9e1d52a538ec80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12167 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 diff --git a/resources/ui/homepage/index.html b/resources/ui/homepage/index.html deleted file mode 100644 index 0c79f133..00000000 --- a/resources/ui/homepage/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - Presenton - - - - - - - Presenton Logo -

Just a moment...

-
- - - \ No newline at end of file diff --git a/resources/ui/homepage/script.js b/resources/ui/homepage/script.js deleted file mode 100644 index e69de29b..00000000 diff --git a/servers/fastapi/.vscode/settings.json b/servers/fastapi/.vscode/settings.json deleted file mode 100644 index 9d0aa91a..00000000 --- a/servers/fastapi/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "python.testing.pytestArgs": [ - "tests" - ], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true, -} \ No newline at end of file diff --git a/servers/fastapi/api/assets/icons_vectorstore.json b/servers/fastapi/api/assets/icons_vectorstore.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/servers/fastapi/api/assets/icons_vectorstore.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/servers/fastapi/api/main.py b/servers/fastapi/api/main.py index ce4f0e9e..56fba941 100644 --- a/servers/fastapi/api/main.py +++ b/servers/fastapi/api/main.py @@ -1,12 +1,33 @@ import os from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware +import ollama from sqlmodel import SQLModel from contextlib import asynccontextmanager from api.routers.presentation.router import presentation_router from api.services.database import sql_engine -from api.utils import update_env_with_user_config +from api.utils.supported_ollama_models import SUPPORTED_OLLAMA_MODELS +from api.utils.utils import is_ollama_selected, update_env_with_user_config + +can_change_keys = os.getenv("CAN_CHANGE_KEYS") != "false" + +# Ollama model download +if not can_change_keys and is_ollama_selected(): + ollama_model = os.getenv("OLLAMA_MODEL") + pexels_api_key = os.getenv("PEXELS_API_KEY") + if not (ollama_model or pexels_api_key): + raise Exception("OLLAMA_MODEL and PEXELS_API_KEY must be provided") + + if ollama_model not in SUPPORTED_OLLAMA_MODELS: + raise Exception(f"Model {ollama_model} is not supported") + + print("-" * 50) + print("Pulling model: ", ollama_model) + for event in ollama.pull(ollama_model, stream=True): + print(event) + print("Pulled model: ", ollama_model) + print("-" * 50) @asynccontextmanager @@ -29,7 +50,8 @@ app.add_middleware( @app.middleware("http") async def update_env_middleware(request: Request, call_next): - update_env_with_user_config() + if can_change_keys: + update_env_with_user_config() return await call_next(request) diff --git a/servers/fastapi/api/models.py b/servers/fastapi/api/models.py index ff63c0bb..15d38ae4 100644 --- a/servers/fastapi/api/models.py +++ b/servers/fastapi/api/models.py @@ -62,3 +62,14 @@ class UserConfig(BaseModel): LLM: Optional[str] = None OPENAI_API_KEY: Optional[str] = None GOOGLE_API_KEY: Optional[str] = None + OLLAMA_MODEL: Optional[str] = None + PEXELS_API_KEY: Optional[str] = None + + +class OllamaModelMetadata(BaseModel): + label: str + value: str + description: str + icon: str + size: str + supports_graph: bool diff --git a/servers/fastapi/api/routers/presentation/handlers/decompose_documents.py b/servers/fastapi/api/routers/presentation/handlers/decompose_documents.py index 90a38cb3..24e5519b 100644 --- a/servers/fastapi/api/routers/presentation/handlers/decompose_documents.py +++ b/servers/fastapi/api/routers/presentation/handlers/decompose_documents.py @@ -6,7 +6,7 @@ from api.routers.presentation.models import ( DecomposeDocumentsRequest, DecomposeDocumentsResponse, ) -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE from api.services.logging import LoggingService from document_processor.loader import DocumentsLoader @@ -20,7 +20,7 @@ class DecomposeDocumentsHandler: ) self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): logging_service.logger.info( @@ -34,7 +34,7 @@ class DecomposeDocumentsHandler: document_paths = [] for parsed_doc in parsed_documents: - file_path = temp_file_service.create_temp_file_path( + file_path = TEMP_FILE_SERVICE.create_temp_file_path( f"{str(uuid.uuid4())}.txt", self.temp_dir ) parsed_doc = parsed_doc.page_content.replace("
", "\n") diff --git a/servers/fastapi/api/routers/presentation/handlers/delete_presentation.py b/servers/fastapi/api/routers/presentation/handlers/delete_presentation.py index 4e48864f..aad383fd 100644 --- a/servers/fastapi/api/routers/presentation/handlers/delete_presentation.py +++ b/servers/fastapi/api/routers/presentation/handlers/delete_presentation.py @@ -4,7 +4,7 @@ from api.models import LogMetadata from api.services.logging import LoggingService from api.sql_models import PresentationSqlModel from api.services.database import get_sql_session -from api.utils import get_presentation_dir +from api.utils.utils import get_presentation_dir class DeletePresentationHandler: diff --git a/servers/fastapi/api/routers/presentation/handlers/edit.py b/servers/fastapi/api/routers/presentation/handlers/edit.py index 13261df1..5e5aa1d5 100644 --- a/servers/fastapi/api/routers/presentation/handlers/edit.py +++ b/servers/fastapi/api/routers/presentation/handlers/edit.py @@ -1,5 +1,5 @@ import asyncio -from typing import Literal +import os import uuid from sqlalchemy import update @@ -8,13 +8,17 @@ from api.models import LogMetadata from api.routers.presentation.models import ( EditPresentationSlideRequest, ) -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE from api.services.logging import LoggingService -from api.utils import get_presentation_dir, get_presentation_images_dir +from api.utils.supported_ollama_models import SUPPORTED_OLLAMA_MODELS +from api.utils.utils import ( + get_presentation_dir, + get_presentation_images_dir, + is_ollama_selected, +) from image_processor.icons_vectorstore_utils import get_icons_vectorstore from image_processor.images_finder import generate_image from image_processor.icons_finder import get_icon -from ppt_generator.models.other_models import SlideType from ppt_generator.models.query_and_prompt_models import ( IconQueryCollectionWithData, ImagePromptWithThemeAndAspectRatio, @@ -38,12 +42,12 @@ class PresentationEditHandler: self.prompt = data.prompt self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) self.presentation_dir = get_presentation_dir(self.presentation_id) def __del__(self): - temp_file_service.cleanup_temp_dir(self.temp_dir) + TEMP_FILE_SERVICE.cleanup_temp_dir(self.temp_dir) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): logging_service.logger.info( @@ -61,9 +65,16 @@ class PresentationEditHandler: ).first() slide_to_edit = SlideModel.from_dict(slide_to_edit_sql.model_dump(mode="json")) - new_slide_type = SlideType( - (await get_slide_type_from_prompt(self.prompt, slide_to_edit)).slide_type - ) + new_slide_type = await get_slide_type_from_prompt(self.prompt, slide_to_edit) + new_slide_type = new_slide_type.slide_type + + if is_ollama_selected(): + model = SUPPORTED_OLLAMA_MODELS[os.getenv("OLLAMA_MODEL")] + if not model.supports_graph: + if new_slide_type == 5: + new_slide_type = 1 + elif new_slide_type == 9: + new_slide_type = 6 edited_content = await get_edited_slide_content_model( self.prompt, @@ -173,7 +184,7 @@ class PresentationEditHandler: update(SlideSqlModel) .where(SlideSqlModel.id == slide_to_edit.id) .values( - type=new_slide_type.value, + type=new_slide_type, images=list(new_slide_images.values()), icons=list(new_slide_icons.values()), content=new_slide_model.content.model_dump(mode="json"), diff --git a/servers/fastapi/api/routers/presentation/handlers/export_as_pptx.py b/servers/fastapi/api/routers/presentation/handlers/export_as_pptx.py index fe9daa9b..ab60a88c 100644 --- a/servers/fastapi/api/routers/presentation/handlers/export_as_pptx.py +++ b/servers/fastapi/api/routers/presentation/handlers/export_as_pptx.py @@ -9,9 +9,9 @@ from api.routers.presentation.models import ( PresentationAndPath, ) from api.services.logging import LoggingService -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE from api.sql_models import PresentationSqlModel -from api.utils import get_presentation_dir, sanitize_filename +from api.utils.utils import get_presentation_dir, sanitize_filename from ppt_generator.pptx_presentation_creator import PptxPresentationCreator from api.services.database import get_sql_session @@ -22,12 +22,12 @@ class ExportAsPptxHandler(FetchPresentationAssetsMixin): self.data = data self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) self.presentation_dir = get_presentation_dir(self.data.presentation_id) def __del__(self): - temp_file_service.cleanup_temp_dir(self.temp_dir) + TEMP_FILE_SERVICE.cleanup_temp_dir(self.temp_dir) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): logging_service.logger.info( diff --git a/servers/fastapi/api/routers/presentation/handlers/generate_data.py b/servers/fastapi/api/routers/presentation/handlers/generate_data.py index 4e11cbf4..a6408592 100644 --- a/servers/fastapi/api/routers/presentation/handlers/generate_data.py +++ b/servers/fastapi/api/routers/presentation/handlers/generate_data.py @@ -1,11 +1,21 @@ +import os +import random import uuid from fastapi import HTTPException from api.models import LogMetadata, SessionModel +from api.routers.presentation.handlers.list_supported_ollama_models import ( + SUPPORTED_OLLAMA_MODELS, +) from api.routers.presentation.models import PresentationGenerateRequest from api.services.logging import LoggingService -from api.sql_models import KeyValueSqlModel +from api.sql_models import KeyValueSqlModel, PresentationSqlModel from api.services.database import get_sql_session +from api.utils.utils import is_ollama_selected +from ppt_config_generator.models import PresentationMarkdownModel, SlideStructureModel +from ppt_config_generator.structure_generator import generate_presentation_structure + +SLIDES_WITHOUT_GRAPH = [2, 4, 6, 7, 8] class PresentationGenerateDataHandler: @@ -20,8 +30,8 @@ class PresentationGenerateDataHandler: extra=log_metadata.model_dump(), ) - if not self.data.titles: - raise HTTPException(400, "Titles can not be empty") + if not self.data.outlines: + raise HTTPException(400, "Outlines can not be empty") key_value_model = KeyValueSqlModel( id=self.session, @@ -29,6 +39,58 @@ class PresentationGenerateDataHandler: value=self.data.model_dump(mode="json"), ) + if is_ollama_selected(): + with get_sql_session() as sql_session: + presentation = sql_session.get( + PresentationSqlModel, self.data.presentation_id + ) + presentation_structure = await generate_presentation_structure( + PresentationMarkdownModel( + **{ + "title": presentation.title, + "slides": presentation.outlines, + "notes": presentation.notes, + } + ) + ) + supports_graph = True + model = SUPPORTED_OLLAMA_MODELS[os.getenv("OLLAMA_MODEL")] + supports_graph = model.supports_graph + + for each in presentation_structure.slides: + if each.type > 9: + each.type = random.choice(SLIDES_WITHOUT_GRAPH) + if each.type == 3: + each.type = 6 + if not supports_graph: + if each.type == 5: + each.type = 1 + elif each.type == 9: + each.type = 6 + + presentation_outlines_len = len(presentation.outlines) + missing_slides_len = presentation_outlines_len - len( + presentation_structure.slides + ) + if missing_slides_len > 0: + for index in range(missing_slides_len): + selected_type = ( + random.choice(SLIDES_WITHOUT_GRAPH) + if index != missing_slides_len - 1 + else 1 + ) + presentation_structure.slides.append( + SlideStructureModel(type=selected_type) + ) + elif missing_slides_len < 0: + presentation_structure.slides = presentation_structure.slides[ + :presentation_outlines_len + ] + + presentation.structure = presentation_structure.model_dump(mode="json") + sql_session.commit() + sql_session.refresh(presentation) + with get_sql_session() as sql_session: sql_session.add(key_value_model) sql_session.commit() diff --git a/servers/fastapi/api/routers/presentation/handlers/generate_image.py b/servers/fastapi/api/routers/presentation/handlers/generate_image.py index 06f037fc..b0776853 100644 --- a/servers/fastapi/api/routers/presentation/handlers/generate_image.py +++ b/servers/fastapi/api/routers/presentation/handlers/generate_image.py @@ -6,8 +6,8 @@ from api.routers.presentation.models import ( PresentationAndPaths, ) from api.services.logging import LoggingService -from api.services.instances import temp_file_service -from api.utils import get_presentation_dir, get_presentation_images_dir +from api.services.instances import TEMP_FILE_SERVICE +from api.utils.utils import get_presentation_dir, get_presentation_images_dir from image_processor.images_finder import generate_image @@ -17,7 +17,7 @@ class GenerateImageHandler: self.data = data self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) self.presentation_dir = get_presentation_dir(self.data.presentation_id) diff --git a/servers/fastapi/api/routers/presentation/handlers/generate_titles.py b/servers/fastapi/api/routers/presentation/handlers/generate_outlines.py similarity index 57% rename from servers/fastapi/api/routers/presentation/handlers/generate_titles.py rename to servers/fastapi/api/routers/presentation/handlers/generate_outlines.py index b169333c..e7a30bf7 100644 --- a/servers/fastapi/api/routers/presentation/handlers/generate_titles.py +++ b/servers/fastapi/api/routers/presentation/handlers/generate_outlines.py @@ -1,24 +1,24 @@ import uuid +import re from api.models import LogMetadata -from api.routers.presentation.models import GenerateTitleRequest -from api.services.instances import temp_file_service +from api.routers.presentation.models import GenerateOutlinesRequest +from api.services.instances import TEMP_FILE_SERVICE from api.services.logging import LoggingService from api.sql_models import PresentationSqlModel -from ppt_config_generator.models import PresentationTitlesModel -from ppt_config_generator.ppt_title_summary_generator import generate_ppt_titles +from ppt_config_generator.ppt_outlines_generator import generate_ppt_content from api.services.database import get_sql_session -class PresentationTitlesGenerateHandler: - def __init__(self, data: GenerateTitleRequest): +class PresentationOutlinesGenerateHandler: + def __init__(self, data: GenerateOutlinesRequest): self.data = data self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) def __del__(self): - temp_file_service.cleanup_temp_dir(self.temp_dir) + TEMP_FILE_SERVICE.cleanup_temp_dir(self.temp_dir) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): @@ -32,15 +32,21 @@ class PresentationTitlesGenerateHandler: PresentationSqlModel, self.data.presentation_id ) - presentation_titles: PresentationTitlesModel = await generate_ppt_titles( + presentation_content = await generate_ppt_content( presentation.prompt, presentation.n_slides, - presentation.summary, presentation.language, + presentation.summary, ) + presentation_content.slides = presentation_content.slides[ + : presentation.n_slides + ] - presentation.title = presentation_titles.presentation_title - presentation.titles = presentation_titles.titles + presentation.title = presentation_content.title + presentation.outlines = [ + each.model_dump() for each in presentation_content.slides + ] + presentation.notes = presentation_content.notes sql_session.commit() sql_session.refresh(presentation) diff --git a/servers/fastapi/api/routers/presentation/handlers/generate_presentation.py b/servers/fastapi/api/routers/presentation/handlers/generate_presentation.py new file mode 100644 index 00000000..692b09ab --- /dev/null +++ b/servers/fastapi/api/routers/presentation/handlers/generate_presentation.py @@ -0,0 +1,190 @@ +from typing import List +import uuid, aiohttp +from fastapi import HTTPException +from api.models import LogMetadata +from api.routers.presentation.handlers.export_as_pptx import ExportAsPptxHandler +from api.routers.presentation.handlers.upload_files import UploadFilesHandler +from api.routers.presentation.mixins.fetch_assets_on_generation import ( + FetchAssetsOnPresentationGenerationMixin, +) +from api.routers.presentation.models import ( + ExportAsRequest, + GeneratePresentationRequest, + PresentationAndPath, + PresentationPathAndEditPath, +) +from api.services.database import get_sql_session +from api.services.instances import TEMP_FILE_SERVICE +from api.services.logging import LoggingService +from api.sql_models import PresentationSqlModel, SlideSqlModel +from api.utils.utils import get_presentation_dir, is_ollama_selected +from document_processor.loader import DocumentsLoader +from ppt_config_generator.document_summary_generator import generate_document_summary +from ppt_config_generator.models import PresentationMarkdownModel +from ppt_config_generator.ppt_outlines_generator import generate_ppt_content +from ppt_generator.generator import generate_presentation +from ppt_generator.models.llm_models import ( + LLM_CONTENT_TYPE_MAPPING, + LLMPresentationModel, +) +from langchain_core.output_parsers import JsonOutputParser + +from ppt_generator.models.slide_model import SlideModel + +output_parser = JsonOutputParser(pydantic_object=LLMPresentationModel) + + +class GeneratePresentationHandler(FetchAssetsOnPresentationGenerationMixin): + + def __init__(self, presentation_id: str, data: GeneratePresentationRequest): + self.session = str(uuid.uuid4()) + self.presentation_id = presentation_id + self.data = data + + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir() + self.presentation_dir = get_presentation_dir(self.presentation_id) + + def __del__(self): + TEMP_FILE_SERVICE.cleanup_temp_dir(self.temp_dir) + + async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): + if is_ollama_selected(): + raise HTTPException( + status_code=400, + detail="Ollama is not currently supported for this endpoint", + ) + + documents_and_images_path = await UploadFilesHandler( + documents=self.data.documents, + images=None, + ).post(logging_service, log_metadata) + + summary = None + if documents_and_images_path.documents: + documents_loader = DocumentsLoader(documents_and_images_path.documents) + await documents_loader.load_documents(self.temp_dir) + + print("-" * 40) + print("Generating Document Summary") + summary = await generate_document_summary(documents_loader.documents) + + print("-" * 40) + print("Generating PPT Outline") + presentation_content = await generate_ppt_content( + self.data.prompt, + self.data.n_slides, + self.data.language, + summary, + ) + + print("-" * 40) + print("Generating Presentation") + presentation_text = ( + await generate_presentation( + PresentationMarkdownModel( + title=presentation_content.title, + slides=presentation_content.slides, + notes=presentation_content.notes, + ) + ) + ).content + + print("-" * 40) + print("Parsing Presentation") + presentation_json = output_parser.parse(presentation_text) + + slide_models: List[SlideModel] = [] + for i, slide in enumerate(presentation_json["slides"]): + slide["index"] = i + slide["presentation"] = self.presentation_id + slide["content"] = ( + LLM_CONTENT_TYPE_MAPPING[slide["type"]](**slide["content"]) + .to_content() + .model_dump(mode="json") + ) + slide_model = SlideModel(**slide) + slide_models.append(slide_model) + + print("-" * 40) + print("Fetching Theme Colors") + async with aiohttp.ClientSession() as session: + async with session.get( + f"http://localhost/api/get-theme-from-name?theme={self.data.theme.value}", + ) as response: + self.theme = await response.json() + + print("-" * 40) + print("Fetching Slide Assets") + async for result in self.fetch_slide_assets(slide_models): + print(result) + + slide_sql_models = [ + SlideSqlModel(**each.model_dump(mode="json")) for each in slide_models + ] + + presentation = PresentationSqlModel( + id=self.presentation_id, + prompt=self.data.prompt, + n_slides=self.data.n_slides, + language=self.data.language, + summary=summary, + theme=self.theme, + title=presentation_content.title, + outlines=[each.model_dump() for each in presentation_content.slides], + notes=presentation_content.notes, + ) + + with get_sql_session() as sql_session: + sql_session.add(presentation) + sql_session.add_all(slide_sql_models) + sql_session.commit() + for each in slide_sql_models: + sql_session.refresh(each) + + if self.data.export_as == "pptx": + print("-" * 40) + print("Fetching Slide Metadata for Export") + async with aiohttp.ClientSession() as session: + async with session.post( + f"http://localhost/api/slide-metadata", + json={ + "url": f"http://localhost/presentation?id={self.presentation_id}", + "theme": self.theme["name"], + "customColors": self.theme["colors"], + }, + ) as response: + export_request_body = await response.json() + + print("-" * 40) + print("Exporting Presentation") + export_request_body["presentation_id"] = self.presentation_id + export_request = ExportAsRequest(**export_request_body) + + presentation_and_path = await ExportAsPptxHandler(export_request).post( + logging_service, log_metadata + ) + + else: + print("-" * 40) + print("Exporting Presentation as PDF") + + async with aiohttp.ClientSession() as session: + async with session.post( + f"http://localhost/api/export-as-pdf", + json={ + "url": f"http://localhost/pdf-maker?id={self.presentation_id}", + "title": presentation_content.title, + }, + ) as response: + response_json = await response.json() + + presentation_and_path = PresentationAndPath( + presentation_id=self.presentation_id, + path=response_json["path"].replace("app", "static"), + ) + + presentation_and_path.path = presentation_and_path.path.replace("app", "static") + return PresentationPathAndEditPath( + **presentation_and_path.model_dump(), + edit_path=f"/presentation?id={self.presentation_id}", + ) diff --git a/servers/fastapi/api/routers/presentation/handlers/generate_presentation_requirements.py b/servers/fastapi/api/routers/presentation/handlers/generate_presentation_requirements.py index 903886bc..b92bdba3 100644 --- a/servers/fastapi/api/routers/presentation/handlers/generate_presentation_requirements.py +++ b/servers/fastapi/api/routers/presentation/handlers/generate_presentation_requirements.py @@ -3,7 +3,7 @@ from api.models import LogMetadata from api.routers.presentation.models import GeneratePresentationRequirementsRequest from api.services.logging import LoggingService from api.services.database import get_sql_session -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE from api.sql_models import PresentationSqlModel from document_processor.loader import DocumentsLoader from ppt_config_generator.document_summary_generator import generate_document_summary @@ -21,11 +21,9 @@ class GeneratePresentationRequirementsHandler: self.n_slides = data.n_slides self.documents = data.documents or [] self.language = data.language - self.research_reports = data.research_reports or [] - self.images = data.images or [] self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): logging_service.logger.info( @@ -33,7 +31,7 @@ class GeneratePresentationRequirementsHandler: extra=log_metadata.model_dump(), ) - all_document_paths = [*self.documents, *self.research_reports] + all_document_paths = [*self.documents] documents_loader = DocumentsLoader(all_document_paths) await documents_loader.load_documents(self.temp_dir) diff --git a/servers/fastapi/api/routers/presentation/handlers/generate_research_report.py b/servers/fastapi/api/routers/presentation/handlers/generate_research_report.py index 1e756b78..3043b893 100644 --- a/servers/fastapi/api/routers/presentation/handlers/generate_research_report.py +++ b/servers/fastapi/api/routers/presentation/handlers/generate_research_report.py @@ -2,7 +2,7 @@ import uuid from api.models import LogMetadata from api.routers.presentation.models import GenerateResearchReportRequest from api.services.logging import LoggingService -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE from research_report.generator import get_report @@ -11,7 +11,7 @@ class GenerateResearchReportHandler: self.data = data self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): logging_service.logger.info( @@ -22,7 +22,7 @@ class GenerateResearchReportHandler: report = await get_report(self.data.query, self.data.language) file_name = f"{report[:30]}.txt" - file_path = temp_file_service.create_temp_file_path(file_name, self.temp_dir) + file_path = TEMP_FILE_SERVICE.create_temp_file_path(file_name, self.temp_dir) with open(file_path, "w") as text_file: text_file.write(report) diff --git a/servers/fastapi/api/routers/presentation/handlers/generate_stream.py b/servers/fastapi/api/routers/presentation/handlers/generate_stream.py index 6bf61aa7..60dee4a5 100644 --- a/servers/fastapi/api/routers/presentation/handlers/generate_stream.py +++ b/servers/fastapi/api/routers/presentation/handlers/generate_stream.py @@ -1,4 +1,3 @@ -import asyncio import json from typing import List @@ -8,6 +7,9 @@ from sqlmodel import delete from api.models import LogMetadata, SSECompleteResponse, SSEResponse, SSEStatusResponse +from api.routers.presentation.mixins.fetch_assets_on_generation import ( + FetchAssetsOnPresentationGenerationMixin, +) from api.routers.presentation.models import ( PresentationAndSlides, PresentationGenerateRequest, @@ -15,31 +17,38 @@ from api.routers.presentation.models import ( from api.services.database import get_sql_session from api.services.logging import LoggingService from api.sql_models import KeyValueSqlModel, PresentationSqlModel, SlideSqlModel -from api.utils import get_presentation_dir, get_presentation_images_dir -from image_processor.icons_vectorstore_utils import get_icons_vectorstore -from image_processor.images_finder import generate_image -from image_processor.icons_finder import get_icon +from api.utils.utils import get_presentation_dir, is_ollama_selected +from ppt_config_generator.models import ( + PresentationMarkdownModel, + PresentationStructureModel, +) from ppt_generator.generator import generate_presentation_stream -from ppt_generator.models.llm_models import LLMPresentationModel +from ppt_generator.models.content_type_models import CONTENT_TYPE_MAPPING +from ppt_generator.models.llm_models import ( + LLM_CONTENT_TYPE_MAPPING, + LLMPresentationModel, + LLMSlideModel, +) from ppt_generator.models.slide_model import SlideModel -from ppt_generator.slide_model_utils import SlideModelUtils -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE from langchain_core.output_parsers import JsonOutputParser +from ppt_generator.slide_generator import get_slide_content_from_type_and_outline + output_parser = JsonOutputParser(pydantic_object=LLMPresentationModel) -class PresentationGenerateStreamHandler: +class PresentationGenerateStreamHandler(FetchAssetsOnPresentationGenerationMixin): def __init__(self, presentation_id: str, session: str): self.session = session self.presentation_id = presentation_id - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) self.presentation_dir = get_presentation_dir(self.presentation_id) def __del__(self): - temp_file_service.cleanup_temp_dir(self.temp_dir) + TEMP_FILE_SERVICE.cleanup_temp_dir(self.temp_dir) async def get(self, *args, **kwargs): with get_sql_session() as sql_session: @@ -53,8 +62,8 @@ class PresentationGenerateStreamHandler: self.presentation_id = self.data.presentation_id self.theme = self.data.theme self.images = self.data.images - self.titles = self.data.titles - self.watermark = self.data.watermark + self.title = self.data.title or "" + self.outlines = self.data.outlines return StreamingResponse( self.get_stream(*args, **kwargs), media_type="text/event-stream" @@ -68,13 +77,13 @@ class PresentationGenerateStreamHandler: extra=log_metadata.model_dump(), ) - if not self.titles: - raise HTTPException(400, "Titles can not be empty") + if not self.outlines: + raise HTTPException(400, "Outlines can not be empty") with get_sql_session() as sql_session: presentation = sql_session.get(PresentationSqlModel, self.presentation_id) - presentation.n_slides = len(self.titles) - presentation.titles = self.titles + presentation.outlines = [each.model_dump() for each in self.outlines] + presentation.title = self.title or presentation.title presentation.theme = self.theme sql_session.exec( delete(SlideSqlModel).where( @@ -84,48 +93,37 @@ class PresentationGenerateStreamHandler: sql_session.commit() sql_session.refresh(presentation) + self.presentation = presentation + yield SSEResponse( event="response", data=json.dumps({"status": "Analyzing information 📊"}) ).to_string() - presentation_text = "" - async for chunk in generate_presentation_stream( - self.titles, - presentation.prompt or "create presentation", - presentation.n_slides, - presentation.language, - presentation.summary, - ): - presentation_text += chunk.content - yield SSEResponse( - event="response", - data=json.dumps({"type": "chunk", "chunk": chunk.content}), - ).to_string() + self.presentation_json = None - print("-" * 40) - print(presentation_text) - print("-" * 40) - - presentation_json = output_parser.parse(presentation_text) - - print("-" * 40) - print(presentation_json) - print("-" * 40) + # self.presentation_json will be mutated by the generator + if is_ollama_selected(): + async for result in self.generate_presentation_ollama(): + yield result + else: + async for result in self.generate_presentation_openai_google(): + yield result slide_models: List[SlideModel] = [] - for i, content in enumerate(presentation_json["slides"]): - content["index"] = i - content["presentation"] = presentation.id - slide_model = SlideModel(**content) + for i, slide in enumerate(self.presentation_json["slides"]): + slide["index"] = i + slide["presentation"] = self.presentation.id + slide["content"] = ( + LLM_CONTENT_TYPE_MAPPING[slide["type"]](**slide["content"]) + .to_content() + .model_dump(mode="json") + ) + slide_model = SlideModel(**slide) slide_models.append(slide_model) async for result in self.fetch_slide_assets(slide_models): yield result - print("-" * 40) - print(slide_models) - print("-" * 40) - slide_sql_models = [ SlideSqlModel(**each.model_dump(mode="json")) for each in slide_models ] @@ -139,52 +137,68 @@ class PresentationGenerateStreamHandler: yield SSEStatusResponse(status="Packing slide data").to_string() response = PresentationAndSlides( - presentation=presentation, slides=slide_sql_models + presentation=self.presentation, slides=slide_sql_models ).to_response_dict() yield SSECompleteResponse(key="presentation", value=response).to_string() - async def fetch_slide_assets(self, slide_models: List[SlideModel]): - image_prompts = [] - icon_queries = [] - - for each_slide_model in slide_models: - slide_model_utils = SlideModelUtils(self.theme, each_slide_model) - image_prompts.extend(slide_model_utils.get_image_prompts()) - icon_queries.extend(slide_model_utils.get_icon_queries()) - - if icon_queries: - icon_vector_store = get_icons_vectorstore() - - images_directory = get_presentation_images_dir(self.presentation_id) - - coroutines = [ - generate_image( - each, - images_directory, + async def generate_presentation_openai_google(self): + presentation_text = "" + async for chunk in generate_presentation_stream( + PresentationMarkdownModel( + title=self.title, + slides=self.outlines, + notes=self.presentation.notes, ) - for each in image_prompts - ] + [get_icon(icon_vector_store, each) for each in icon_queries] + ): + presentation_text += chunk.content + yield SSEResponse( + event="response", + data=json.dumps({"type": "chunk", "chunk": chunk.content}), + ).to_string() - assets_future = asyncio.gather(*coroutines) + self.presentation_json = output_parser.parse(presentation_text) - while not assets_future.done(): - status = SSEStatusResponse(status="Fetching slide assets").to_string() - yield status - await asyncio.sleep(5) + async def generate_presentation_ollama(self): + presentation_structure = PresentationStructureModel( + **self.presentation.structure + ) + slide_models = [] + yield SSEResponse( + event="response", + data=json.dumps({"type": "chunk", "chunk": '{ "slides": [ '}), + ).to_string() + n_slides = len(presentation_structure.slides) + for i, slide_structure in enumerate(presentation_structure.slides): + # Informing about the start of the slide + # This is to make sure that the client renders slide n + # when it receives start chunk of slide n + 1 + yield SSEResponse( + event="response", + data=json.dumps({"type": "chunk", "chunk": "{"}), + ).to_string() - assets = await assets_future + slide_content = await get_slide_content_from_type_and_outline( + slide_structure.type, self.outlines[i] + ) + slide_model = LLMSlideModel( + type=slide_structure.type, + content=slide_content.model_dump(mode="json"), + ) + slide_models.append(slide_model) + chunk = json.dumps(slide_model.model_dump(mode="json")) - image_prompts_len = len(image_prompts) + if i < n_slides - 1: + chunk += "," + yield SSEResponse( + event="response", + data=json.dumps({"type": "chunk", "chunk": chunk[1:]}), + ).to_string() + yield SSEResponse( + event="response", + data=json.dumps({"type": "chunk", "chunk": " ] }"}), + ).to_string() - images = assets[:image_prompts_len] - icons = assets[image_prompts_len:] - - for each_slide_model in slide_models: - each_slide_model.images = images[: each_slide_model.images_count] - images = images[each_slide_model.images_count :] - - each_slide_model.icons = icons[: each_slide_model.icons_count] - icons = icons[each_slide_model.icons_count :] - - yield SSEStatusResponse(status="Slide assets fetched").to_string() + self.presentation_json = LLMPresentationModel( + slides=slide_models, + ).model_dump(mode="json") diff --git a/servers/fastapi/api/routers/presentation/handlers/list_ollama_pulled_models.py b/servers/fastapi/api/routers/presentation/handlers/list_ollama_pulled_models.py new file mode 100644 index 00000000..65fab26a --- /dev/null +++ b/servers/fastapi/api/routers/presentation/handlers/list_ollama_pulled_models.py @@ -0,0 +1,31 @@ +import ollama +from api.models import LogMetadata +from api.routers.presentation.models import OllamaModelStatusResponse +from api.services.logging import LoggingService + + +class ListPulledOllamaModelsHandler: + + async def get(self, logging_service: LoggingService, log_metadata: LogMetadata): + logging_service.logger.info( + logging_service.message("Listing Ollama models"), + extra=log_metadata.model_dump(), + ) + + response = ollama.list() + + logging_service.logger.info( + logging_service.message(response.model_dump(mode="json")), + extra=log_metadata.model_dump(), + ) + + return [ + OllamaModelStatusResponse( + name=model.model, + size=model.size, + status="pulled", + downloaded=model.size, + done=True, + ) + for model in response.models + ] diff --git a/servers/fastapi/api/routers/presentation/handlers/list_supported_ollama_models.py b/servers/fastapi/api/routers/presentation/handlers/list_supported_ollama_models.py new file mode 100644 index 00000000..2a4462ac --- /dev/null +++ b/servers/fastapi/api/routers/presentation/handlers/list_supported_ollama_models.py @@ -0,0 +1,16 @@ +from api.models import LogMetadata, OllamaModelMetadata +from api.routers.presentation.models import OllamaSupportedModelsResponse +from api.services.logging import LoggingService +from api.utils.supported_ollama_models import SUPPORTED_OLLAMA_MODELS + + +class ListSupportedOllamaModelsHandler: + async def get(self, logging_service: LoggingService, log_metadata: LogMetadata): + logging_service.logger.info( + logging_service.message("Listing supported Ollama models"), + extra=log_metadata.model_dump(), + ) + + return OllamaSupportedModelsResponse( + models=SUPPORTED_OLLAMA_MODELS.values(), + ) diff --git a/servers/fastapi/api/routers/presentation/handlers/pull_ollama_model.py b/servers/fastapi/api/routers/presentation/handlers/pull_ollama_model.py new file mode 100644 index 00000000..b942ddb8 --- /dev/null +++ b/servers/fastapi/api/routers/presentation/handlers/pull_ollama_model.py @@ -0,0 +1,104 @@ +import asyncio +import json +from fastapi import BackgroundTasks, HTTPException +from api.models import LogMetadata +from api.routers.presentation.handlers.list_supported_ollama_models import ( + SUPPORTED_OLLAMA_MODELS, +) +from api.routers.presentation.models import OllamaModelStatusResponse +from api.services.instances import REDIS_SERVICE +from api.services.logging import LoggingService +import ollama + + +class PullOllamaModelHandler: + + def __init__(self, name: str): + self.name = name + + async def get( + self, + logging_service: LoggingService, + log_metadata: LogMetadata, + background_tasks: BackgroundTasks, + ): + logging_service.logger.info( + logging_service.message(self.name), + extra=log_metadata.model_dump(), + ) + + if self.name not in SUPPORTED_OLLAMA_MODELS: + raise HTTPException( + status_code=400, + detail=f"Model {self.name} is not supported", + ) + + pulled_models = ollama.list().models + filtered_models = list( + filter(lambda model: model.model == self.name, pulled_models) + ) + + # If the model is already pulled, return the model + if filtered_models: + return OllamaModelStatusResponse( + name=self.name, + size=filtered_models[0].size, + status="pulled", + downloaded=filtered_models[0].size, + done=True, + ) + + saved_model_status = REDIS_SERVICE.get(f"ollama_models/{self.name}") + + # If the model is being pulled, return the model + if saved_model_status: + return json.loads(saved_model_status) + + # If the model is not being pulled, pull the model + background_tasks.add_task(self.pull_model_in_background) + + return OllamaModelStatusResponse( + name=self.name, + status="pulling", + done=False, + ) + + async def pull_model_in_background(self): + await asyncio.to_thread(self.pull_model) + + def pull_model(self): + saved_model_status = OllamaModelStatusResponse( + name=self.name, + status="pulling", + done=False, + ) + log_event_count = 0 + for event in ollama.pull(self.name, stream=True): + log_event_count += 1 + if log_event_count != 1 and log_event_count % 20 != 0: + continue + + if event.completed: + saved_model_status.downloaded = event.completed + + if not saved_model_status.size and event.total: + saved_model_status.size = event.total + + if event.status: + saved_model_status.status = event.status + + REDIS_SERVICE.set( + f"ollama_models/{self.name}", + json.dumps(saved_model_status.model_dump(mode="json")), + ) + + saved_model_status.done = True + saved_model_status.status = "pulled" + saved_model_status.downloaded = saved_model_status.size + + REDIS_SERVICE.set( + f"ollama_models/{self.name}", + json.dumps(saved_model_status.model_dump(mode="json")), + ) + + return saved_model_status diff --git a/servers/fastapi/api/routers/presentation/handlers/search_icon.py b/servers/fastapi/api/routers/presentation/handlers/search_icon.py index 31b6f453..f865b739 100644 --- a/servers/fastapi/api/routers/presentation/handlers/search_icon.py +++ b/servers/fastapi/api/routers/presentation/handlers/search_icon.py @@ -6,7 +6,7 @@ from api.routers.presentation.models import ( ) from api.services.logging import LoggingService from image_processor.icons_finder import get_icons -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE from image_processor.icons_vectorstore_utils import get_icons_vectorstore @@ -16,7 +16,7 @@ class SearchIconHandler: self.data = data self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): diff --git a/servers/fastapi/api/routers/presentation/handlers/update_slide_models.py b/servers/fastapi/api/routers/presentation/handlers/update_slide_models.py index da63cd30..c1b4aa39 100644 --- a/servers/fastapi/api/routers/presentation/handlers/update_slide_models.py +++ b/servers/fastapi/api/routers/presentation/handlers/update_slide_models.py @@ -11,14 +11,9 @@ from api.routers.presentation.models import ( ) from api.services.logging import LoggingService from api.sql_models import PresentationSqlModel, SlideSqlModel -from api.utils import ( - download_files, - get_presentation_dir, - get_presentation_images_dir, - replace_file_name, -) +from api.utils.utils import download_files, get_presentation_dir, replace_file_name from api.services.database import get_sql_session -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE class UpdateSlideModelsHandler: @@ -27,12 +22,12 @@ class UpdateSlideModelsHandler: self.data = data self.presentation_id = data.presentation_id self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir() + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir() self.presentation_dir = get_presentation_dir(self.presentation_id) def __del__(self): - temp_file_service.cleanup_temp_dir(self.temp_dir) + TEMP_FILE_SERVICE.cleanup_temp_dir(self.temp_dir) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): logging_service.logger.info( @@ -43,24 +38,21 @@ class UpdateSlideModelsHandler: presentation_id = self.data.presentation_id new_slides = self.data.slides - images_dir = get_presentation_images_dir(self.presentation_id) - # Handle images images_local_paths = [] images_download_links = [] for new_slide in new_slides: new_images = new_slide.images or [] - for i, image in enumerate(new_images): if image.startswith("http"): parsed_url = unquote(urlparse(image).path) image_name = replace_file_name( os.path.basename(parsed_url), str(uuid.uuid4()) ) - image_path = os.path.join(images_dir, image_name) + image_path = f"{self.presentation_dir}/images/{image_name}" images_local_paths.append(image_path) images_download_links.append(image) - getattr(new_slide, "images")[i] = image_path + new_slide.images[i] = image_path if images_download_links: await download_files(images_download_links, images_local_paths) diff --git a/servers/fastapi/api/routers/presentation/handlers/upload_files.py b/servers/fastapi/api/routers/presentation/handlers/upload_files.py index c341a350..36211a24 100644 --- a/servers/fastapi/api/routers/presentation/handlers/upload_files.py +++ b/servers/fastapi/api/routers/presentation/handlers/upload_files.py @@ -6,7 +6,7 @@ from api.routers.presentation.models import DocumentsAndImagesPath from api.services.logging import LoggingService from api.validators import validate_files from document_processor.loader import UPLOAD_ACCEPTED_DOCUMENTS -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE class UploadFilesHandler: @@ -20,7 +20,7 @@ class UploadFilesHandler: self.images = images self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) print("Upload Temp Dir: " + self.temp_dir) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): @@ -46,7 +46,7 @@ class UploadFilesHandler: if self.documents or self.images: all_documents = self.documents + self.images for doc in all_documents: - temp_path = temp_file_service.create_temp_file_path( + temp_path = TEMP_FILE_SERVICE.create_temp_file_path( doc.filename, self.temp_dir ) with open(temp_path, "wb") as f: diff --git a/servers/fastapi/api/routers/presentation/handlers/upload_presentation_thumbnail.py b/servers/fastapi/api/routers/presentation/handlers/upload_presentation_thumbnail.py index c0ee8518..baeec035 100644 --- a/servers/fastapi/api/routers/presentation/handlers/upload_presentation_thumbnail.py +++ b/servers/fastapi/api/routers/presentation/handlers/upload_presentation_thumbnail.py @@ -5,10 +5,10 @@ from fastapi import UploadFile from api.models import LogMetadata from api.routers.presentation.models import PresentationAndPath from api.services.logging import LoggingService -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE from api.sql_models import PresentationSqlModel from api.services.database import get_sql_session -from api.utils import get_presentation_dir +from api.utils.utils import get_presentation_dir class UploadPresentationThumbnailHandler: @@ -18,12 +18,12 @@ class UploadPresentationThumbnailHandler: self.thumbnail = thumbnail self.session = str(uuid.uuid4()) - self.temp_dir = temp_file_service.create_temp_dir(self.session) + self.temp_dir = TEMP_FILE_SERVICE.create_temp_dir(self.session) self.presentation_dir = get_presentation_dir(self.presentation_id) def __del__(self): - temp_file_service.cleanup_temp_dir(self.temp_dir) + TEMP_FILE_SERVICE.cleanup_temp_dir(self.temp_dir) async def post(self, logging_service: LoggingService, log_metadata: LogMetadata): logging_service.logger.info( diff --git a/servers/fastapi/api/routers/presentation/mixins/fetch_assets_on_generation.py b/servers/fastapi/api/routers/presentation/mixins/fetch_assets_on_generation.py new file mode 100644 index 00000000..211378e3 --- /dev/null +++ b/servers/fastapi/api/routers/presentation/mixins/fetch_assets_on_generation.py @@ -0,0 +1,58 @@ +import asyncio +from typing import List + +from api.models import SSEStatusResponse +from api.utils.utils import get_presentation_images_dir +from image_processor.icons_finder import get_icon +from image_processor.icons_vectorstore_utils import get_icons_vectorstore +from image_processor.images_finder import generate_image +from ppt_generator.models.slide_model import SlideModel +from ppt_generator.slide_model_utils import SlideModelUtils + + +class FetchAssetsOnPresentationGenerationMixin: + + async def fetch_slide_assets(self, slide_models: List[SlideModel]): + image_prompts = [] + icon_queries = [] + + for each_slide_model in slide_models: + slide_model_utils = SlideModelUtils(self.theme, each_slide_model) + image_prompts.extend(slide_model_utils.get_image_prompts()) + icon_queries.extend(slide_model_utils.get_icon_queries()) + + if icon_queries: + icon_vector_store = get_icons_vectorstore() + + images_directory = get_presentation_images_dir(self.presentation_id) + + coroutines = [ + generate_image( + each, + images_directory, + ) + for each in image_prompts + ] + [get_icon(icon_vector_store, each) for each in icon_queries] + + assets_future = asyncio.gather(*coroutines) + + while not assets_future.done(): + status = SSEStatusResponse(status="Fetching slide assets").to_string() + yield status + await asyncio.sleep(5) + + assets = await assets_future + + image_prompts_len = len(image_prompts) + + images = assets[:image_prompts_len] + icons = assets[image_prompts_len:] + + for each_slide_model in slide_models: + each_slide_model.images = images[: each_slide_model.images_count] + images = images[each_slide_model.images_count :] + + each_slide_model.icons = icons[: each_slide_model.icons_count] + icons = icons[each_slide_model.icons_count :] + + yield SSEStatusResponse(status="Slide assets fetched").to_string() diff --git a/servers/fastapi/api/routers/presentation/mixins/fetch_presentation_assets.py b/servers/fastapi/api/routers/presentation/mixins/fetch_presentation_assets.py index 671462c6..dbc8e209 100644 --- a/servers/fastapi/api/routers/presentation/mixins/fetch_presentation_assets.py +++ b/servers/fastapi/api/routers/presentation/mixins/fetch_presentation_assets.py @@ -1,7 +1,7 @@ import os from urllib.parse import unquote, urlparse import uuid -from api.utils import download_files, replace_file_name +from api.utils.utils import download_files, replace_file_name from ppt_generator.models.pptx_models import PptxPictureBoxModel @@ -16,18 +16,29 @@ class FetchPresentationAssetsMixin: if isinstance(each_shape, PptxPictureBoxModel): image_path = each_shape.picture.path if image_path.startswith("http"): - image_urls.append(image_path) - parsed_url = unquote(urlparse(image_path).path) - image_name = replace_file_name( - os.path.basename(parsed_url), str(uuid.uuid4()) - ) - image_path = os.path.join(self.temp_dir, image_name) - image_local_paths.append(image_path) + if image_path.startswith("http://localhost:3000/static"): + image_path = image_path.replace( + "http://localhost:3000/static", "" + ) + image_path = "/app" + image_path + elif image_path.startswith("http://localhost/static"): + image_path = image_path.replace( + "http://localhost/static", "" + ) + image_path = "/app" + image_path + else: + image_urls.append(image_path) + parsed_url = unquote(urlparse(image_path).path) + image_name = replace_file_name( + os.path.basename(parsed_url), str(uuid.uuid4()) + ) + image_path = os.path.join(self.temp_dir, image_name) + image_local_paths.append(image_path) elif image_path.startswith("file://"): image_path = image_path.replace("file:///", "") # Check if it's a Windows path (has colon at index 1) - if not (len(image_path) > 1 and image_path[1] == ':'): - image_path = '/' + image_path + if not (len(image_path) > 1 and image_path[1] == ":"): + image_path = "/" + image_path each_shape.picture.path = image_path each_shape.picture.is_network = False diff --git a/servers/fastapi/api/routers/presentation/models.py b/servers/fastapi/api/routers/presentation/models.py index b395848e..fb63b3c7 100644 --- a/servers/fastapi/api/routers/presentation/models.py +++ b/servers/fastapi/api/routers/presentation/models.py @@ -1,6 +1,11 @@ -from typing import List, Optional -from pydantic import BaseModel +from datetime import datetime +from enum import Enum +from typing import List, Literal, Optional +from fastapi import UploadFile +from pydantic import BaseModel, Field +from api.models import OllamaModelMetadata +from ppt_config_generator.models import SlideMarkdownModel from ppt_generator.models.pptx_models import PptxPresentationModel from ppt_generator.models.query_and_prompt_models import ( IconCategoryEnum, @@ -8,6 +13,17 @@ from ppt_generator.models.query_and_prompt_models import ( ) from ppt_generator.models.slide_model import SlideModel from api.sql_models import PresentationSqlModel, SlideSqlModel +from ollama._types import ModelDetails + + +class ThemeEnum(Enum): + DARK = "dark" + LIGHT = "light" + ROYAL_BLUE = "royal_blue" + CREAM = "cream" + LIGHT_RED = "light_red" + DARK_PINK = "dark_pink" + FAINT_YELLOW = "faint_yellow" class DocumentsAndImagesPath(BaseModel): @@ -33,7 +49,7 @@ class GeneratePresentationRequirementsRequest(BaseModel): images: Optional[List[str]] = None -class GenerateTitleRequest(BaseModel): +class GenerateOutlinesRequest(BaseModel): presentation_id: str @@ -41,8 +57,8 @@ class PresentationGenerateRequest(BaseModel): presentation_id: str theme: Optional[dict] = None images: Optional[List[str]] = None - watermark: bool = True - titles: List[str] + outlines: List[SlideMarkdownModel] + title: Optional[str] = None class GenerateImageRequest(BaseModel): @@ -133,6 +149,31 @@ class PresentationAndPaths(BaseModel): paths: List[str] +class PresentationPathAndEditPath(PresentationAndPath): + edit_path: str + + class UpdatePresentationTitlesRequest(BaseModel): presentation_id: str titles: List[str] + + +class GeneratePresentationRequest(BaseModel): + prompt: str + n_slides: int = Field(default=8, ge=5, le=15) + language: str = Field(default="English") + theme: ThemeEnum = Field(default=ThemeEnum.LIGHT) + documents: Optional[List[UploadFile]] = None + export_as: Literal["pptx", "pdf"] = Field(default="pptx") + + +class OllamaModelStatusResponse(BaseModel): + name: str + size: Optional[int] = None + downloaded: Optional[int] = None + status: str + done: bool + + +class OllamaSupportedModelsResponse(BaseModel): + models: List[OllamaModelMetadata] diff --git a/servers/fastapi/api/routers/presentation/router.py b/servers/fastapi/api/routers/presentation/router.py index 5513cc9f..eb7d4806 100644 --- a/servers/fastapi/api/routers/presentation/router.py +++ b/servers/fastapi/api/routers/presentation/router.py @@ -1,6 +1,6 @@ from typing import Annotated, List, Optional import uuid -from fastapi import APIRouter, Body, File, UploadFile, Depends +from fastapi import APIRouter, BackgroundTasks, Body, File, Form, UploadFile from api.models import SessionModel from api.request_utils import RequestUtils @@ -17,6 +17,9 @@ from api.routers.presentation.handlers.generate_data import ( PresentationGenerateDataHandler, ) from api.routers.presentation.handlers.generate_image import GenerateImageHandler +from api.routers.presentation.handlers.generate_presentation import ( + GeneratePresentationHandler, +) from api.routers.presentation.handlers.generate_presentation_requirements import ( GeneratePresentationRequirementsHandler, ) @@ -26,11 +29,18 @@ from api.routers.presentation.handlers.generate_research_report import ( from api.routers.presentation.handlers.generate_stream import ( PresentationGenerateStreamHandler, ) -from api.routers.presentation.handlers.generate_titles import ( - PresentationTitlesGenerateHandler, +from api.routers.presentation.handlers.generate_outlines import ( + PresentationOutlinesGenerateHandler, ) from api.routers.presentation.handlers.get_presentation import GetPresentationHandler from api.routers.presentation.handlers.get_presentations import GetPresentationsHandler +from api.routers.presentation.handlers.list_ollama_pulled_models import ( + ListPulledOllamaModelsHandler, +) +from api.routers.presentation.handlers.list_supported_ollama_models import ( + ListSupportedOllamaModelsHandler, +) +from api.routers.presentation.handlers.pull_ollama_model import PullOllamaModelHandler from api.routers.presentation.handlers.search_icon import SearchIconHandler from api.routers.presentation.handlers.search_image import SearchImageHandler from api.routers.presentation.handlers.update_parsed_document import ( @@ -53,31 +63,36 @@ from api.routers.presentation.models import ( EditPresentationSlideRequest, ExportAsRequest, GenerateImageRequest, + GeneratePresentationRequest, GeneratePresentationRequirementsRequest, GenerateResearchReportRequest, + OllamaModelStatusResponse, + OllamaSupportedModelsResponse, PresentationAndPath, PresentationAndPaths, PresentationAndSlides, - GenerateTitleRequest, + GenerateOutlinesRequest, PresentationAndUrls, PresentationGenerateRequest, + PresentationPathAndEditPath, SearchIconRequest, SearchImageRequest, UpdatePresentationThemeRequest, PresentationUpdateRequest, ) from api.sql_models import PresentationSqlModel -from api.utils import handle_errors +from api.utils.utils import handle_errors from ppt_generator.models.slide_model import SlideModel -presentation_router = APIRouter(prefix="/ppt") +route_prefix = "/api/v1/ppt" +presentation_router = APIRouter(prefix=route_prefix) @presentation_router.get( "/user_presentations", response_model=List[PresentationSqlModel] ) async def get_user_presentations(): - request_utils = RequestUtils("/ppt/user_presentations") + request_utils = RequestUtils(f"{route_prefix}/user_presentations") logging_service, log_metadata = await request_utils.initialize_logger() return await handle_errors( GetPresentationsHandler().get, logging_service, log_metadata @@ -86,7 +101,7 @@ async def get_user_presentations(): @presentation_router.get("/presentation", response_model=PresentationAndSlides) async def get_presentation_from_id(presentation_id: str): - request_utils = RequestUtils("/ppt/presentation") + request_utils = RequestUtils(f"{route_prefix}/presentation") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=presentation_id, ) @@ -100,7 +115,7 @@ async def upload_files( documents: Annotated[Optional[List[UploadFile]], File()] = None, images: Annotated[Optional[List[UploadFile]], File()] = None, ): - request_utils = RequestUtils("/ppt/files/upload") + request_utils = RequestUtils(f"{route_prefix}/files/upload") logging_service, log_metadata = await request_utils.initialize_logger() return await handle_errors( UploadFilesHandler(documents, images).post, @@ -113,7 +128,7 @@ async def upload_files( async def generate_research_report( data: GenerateResearchReportRequest, ): - request_utils = RequestUtils("/ppt/report/generate") + request_utils = RequestUtils(f"{route_prefix}/report/generate") logging_service, log_metadata = await request_utils.initialize_logger() return await handle_errors( GenerateResearchReportHandler(data).post, logging_service, log_metadata @@ -122,7 +137,7 @@ async def generate_research_report( @presentation_router.post("/files/decompose", response_model=DecomposeDocumentsResponse) async def decompose_documents(data: DecomposeDocumentsRequest): - request_utils = RequestUtils("/ppt/files/decompose") + request_utils = RequestUtils(f"{route_prefix}/files/decompose") logging_service, log_metadata = await request_utils.initialize_logger() return await handle_errors( DecomposeDocumentsHandler(data).post, logging_service, log_metadata @@ -134,7 +149,7 @@ async def update_document( path: Annotated[str, Body()], file: Annotated[UploadFile, File()], ): - request_utils = RequestUtils("/ppt/document/update") + request_utils = RequestUtils(f"{route_prefix}/document/update") logging_service, log_metadata = await request_utils.initialize_logger() return await handle_errors( UpdateParsedDocumentHandler(path, file).post, @@ -147,7 +162,7 @@ async def update_document( async def create_presentation( data: GeneratePresentationRequirementsRequest, ): - request_utils = RequestUtils("/ppt/create") + request_utils = RequestUtils(f"{route_prefix}/create") presentation_id = str(uuid.uuid4()) logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=presentation_id, @@ -159,14 +174,14 @@ async def create_presentation( ) -@presentation_router.post("/titles/generate", response_model=PresentationSqlModel) -async def generate_titles(data: GenerateTitleRequest): - request_utils = RequestUtils("/ppt/titles/generate") +@presentation_router.post("/outlines/generate", response_model=PresentationSqlModel) +async def generate_outlines(data: GenerateOutlinesRequest): + request_utils = RequestUtils(f"{route_prefix}/outlines/generate") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id, ) return await handle_errors( - PresentationTitlesGenerateHandler(data).post, + PresentationOutlinesGenerateHandler(data).post, logging_service, log_metadata, ) @@ -176,7 +191,7 @@ async def generate_titles(data: GenerateTitleRequest): async def submit_presentation_generation_data( data: PresentationGenerateRequest, ): - request_utils = RequestUtils("/ppt/generate/data") + request_utils = RequestUtils(f"{route_prefix}/generate/data") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id, ) @@ -187,7 +202,7 @@ async def submit_presentation_generation_data( @presentation_router.get("/generate/stream") async def presentation_generation_stream(presentation_id: str, session: str): - request_utils = RequestUtils("/ppt/generate/stream") + request_utils = RequestUtils(f"{route_prefix}/generate/stream") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=presentation_id, ) @@ -203,7 +218,7 @@ async def update_presentation( presentation_id: Annotated[str, Body()], thumbnail: Annotated[UploadFile, File()], ): - request_utils = RequestUtils("/ppt/presentation/thumbnail") + request_utils = RequestUtils(f"{route_prefix}/presentation/thumbnail") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=presentation_id, ) @@ -218,7 +233,7 @@ async def update_presentation( async def update_presentation( data: UpdatePresentationThemeRequest, ): - request_utils = RequestUtils("/ppt/presentation/theme") + request_utils = RequestUtils(f"{route_prefix}/presentation/theme") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id, ) @@ -233,7 +248,7 @@ async def update_presentation( async def update_presentation( data: EditPresentationSlideRequest, ): - request_utils = RequestUtils("/ppt/edit") + request_utils = RequestUtils(f"{route_prefix}/edit") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id ) @@ -244,7 +259,7 @@ async def update_presentation( @presentation_router.post("/slides/update", response_model=PresentationAndSlides) async def update_slide_models(data: PresentationUpdateRequest): - request_utils = RequestUtils("/ppt/slides/update") + request_utils = RequestUtils(f"{route_prefix}/slides/update") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id, ) @@ -255,7 +270,7 @@ async def update_slide_models(data: PresentationUpdateRequest): @presentation_router.post("/image/generate", response_model=PresentationAndPaths) async def generate_image(data: GenerateImageRequest): - request_utils = RequestUtils("/ppt/image/generate") + request_utils = RequestUtils(f"{route_prefix}/image/generate") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id, ) @@ -266,7 +281,7 @@ async def generate_image(data: GenerateImageRequest): @presentation_router.post("/image/search", response_model=PresentationAndUrls) async def search_image(data: SearchImageRequest): - request_utils = RequestUtils("/ppt/image/search") + request_utils = RequestUtils(f"{route_prefix}/image/search") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id, ) @@ -277,7 +292,7 @@ async def search_image(data: SearchImageRequest): @presentation_router.post("/icon/search", response_model=PresentationAndPaths) async def search_icon(data: SearchIconRequest): - request_utils = RequestUtils("/ppt/icon/search") + request_utils = RequestUtils(f"{route_prefix}/icon/search") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id, ) @@ -290,7 +305,7 @@ async def search_icon(data: SearchIconRequest): "/presentation/export_as_pptx", response_model=PresentationAndPath ) async def export_as_pptx(data: ExportAsRequest): - request_utils = RequestUtils("/ppt/presentation/export_as_pptx") + request_utils = RequestUtils(f"{route_prefix}/presentation/export_as_pptx") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=data.presentation_id, ) @@ -301,7 +316,7 @@ async def export_as_pptx(data: ExportAsRequest): @presentation_router.delete("/delete", status_code=204) async def delete_presentation(presentation_id: str): - request_utils = RequestUtils("/ppt/delete") + request_utils = RequestUtils(f"{route_prefix}/delete") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=presentation_id, ) @@ -312,10 +327,62 @@ async def delete_presentation(presentation_id: str): @presentation_router.delete("/slide/delete", status_code=204) async def delete_slide(slide_id: str, presentation_id: str): - request_utils = RequestUtils("/ppt/slide/delete") + request_utils = RequestUtils(f"{route_prefix}/slide/delete") logging_service, log_metadata = await request_utils.initialize_logger( presentation_id=presentation_id, ) return await handle_errors( DeleteSlideHandler(slide_id).delete, logging_service, log_metadata ) + + +@presentation_router.post( + "/generate/presentation", response_model=PresentationPathAndEditPath +) +async def generate_presentation(data: Annotated[GeneratePresentationRequest, Form()]): + presentation_id = str(uuid.uuid4()) + + request_utils = RequestUtils(f"{route_prefix}/generate/presentation") + logging_service, log_metadata = await request_utils.initialize_logger( + presentation_id=presentation_id, + ) + return await handle_errors( + GeneratePresentationHandler(presentation_id, data).post, + logging_service, + log_metadata, + ) + + +# Ollama Support +@presentation_router.get( + "/ollama/list-supported-models", response_model=OllamaSupportedModelsResponse +) +async def list_supported_ollama_models(): + request_utils = RequestUtils(f"{route_prefix}/ollama/list-supported-models") + logging_service, log_metadata = await request_utils.initialize_logger() + return await handle_errors( + ListSupportedOllamaModelsHandler().get, logging_service, log_metadata + ) + + +@presentation_router.get( + "/ollama/list-pulled-models", response_model=List[OllamaModelStatusResponse] +) +async def list_pulled_ollama_models(): + request_utils = RequestUtils(f"{route_prefix}/ollama/list-pulled-models") + logging_service, log_metadata = await request_utils.initialize_logger() + return await handle_errors( + ListPulledOllamaModelsHandler().get, logging_service, log_metadata + ) + + +@presentation_router.get("/ollama/pull-model", response_model=OllamaModelStatusResponse) +async def pull_ollama_model(name: str, background_tasks: BackgroundTasks): + request_utils = RequestUtils(f"{route_prefix}/ollama/pull-model") + logging_service, log_metadata = await request_utils.initialize_logger() + return await handle_errors( + PullOllamaModelHandler(name).get, + logging_service, + log_metadata, + background_tasks=background_tasks, + ) diff --git a/servers/fastapi/api/services/instances.py b/servers/fastapi/api/services/instances.py index 8e33734e..8cdc8641 100644 --- a/servers/fastapi/api/services/instances.py +++ b/servers/fastapi/api/services/instances.py @@ -1,4 +1,6 @@ +from api.services.redis import RedisService from api.services.temp_file import TempFileService -temp_file_service = TempFileService() \ No newline at end of file +TEMP_FILE_SERVICE = TempFileService() +REDIS_SERVICE = RedisService() diff --git a/servers/fastapi/api/services/logging.py b/servers/fastapi/api/services/logging.py index 060b8dbf..21f1a3ad 100644 --- a/servers/fastapi/api/services/logging.py +++ b/servers/fastapi/api/services/logging.py @@ -1,6 +1,4 @@ -import os from typing import Any -import logging from logging import Logger @@ -9,10 +7,6 @@ class LoggingService: def __init__(self, stream_name: str): self._logger = Logger(stream_name) - log_file_path = os.path.join(os.getenv("APP_DATA_DIRECTORY"), "logs", "api.log") - os.makedirs(os.path.dirname(log_file_path), exist_ok=True) - self._logger.addHandler(logging.FileHandler(log_file_path)) - @property def logger(self) -> Logger: return self._logger diff --git a/servers/fastapi/api/services/redis.py b/servers/fastapi/api/services/redis.py new file mode 100644 index 00000000..5d9dff22 --- /dev/null +++ b/servers/fastapi/api/services/redis.py @@ -0,0 +1,109 @@ +import os +from typing import Any, Optional +import redis +from redis.exceptions import RedisError + + +class RedisService: + def __init__(self): + self.redis_host = os.getenv("REDIS_HOST", "localhost") + self.redis_port = int(os.getenv("REDIS_PORT", "6379")) + self.redis_db = int(os.getenv("REDIS_DB", "0")) + self.redis_password = os.getenv("REDIS_PASSWORD") + self.client = self._create_client() + + def _create_client(self) -> redis.Redis: + return redis.Redis( + host=self.redis_host, + port=self.redis_port, + db=self.redis_db, + password=self.redis_password, + decode_responses=True, + ) + + def set(self, key: str, value: Any, expire: Optional[int] = None) -> bool: + try: + return self.client.set(key, value, ex=expire) + except RedisError: + return False + + def get(self, key: str) -> Optional[str]: + try: + return self.client.get(key) + except RedisError: + return None + + def delete(self, key: str) -> bool: + try: + return bool(self.client.delete(key)) + except RedisError: + return False + + def exists(self, key: str) -> bool: + try: + return bool(self.client.exists(key)) + except RedisError: + return False + + def set_hash(self, name: str, mapping: dict) -> bool: + try: + return self.client.hmset(name, mapping) + except RedisError: + return False + + def get_hash(self, name: str) -> Optional[dict]: + try: + return self.client.hgetall(name) + except RedisError: + return None + + def delete_hash(self, name: str, *fields: str) -> int: + try: + return self.client.hdel(name, *fields) + except RedisError: + return 0 + + def set_list(self, name: str, values: list) -> bool: + try: + self.client.delete(name) + if values: + self.client.rpush(name, *values) + return True + except RedisError: + return False + + def get_list(self, name: str, start: int = 0, end: int = -1) -> Optional[list]: + try: + return self.client.lrange(name, start, end) + except RedisError: + return None + + def add_to_set(self, name: str, *values: str) -> int: + try: + return self.client.sadd(name, *values) + except RedisError: + return 0 + + def get_set(self, name: str) -> Optional[set]: + try: + return self.client.smembers(name) + except RedisError: + return None + + def remove_from_set(self, name: str, *values: str) -> int: + try: + return self.client.srem(name, *values) + except RedisError: + return 0 + + def clear(self) -> bool: + try: + return self.client.flushdb() + except RedisError: + return False + + def close(self): + try: + self.client.close() + except RedisError: + pass diff --git a/servers/fastapi/api/sql_models.py b/servers/fastapi/api/sql_models.py index 61799383..3d35ca79 100644 --- a/servers/fastapi/api/sql_models.py +++ b/servers/fastapi/api/sql_models.py @@ -3,8 +3,6 @@ from typing import List, Optional import uuid from sqlmodel import SQLModel, Field, Column, JSON -from ppt_generator.models.other_models import SlideType - def get_random_uuid() -> str: return str(uuid.uuid4()) @@ -18,7 +16,13 @@ class PresentationSqlModel(SQLModel, table=True): theme: Optional[dict] = Field(sa_column=Column(JSON, nullable=True), default=None) file: Optional[str] = None title: Optional[str] = None - titles: Optional[List[str]] = Field( + structure: Optional[dict] = Field( + sa_column=Column(JSON, nullable=True), default=None + ) + notes: Optional[List[str]] = Field( + sa_column=Column(JSON, nullable=True), default=None + ) + outlines: Optional[List[dict]] = Field( sa_column=Column(JSON, nullable=True), default=None ) language: Optional[str] = None diff --git a/servers/fastapi/api/utils/supported_ollama_models.py b/servers/fastapi/api/utils/supported_ollama_models.py new file mode 100644 index 00000000..e3dd0a1e --- /dev/null +++ b/servers/fastapi/api/utils/supported_ollama_models.py @@ -0,0 +1,253 @@ +from api.models import OllamaModelMetadata + + +SUPPORTED_LLAMA_MODELS = { + "llama3:8b": OllamaModelMetadata( + label="Llama 3:8b", + value="llama3:8b", + description="❌ Graphs not supported.", + size="4.7GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama3:70b": OllamaModelMetadata( + label="Llama 3:70b", + value="llama3:70b", + description="✅ Graphs supported.", + size="40GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama3.1:8b": OllamaModelMetadata( + label="Llama 3.1:8b", + value="llama3.1:8b", + description="❌ Graphs not supported.", + size="4.9GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama3.1:70b": OllamaModelMetadata( + label="Llama 3.1:70b", + value="llama3.1:70b", + description="✅ Graphs supported.", + size="43GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama3.1:405b": OllamaModelMetadata( + label="Llama 3.1:405b", + value="llama3.1:405b", + description="✅ Graphs supported.", + size="243GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama3.2:1b": OllamaModelMetadata( + label="Llama 3.2:1b", + value="llama3.2:1b", + description="❌ Graphs not supported.", + size="1.3GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama3.2:3b": OllamaModelMetadata( + label="Llama 3.2:3b", + value="llama3.2:3b", + description="❌ Graphs not supported.", + size="2GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama3.3:70b": OllamaModelMetadata( + label="Llama 3.3:70b", + value="llama3.3:70b", + description="✅ Graphs supported.", + size="43GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama4:16x17b": OllamaModelMetadata( + label="Llama 4:16x17b", + value="llama4:16x17b", + description="✅ Graphs supported.", + size="67GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), + "llama4:128x17b": OllamaModelMetadata( + label="Llama 4:128x17b", + value="llama4:128x17b", + description="✅ Graphs supported.", + size="245GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/meta.png", + ), +} + +SUPPORTED_GEMMA_MODELS = { + "gemma3:1b": OllamaModelMetadata( + label="Gemma 3:1b", + value="gemma3:1b", + description="❌ Graphs not supported.", + size="815MB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/gemma.png", + ), + "gemma3:4b": OllamaModelMetadata( + label="Gemma 3:4b", + value="gemma3:4b", + description="❌ Graphs not supported.", + size="3.3GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/gemma.png", + ), + "gemma3:12b": OllamaModelMetadata( + label="Gemma 3:12b", + value="gemma3:12b", + description="❌ Graphs not supported.", + size="8.1GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/gemma.png", + ), + "gemma3:27b": OllamaModelMetadata( + label="Gemma 3:27b", + value="gemma3:27b", + description="✅ Graphs supported.", + size="17GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/gemma.png", + ), +} + +SUPPORTED_DEEPSEEK_MODELS = { + "deepseek-r1:1.5b": OllamaModelMetadata( + label="DeepSeek R1:1.5b", + value="deepseek-r1:1.5b", + description="❌ Graphs not supported.", + size="1.1GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/deepseek.png", + ), + "deepseek-r1:7b": OllamaModelMetadata( + label="DeepSeek R1:7b", + value="deepseek-r1:7b", + description="❌ Graphs not supported.", + size="4.7GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/deepseek.png", + ), + "deepseek-r1:8b": OllamaModelMetadata( + label="DeepSeek R1:8b", + value="deepseek-r1:8b", + description="❌ Graphs not supported.", + size="5.2GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/deepseek.png", + ), + "deepseek-r1:14b": OllamaModelMetadata( + label="DeepSeek R1:14b", + value="deepseek-r1:14b", + description="❌ Graphs not supported.", + size="9GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/deepseek.png", + ), + "deepseek-r1:32b": OllamaModelMetadata( + label="DeepSeek R1:32b", + value="deepseek-r1:32b", + description="✅ Graphs supported.", + size="20GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/deepseek.png", + ), + "deepseek-r1:70b": OllamaModelMetadata( + label="DeepSeek R1:70b", + value="deepseek-r1:70b", + description="✅ Graphs supported.", + size="43GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/deepseek.png", + ), + "deepseek-r1:671b": OllamaModelMetadata( + label="DeepSeek R1:671b", + value="deepseek-r1:671b", + description="✅ Graphs supported.", + size="404GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/deepseek.png", + ), +} + +SUPPORTED_QWEN_MODELS = { + "qwen3:0.6b": OllamaModelMetadata( + label="Qwen 3:0.6b", + value="qwen3:0.6b", + description="❌ Graphs not supported.", + size="523MB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/qwen.png", + ), + "qwen3:1.7b": OllamaModelMetadata( + label="Qwen 3:1.7b", + value="qwen3:1.7b", + description="❌ Graphs not supported.", + size="1.4GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/qwen.png", + ), + "qwen3:4b": OllamaModelMetadata( + label="Qwen 3:4b", + value="qwen3:4b", + description="❌ Graphs not supported.", + size="2.6GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/qwen.png", + ), + "qwen3:8b": OllamaModelMetadata( + label="Qwen 3:8b", + value="qwen3:8b", + description="❌ Graphs not supported.", + size="5.2GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/qwen.png", + ), + "qwen3:14b": OllamaModelMetadata( + label="Qwen 3:14b", + value="qwen3:14b", + description="❌ Graphs not supported.", + size="9.3GB", + supports_graph=False, + icon="/static/servers/fastapi/assets/icons/qwen.png", + ), + "qwen3:30b": OllamaModelMetadata( + label="Qwen 3:30b", + value="qwen3:30b", + description="✅ Graphs supported.", + size="19GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/qwen.png", + ), + "qwen3:32b": OllamaModelMetadata( + label="Qwen 3:32b", + value="qwen3:32b", + description="✅ Graphs supported.", + size="20GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/qwen.png", + ), + "qwen3:235b": OllamaModelMetadata( + label="Qwen 3:235b", + value="qwen3:235b", + description="✅ Graphs supported.", + size="142GB", + supports_graph=True, + icon="/static/servers/fastapi/assets/icons/qwen.png", + ), +} + +SUPPORTED_OLLAMA_MODELS = { + **SUPPORTED_LLAMA_MODELS, + **SUPPORTED_GEMMA_MODELS, + **SUPPORTED_DEEPSEEK_MODELS, + **SUPPORTED_QWEN_MODELS, +} diff --git a/servers/fastapi/api/utils.py b/servers/fastapi/api/utils/utils.py similarity index 72% rename from servers/fastapi/api/utils.py rename to servers/fastapi/api/utils/utils.py index aef1876c..90882961 100644 --- a/servers/fastapi/api/utils.py +++ b/servers/fastapi/api/utils/utils.py @@ -9,11 +9,48 @@ from typing import List, Optional import aiohttp from fastapi import HTTPException, UploadFile from fastapi.responses import StreamingResponse +from langchain_google_genai import ChatGoogleGenerativeAI +from langchain_ollama import ChatOllama +from langchain_openai import ChatOpenAI from api.models import LogMetadata, UserConfig from api.services.logging import LoggingService +def is_ollama_selected() -> bool: + return os.getenv("LLM") == "ollama" + + +def get_large_model(): + selected_llm = os.getenv("LLM") + if selected_llm == "openai": + return ChatOpenAI(model="gpt-4.1") + elif selected_llm == "google": + return ChatGoogleGenerativeAI(model="gemini-2.0-flash") + else: + return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) + + +def get_small_model(): + selected_llm = os.getenv("LLM") + if selected_llm == "openai": + return ChatOpenAI(model="gpt-4.1-mini") + elif selected_llm == "google": + return ChatGoogleGenerativeAI(model="gemini-2.0-flash") + else: + return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) + + +def get_nano_model(): + selected_llm = os.getenv("LLM") + if selected_llm == "openai": + return ChatOpenAI(model="gpt-4.1-nano") + elif selected_llm == "google": + return ChatGoogleGenerativeAI(model="gemini-2.0-flash") + else: + return ChatOllama(model=os.getenv("OLLAMA_MODEL"), temperature=0.8) + + def get_presentation_dir(presentation_id: str) -> str: presentation_dir = os.path.join(os.getenv("APP_DATA_DIRECTORY"), presentation_id) os.makedirs(presentation_dir, exist_ok=True) @@ -44,6 +81,8 @@ def get_user_config(): LLM=existing_config.LLM or os.getenv("LLM"), OPENAI_API_KEY=existing_config.OPENAI_API_KEY or os.getenv("OPENAI_API_KEY"), GOOGLE_API_KEY=existing_config.GOOGLE_API_KEY or os.getenv("GOOGLE_API_KEY"), + OLLAMA_MODEL=existing_config.OLLAMA_MODEL or os.getenv("OLLAMA_MODEL"), + PEXELS_API_KEY=existing_config.PEXELS_API_KEY or os.getenv("PEXELS_API_KEY"), ) @@ -55,11 +94,17 @@ def update_env_with_user_config(): os.environ["OPENAI_API_KEY"] = user_config.OPENAI_API_KEY if user_config.GOOGLE_API_KEY: os.environ["GOOGLE_API_KEY"] = user_config.GOOGLE_API_KEY + if user_config.OLLAMA_MODEL: + os.environ["OLLAMA_MODEL"] = user_config.OLLAMA_MODEL + if user_config.PEXELS_API_KEY: + os.environ["PEXELS_API_KEY"] = user_config.PEXELS_API_KEY def get_resource(relative_path): base_path = getattr( - sys, "_MEIPASS", os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + sys, + "_MEIPASS", + os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), ) return os.path.join(base_path, relative_path) @@ -73,11 +118,11 @@ def replace_file_name(old_name: str, new_name: str) -> str: def save_uploaded_files( - temp_file_service, files: List[UploadFile], file_paths: List[str], temp_dir: str + TEMP_FILE_SERVICE, files: List[UploadFile], file_paths: List[str], temp_dir: str ) -> List: full_file_paths = [] for index, each_file in enumerate(files): - temp_file_path = temp_file_service.create_temp_file( + temp_file_path = TEMP_FILE_SERVICE.create_temp_file( file_paths[index], each_file.file.read(), dir_path=temp_dir ) full_file_paths.append(temp_file_path) @@ -85,6 +130,7 @@ def save_uploaded_files( async def download_file(url: str, save_path: str, headers: Optional[dict] = None): + os.makedirs(os.path.dirname(save_path), exist_ok=True) try: async with aiohttp.ClientSession() as session: async with session.get(url, headers=headers) as response: @@ -101,6 +147,7 @@ async def download_file(url: str, save_path: str, headers: Optional[dict] = None print(f"Failed to download file. HTTP status: {response.status}") return False except Exception as e: + print(e) print(f"Error while downloading file from {url} to {save_path}") return False @@ -117,12 +164,12 @@ async def download_files(urls: List[str], save_paths: List[str]): async def handle_errors( - func, logging_service: LoggingService, log_metadata: LogMetadata + func, logging_service: LoggingService, log_metadata: LogMetadata, **kwargs ): try: logging_service.logger.info(f"START", extra=log_metadata.model_dump()) response = await func( - logging_service=logging_service, log_metadata=log_metadata + logging_service=logging_service, log_metadata=log_metadata, **kwargs ) is_stream = isinstance(response, StreamingResponse) logging_service.logger.info( diff --git a/servers/fastapi/api/utils/variable_length_models.py b/servers/fastapi/api/utils/variable_length_models.py new file mode 100644 index 00000000..4c8d1c43 --- /dev/null +++ b/servers/fastapi/api/utils/variable_length_models.py @@ -0,0 +1,46 @@ +from typing import List, Optional +from pydantic import Field +from ppt_config_generator.models import ( + PresentationMarkdownModel, + PresentationStructureModel, + SlideMarkdownModel, + SlideStructureModel, +) + + +class SlideMarkdownModelWithValidation(SlideMarkdownModel): + title: str = Field( + description="Title of the slide in about 3 to 5 words", + min_length=10, + max_length=50, + ) + + +def get_presentation_markdown_model_with_n_slides(n_slides: int): + class PresentationMarkdownModelWithNSlides(PresentationMarkdownModel): + title: str = Field( + description="Title of the presentation in about 3 to 8 words", + min_length=10, + max_length=50, + ) + notes: Optional[List[str]] = Field( + description="Important notes for the presentation styling and formatting", + min_length=0, + max_length=10, + ) + slides: List[SlideMarkdownModelWithValidation] = Field( + description="List of slides", min_items=n_slides, max_items=n_slides + ) + + return PresentationMarkdownModelWithNSlides + + +def get_presentation_structure_model_with_n_slides(n_slides: int): + class PresentationStructureModelWithNSlides(PresentationStructureModel): + slides: List[SlideStructureModel] = Field( + description="List of slide structure", + min_items=n_slides, + max_items=n_slides, + ) + + return PresentationStructureModelWithNSlides diff --git a/servers/fastapi/assets/icons/deepseek.png b/servers/fastapi/assets/icons/deepseek.png new file mode 100644 index 0000000000000000000000000000000000000000..798b8f18c925550089b1536a5d69ac201a0c6cfb GIT binary patch literal 23192 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

VYFE`XEss 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 THTW+X0C@FWO|jycdGP-O#>xM~ literal 0 HcmV?d00001 diff --git a/servers/fastapi/assets/icons/qwen.png b/servers/fastapi/assets/icons/qwen.png new file mode 100644 index 0000000000000000000000000000000000000000..2cee1c363625169603721bbef4bd00d06cb97c3a GIT binary patch literal 20653 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 List[str]: - return [clip_text(category) for category in self.categories] +# def get_categories(self) -> List[str]: +# return [clip_text(category) for category in self.categories] class GraphTypeEnum(Enum): pie = "pie" bar = "bar" - scatter = "scatter" - bubble = "bubble" line = "line" - table = "table" class GraphModel(BaseModel): - id: Optional[str] = None style: Optional[dict] = {} name: str type: GraphTypeEnum - presentation: Optional[str] = None unit: Optional[str] = Field( - default="Unit of the data in the graph. Example: %, kg, million USD, tonnes, etc." - ) - data: ( - PieChartDataModel - | LineChartDataModel - | BubbleChartDataModel - | BarGraphDataModel - | TableDataModel + description="Unit of the data in the graph. Example: %, kg, million USD, tonnes, etc." ) + data: PieChartDataModel | LineChartDataModel | BarGraphDataModel GRAPH_TYPE_MAPPING = { GraphTypeEnum.pie: PieChartDataModel, GraphTypeEnum.bar: BarGraphDataModel, GraphTypeEnum.line: LineChartDataModel, - GraphTypeEnum.bubble: BubbleChartDataModel, } diff --git a/servers/fastapi/image_processor/icons_finder.py b/servers/fastapi/image_processor/icons_finder.py index 0f64e069..c08d8fdb 100644 --- a/servers/fastapi/image_processor/icons_finder.py +++ b/servers/fastapi/image_processor/icons_finder.py @@ -1,6 +1,6 @@ from typing import List, Optional -from api.utils import get_resource +from api.utils.utils import get_resource from ppt_generator.models.query_and_prompt_models import ( IconCategoryEnum, IconQueryCollectionWithData, @@ -13,7 +13,7 @@ async def get_icon( input: IconQueryCollectionWithData, ) -> str: try: - query = input.icon_query.queries[0] + query = input.icon_query results = vector_store.similarity_search(query=query, k=1) icon_name = results[0].page_content return get_resource(f"assets/icons/bold/{icon_name}.png") diff --git a/servers/fastapi/image_processor/icons_vectorstore_utils.py b/servers/fastapi/image_processor/icons_vectorstore_utils.py index bfeb8a2f..6315d752 100644 --- a/servers/fastapi/image_processor/icons_vectorstore_utils.py +++ b/servers/fastapi/image_processor/icons_vectorstore_utils.py @@ -3,7 +3,7 @@ import os from langchain_core.vectorstores import InMemoryVectorStore from langchain_core.documents import Document -from api.utils import get_resource +from api.utils.utils import get_resource from langchain_community.embeddings.fastembed import FastEmbedEmbeddings # Pyinstaller diff --git a/servers/fastapi/image_processor/images_finder.py b/servers/fastapi/image_processor/images_finder.py index 93c0f924..9c7dfd12 100644 --- a/servers/fastapi/image_processor/images_finder.py +++ b/servers/fastapi/image_processor/images_finder.py @@ -9,21 +9,31 @@ from openai import OpenAI from ppt_generator.models.query_and_prompt_models import ( ImagePromptWithThemeAndAspectRatio, ) -from api.utils import get_resource +from api.utils.utils import download_file, get_resource, is_ollama_selected async def generate_image( input: ImagePromptWithThemeAndAspectRatio, output_directory: str, ) -> str: - image_prompt = f"{input.image_prompt}, {input.theme_prompt}" + is_ollama = is_ollama_selected() + + image_prompt = ( + input.image_prompt + if is_ollama + else f"{input.image_prompt}, {input.theme_prompt}" + ) print(f"Request - Generating Image for {image_prompt}") try: image_gen_func = ( - generate_image_openai - if os.getenv("LLM") == "openai" - else generate_image_google + get_image_from_pexels + if is_ollama + else ( + generate_image_openai + if os.getenv("LLM") == "openai" + else generate_image_google + ) ) image_path = await image_gen_func(image_prompt, output_directory) if image_path and os.path.exists(image_path): @@ -72,3 +82,16 @@ async def generate_image_google(prompt: str, output_directory: str) -> str: f.write(base64.b64decode(base64_image)) return image_path + + +async def get_image_from_pexels(prompt: str, output_directory: str) -> str: + async with aiohttp.ClientSession() as session: + response = await session.get( + f"https://api.pexels.com/v1/search?query={prompt}&per_page=1", + headers={"Authorization": f'{os.getenv("PEXELS_API_KEY")}'}, + ) + data = await response.json() + image_url = data["photos"][0]["src"]["large"] + image_path = os.path.join(output_directory, f"{str(uuid.uuid4())}.jpg") + await download_file(image_url, image_path) + return image_path diff --git a/servers/fastapi/image_processor/utils.py b/servers/fastapi/image_processor/utils.py index 7a9a04f2..f73ebecd 100644 --- a/servers/fastapi/image_processor/utils.py +++ b/servers/fastapi/image_processor/utils.py @@ -1,11 +1,11 @@ import asyncio import os -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE import pdfplumber def get_page_images_from_pdf(document_path: str, temp_dir: str): - images_temp_dir = temp_file_service.create_dir_in_dir(temp_dir) + images_temp_dir = TEMP_FILE_SERVICE.create_dir_in_dir(temp_dir) with pdfplumber.open(document_path) as pdf: for page in pdf.pages: diff --git a/servers/fastapi/poetry.lock b/servers/fastapi/poetry.lock deleted file mode 100644 index e76c42f1..00000000 --- a/servers/fastapi/poetry.lock +++ /dev/null @@ -1,4037 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. - -[[package]] -name = "aiohappyeyeballs" -version = "2.6.1" -description = "Happy Eyeballs for asyncio" -optional = false -python-versions = ">=3.9" -files = [ - {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, - {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, -] - -[[package]] -name = "aiohttp" -version = "3.11.18" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.9" -files = [ - {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96264854fedbea933a9ca4b7e0c745728f01380691687b7365d18d9e977179c4"}, - {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9602044ff047043430452bc3a2089743fa85da829e6fc9ee0025351d66c332b6"}, - {file = "aiohttp-3.11.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5691dc38750fcb96a33ceef89642f139aa315c8a193bbd42a0c33476fd4a1609"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554c918ec43f8480b47a5ca758e10e793bd7410b83701676a4782672d670da55"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a4076a2b3ba5b004b8cffca6afe18a3b2c5c9ef679b4d1e9859cf76295f8d4f"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:767a97e6900edd11c762be96d82d13a1d7c4fc4b329f054e88b57cdc21fded94"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0ddc9337a0fb0e727785ad4f41163cc314376e82b31846d3835673786420ef1"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f414f37b244f2a97e79b98d48c5ff0789a0b4b4609b17d64fa81771ad780e415"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fdb239f47328581e2ec7744ab5911f97afb10752332a6dd3d98e14e429e1a9e7"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f2c50bad73ed629cc326cc0f75aed8ecfb013f88c5af116f33df556ed47143eb"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a8d8f20c39d3fa84d1c28cdb97f3111387e48209e224408e75f29c6f8e0861d"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:106032eaf9e62fd6bc6578c8b9e6dc4f5ed9a5c1c7fb2231010a1b4304393421"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:b491e42183e8fcc9901d8dcd8ae644ff785590f1727f76ca86e731c61bfe6643"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad8c745ff9460a16b710e58e06a9dec11ebc0d8f4dd82091cefb579844d69868"}, - {file = "aiohttp-3.11.18-cp310-cp310-win32.whl", hash = "sha256:8e57da93e24303a883146510a434f0faf2f1e7e659f3041abc4e3fb3f6702a9f"}, - {file = "aiohttp-3.11.18-cp310-cp310-win_amd64.whl", hash = "sha256:cc93a4121d87d9f12739fc8fab0a95f78444e571ed63e40bfc78cd5abe700ac9"}, - {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:427fdc56ccb6901ff8088544bde47084845ea81591deb16f957897f0f0ba1be9"}, - {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c828b6d23b984255b85b9b04a5b963a74278b7356a7de84fda5e3b76866597b"}, - {file = "aiohttp-3.11.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c2eaa145bb36b33af1ff2860820ba0589e165be4ab63a49aebfd0981c173b66"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d518ce32179f7e2096bf4e3e8438cf445f05fedd597f252de9f54c728574756"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0700055a6e05c2f4711011a44364020d7a10fbbcd02fbf3e30e8f7e7fddc8717"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bd1cde83e4684324e6ee19adfc25fd649d04078179890be7b29f76b501de8e4"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73b8870fe1c9a201b8c0d12c94fe781b918664766728783241a79e0468427e4f"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25557982dd36b9e32c0a3357f30804e80790ec2c4d20ac6bcc598533e04c6361"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e889c9df381a2433802991288a61e5a19ceb4f61bd14f5c9fa165655dcb1fd1"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9ea345fda05bae217b6cce2acf3682ce3b13d0d16dd47d0de7080e5e21362421"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9f26545b9940c4b46f0a9388fd04ee3ad7064c4017b5a334dd450f616396590e"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3a621d85e85dccabd700294494d7179ed1590b6d07a35709bb9bd608c7f5dd1d"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9c23fd8d08eb9c2af3faeedc8c56e134acdaf36e2117ee059d7defa655130e5f"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9e6b0e519067caa4fd7fb72e3e8002d16a68e84e62e7291092a5433763dc0dd"}, - {file = "aiohttp-3.11.18-cp311-cp311-win32.whl", hash = "sha256:122f3e739f6607e5e4c6a2f8562a6f476192a682a52bda8b4c6d4254e1138f4d"}, - {file = "aiohttp-3.11.18-cp311-cp311-win_amd64.whl", hash = "sha256:e6f3c0a3a1e73e88af384b2e8a0b9f4fb73245afd47589df2afcab6b638fa0e6"}, - {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:63d71eceb9cad35d47d71f78edac41fcd01ff10cacaa64e473d1aec13fa02df2"}, - {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d1929da615840969929e8878d7951b31afe0bac883d84418f92e5755d7b49508"}, - {file = "aiohttp-3.11.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d0aebeb2392f19b184e3fdd9e651b0e39cd0f195cdb93328bd124a1d455cd0e"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3849ead845e8444f7331c284132ab314b4dac43bfae1e3cf350906d4fff4620f"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e8452ad6b2863709f8b3d615955aa0807bc093c34b8e25b3b52097fe421cb7f"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b8d2b42073611c860a37f718b3d61ae8b4c2b124b2e776e2c10619d920350ec"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fbf91f6a0ac317c0a07eb328a1384941872f6761f2e6f7208b63c4cc0a7ff6"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ff5625413fec55216da5eaa011cf6b0a2ed67a565914a212a51aa3755b0009"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7f33a92a2fde08e8c6b0c61815521324fc1612f397abf96eed86b8e31618fdb4"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:11d5391946605f445ddafda5eab11caf310f90cdda1fd99865564e3164f5cff9"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3cc314245deb311364884e44242e00c18b5896e4fe6d5f942e7ad7e4cb640adb"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f421843b0f70740772228b9e8093289924359d306530bcd3926f39acbe1adda"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e220e7562467dc8d589e31c1acd13438d82c03d7f385c9cd41a3f6d1d15807c1"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab2ef72f8605046115bc9aa8e9d14fd49086d405855f40b79ed9e5c1f9f4faea"}, - {file = "aiohttp-3.11.18-cp312-cp312-win32.whl", hash = "sha256:12a62691eb5aac58d65200c7ae94d73e8a65c331c3a86a2e9670927e94339ee8"}, - {file = "aiohttp-3.11.18-cp312-cp312-win_amd64.whl", hash = "sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8"}, - {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811"}, - {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804"}, - {file = "aiohttp-3.11.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7"}, - {file = "aiohttp-3.11.18-cp313-cp313-win32.whl", hash = "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78"}, - {file = "aiohttp-3.11.18-cp313-cp313-win_amd64.whl", hash = "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01"}, - {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:469ac32375d9a716da49817cd26f1916ec787fc82b151c1c832f58420e6d3533"}, - {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3cec21dd68924179258ae14af9f5418c1ebdbba60b98c667815891293902e5e0"}, - {file = "aiohttp-3.11.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b426495fb9140e75719b3ae70a5e8dd3a79def0ae3c6c27e012fc59f16544a4a"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad2f41203e2808616292db5d7170cccf0c9f9c982d02544443c7eb0296e8b0c7"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc0ae0a5e9939e423e065a3e5b00b24b8379f1db46046d7ab71753dfc7dd0e1"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe7cdd3f7d1df43200e1c80f1aed86bb36033bf65e3c7cf46a2b97a253ef8798"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5199be2a2f01ffdfa8c3a6f5981205242986b9e63eb8ae03fd18f736e4840721"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ccec9e72660b10f8e283e91aa0295975c7bd85c204011d9f5eb69310555cf30"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1596ebf17e42e293cbacc7a24c3e0dc0f8f755b40aff0402cb74c1ff6baec1d3"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eab7b040a8a873020113ba814b7db7fa935235e4cbaf8f3da17671baa1024863"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5d61df4a05476ff891cff0030329fee4088d40e4dc9b013fac01bc3c745542c2"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:46533e6792e1410f9801d09fd40cbbff3f3518d1b501d6c3c5b218f427f6ff08"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c1b90407ced992331dd6d4f1355819ea1c274cc1ee4d5b7046c6761f9ec11829"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a2fd04ae4971b914e54fe459dd7edbbd3f2ba875d69e057d5e3c8e8cac094935"}, - {file = "aiohttp-3.11.18-cp39-cp39-win32.whl", hash = "sha256:b2f317d1678002eee6fe85670039fb34a757972284614638f82b903a03feacdc"}, - {file = "aiohttp-3.11.18-cp39-cp39-win_amd64.whl", hash = "sha256:5e7007b8d1d09bce37b54111f593d173691c530b80f27c6493b928dabed9e6ef"}, - {file = "aiohttp-3.11.18.tar.gz", hash = "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a"}, -] - -[package.dependencies] -aiohappyeyeballs = ">=2.3.0" -aiosignal = ">=1.1.2" -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -propcache = ">=0.2.0" -yarl = ">=1.17.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] - -[[package]] -name = "aiosignal" -version = "1.3.2" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.9" -files = [ - {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, - {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" - -[[package]] -name = "annotated-types" -version = "0.7.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, -] - -[[package]] -name = "anyio" -version = "4.9.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.9" -files = [ - {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, - {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, -] - -[package.dependencies] -idna = ">=2.8" -sniffio = ">=1.1" -typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} - -[package.extras] -doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] -trio = ["trio (>=0.26.1)"] - -[[package]] -name = "attrs" -version = "25.3.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.8" -files = [ - {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, - {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, -] - -[package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] - -[[package]] -name = "cachetools" -version = "5.5.2" -description = "Extensible memoizing collections and decorators" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, - {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, -] - -[[package]] -name = "certifi" -version = "2025.4.26" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, - {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, -] - -[[package]] -name = "cffi" -version = "1.17.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, - {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, - {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, - {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, - {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, - {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, - {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, - {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, - {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, - {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, - {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, - {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, - {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, - {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, - {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, - {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "charset-normalizer" -version = "3.4.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -files = [ - {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"}, - {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"}, - {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, - {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, - {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"}, - {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"}, - {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"}, - {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"}, - {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, - {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, -] - -[[package]] -name = "click" -version = "8.1.8" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, -] - -[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 = "cryptography" -version = "44.0.3" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = "!=3.9.0,!=3.9.1,>=3.7" -files = [ - {file = "cryptography-44.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:962bc30480a08d133e631e8dfd4783ab71cc9e33d5d7c1e192f0b7c06397bb88"}, - {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffc61e8f3bf5b60346d89cd3d37231019c17a081208dfbbd6e1605ba03fa137"}, - {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58968d331425a6f9eedcee087f77fd3c927c88f55368f43ff7e0a19891f2642c"}, - {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e28d62e59a4dbd1d22e747f57d4f00c459af22181f0b2f787ea83f5a876d7c76"}, - {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af653022a0c25ef2e3ffb2c673a50e5a0d02fecc41608f4954176f1933b12359"}, - {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:157f1f3b8d941c2bd8f3ffee0af9b049c9665c39d3da9db2dc338feca5e98a43"}, - {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:c6cd67722619e4d55fdb42ead64ed8843d64638e9c07f4011163e46bc512cf01"}, - {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b424563394c369a804ecbee9b06dfb34997f19d00b3518e39f83a5642618397d"}, - {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c91fc8e8fd78af553f98bc7f2a1d8db977334e4eea302a4bfd75b9461c2d8904"}, - {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:25cd194c39fa5a0aa4169125ee27d1172097857b27109a45fadc59653ec06f44"}, - {file = "cryptography-44.0.3-cp37-abi3-win32.whl", hash = "sha256:3be3f649d91cb182c3a6bd336de8b61a0a71965bd13d1a04a0e15b39c3d5809d"}, - {file = "cryptography-44.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:3883076d5c4cc56dbef0b898a74eb6992fdac29a7b9013870b34efe4ddb39a0d"}, - {file = "cryptography-44.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:5639c2b16764c6f76eedf722dbad9a0914960d3489c0cc38694ddf9464f1bb2f"}, - {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ffef566ac88f75967d7abd852ed5f182da252d23fac11b4766da3957766759"}, - {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:192ed30fac1728f7587c6f4613c29c584abdc565d7417c13904708db10206645"}, - {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7d5fe7195c27c32a64955740b949070f21cba664604291c298518d2e255931d2"}, - {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3f07943aa4d7dad689e3bb1638ddc4944cc5e0921e3c227486daae0e31a05e54"}, - {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb90f60e03d563ca2445099edf605c16ed1d5b15182d21831f58460c48bffb93"}, - {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ab0b005721cc0039e885ac3503825661bd9810b15d4f374e473f8c89b7d5460c"}, - {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3bb0847e6363c037df8f6ede57d88eaf3410ca2267fb12275370a76f85786a6f"}, - {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0cc66c74c797e1db750aaa842ad5b8b78e14805a9b5d1348dc603612d3e3ff5"}, - {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6866df152b581f9429020320e5eb9794c8780e90f7ccb021940d7f50ee00ae0b"}, - {file = "cryptography-44.0.3-cp39-abi3-win32.whl", hash = "sha256:c138abae3a12a94c75c10499f1cbae81294a6f983b3af066390adee73f433028"}, - {file = "cryptography-44.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:5d186f32e52e66994dce4f766884bcb9c68b8da62d61d9d215bfe5fb56d21334"}, - {file = "cryptography-44.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cad399780053fb383dc067475135e41c9fe7d901a97dd5d9c5dfb5611afc0d7d"}, - {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:21a83f6f35b9cc656d71b5de8d519f566df01e660ac2578805ab245ffd8523f8"}, - {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fc3c9babc1e1faefd62704bb46a69f359a9819eb0292e40df3fb6e3574715cd4"}, - {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:e909df4053064a97f1e6565153ff8bb389af12c5c8d29c343308760890560aff"}, - {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:dad80b45c22e05b259e33ddd458e9e2ba099c86ccf4e88db7bbab4b747b18d06"}, - {file = "cryptography-44.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:479d92908277bed6e1a1c69b277734a7771c2b78633c224445b5c60a9f4bc1d9"}, - {file = "cryptography-44.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:896530bc9107b226f265effa7ef3f21270f18a2026bc09fed1ebd7b66ddf6375"}, - {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9b4d4a5dbee05a2c390bf212e78b99434efec37b17a4bff42f50285c5c8c9647"}, - {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02f55fb4f8b79c1221b0961488eaae21015b69b210e18c386b69de182ebb1259"}, - {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dd3db61b8fe5be220eee484a17233287d0be6932d056cf5738225b9c05ef4fff"}, - {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:978631ec51a6bbc0b7e58f23b68a8ce9e5f09721940933e9c217068388789fe5"}, - {file = "cryptography-44.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5d20cc348cca3a8aa7312f42ab953a56e15323800ca3ab0706b8cd452a3a056c"}, - {file = "cryptography-44.0.3.tar.gz", hash = "sha256:fe19d8bc5536a91a24a8133328880a41831b6c5df54599a8417b62fe015d3053"}, -] - -[package.dependencies] -cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0)"] -docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] -nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2)"] -pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] -sdist = ["build (>=1.0.0)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi (>=2024)", "cryptography-vectors (==44.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] -test-randomorder = ["pytest-randomly"] - -[[package]] -name = "dataclasses-json" -version = "0.6.7" -description = "Easily serialize dataclasses to and from JSON." -optional = false -python-versions = "<4.0,>=3.7" -files = [ - {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, - {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, -] - -[package.dependencies] -marshmallow = ">=3.18.0,<4.0.0" -typing-inspect = ">=0.4.0,<1" - -[[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 = "dnspython" -version = "2.7.0" -description = "DNS toolkit" -optional = false -python-versions = ">=3.9" -files = [ - {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, - {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, -] - -[package.extras] -dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] -dnssec = ["cryptography (>=43)"] -doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] -doq = ["aioquic (>=1.0.0)"] -idna = ["idna (>=3.7)"] -trio = ["trio (>=0.23)"] -wmi = ["wmi (>=1.5.1)"] - -[[package]] -name = "email-validator" -version = "2.2.0" -description = "A robust email address syntax and deliverability validation library." -optional = false -python-versions = ">=3.8" -files = [ - {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, - {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, -] - -[package.dependencies] -dnspython = ">=2.0.0" -idna = ">=2.0.0" - -[[package]] -name = "fastapi" -version = "0.115.12" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"}, - {file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"}, -] - -[package.dependencies] -email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"standard\""} -fastapi-cli = {version = ">=0.0.5", extras = ["standard"], optional = true, markers = "extra == \"standard\""} -httpx = {version = ">=0.23.0", optional = true, markers = "extra == \"standard\""} -jinja2 = {version = ">=3.1.5", optional = true, markers = "extra == \"standard\""} -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" -python-multipart = {version = ">=0.0.18", optional = true, markers = "extra == \"standard\""} -starlette = ">=0.40.0,<0.47.0" -typing-extensions = ">=4.8.0" -uvicorn = {version = ">=0.12.0", extras = ["standard"], optional = true, markers = "extra == \"standard\""} - -[package.extras] -all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "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)"] -standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] - -[[package]] -name = "fastapi-cli" -version = "0.0.7" -description = "Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fastapi_cli-0.0.7-py3-none-any.whl", hash = "sha256:d549368ff584b2804336c61f192d86ddea080c11255f375959627911944804f4"}, - {file = "fastapi_cli-0.0.7.tar.gz", hash = "sha256:02b3b65956f526412515907a0793c9094abd4bfb5457b389f645b0ea6ba3605e"}, -] - -[package.dependencies] -rich-toolkit = ">=0.11.1" -typer = ">=0.12.3" -uvicorn = {version = ">=0.15.0", extras = ["standard"]} - -[package.extras] -standard = ["uvicorn[standard] (>=0.15.0)"] - -[[package]] -name = "fastembed" -version = "0.6.1" -description = "Fast, light, accurate library built for retrieval embedding generation" -optional = false -python-versions = ">=3.9.0" -files = [ - {file = "fastembed-0.6.1-py3-none-any.whl", hash = "sha256:89bfe07d3e12ae84474f0c85a6416ffbded25c72af43ac7ebf39acf309046044"}, - {file = "fastembed-0.6.1.tar.gz", hash = "sha256:9c69ce389700eaa267eb9f488ecced94273d973be3fa933e6a9f807df3da5d96"}, -] - -[package.dependencies] -huggingface-hub = ">=0.20,<1.0" -loguru = ">=0.7.2,<0.8.0" -mmh3 = ">=4.1.0,<6.0.0" -numpy = [ - {version = ">=1.21", markers = "python_version >= \"3.10\" and python_version < \"3.12\""}, - {version = ">=1.26", markers = "python_version == \"3.12\""}, - {version = ">=2.1.0", markers = "python_version >= \"3.13\""}, -] -onnxruntime = [ - {version = ">=1.17.0,<1.20.0 || >1.20.0", markers = "python_version >= \"3.10\" and python_version < \"3.13\""}, - {version = ">1.20.0", markers = "python_version >= \"3.13\""}, -] -pillow = ">=10.3.0,<12.0.0" -py-rust-stemmers = ">=0.1.0,<0.2.0" -requests = ">=2.31,<3.0" -tokenizers = ">=0.15,<1.0" -tqdm = ">=4.66,<5.0" - -[[package]] -name = "filelock" -version = "3.18.0" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.9" -files = [ - {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, - {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, -] - -[package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] -typing = ["typing-extensions (>=4.12.2)"] - -[[package]] -name = "filetype" -version = "1.2.0" -description = "Infer file type and MIME type of any file/buffer. No external dependencies." -optional = false -python-versions = "*" -files = [ - {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, - {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, -] - -[[package]] -name = "flatbuffers" -version = "25.2.10" -description = "The FlatBuffers serialization format for Python" -optional = false -python-versions = "*" -files = [ - {file = "flatbuffers-25.2.10-py2.py3-none-any.whl", hash = "sha256:ebba5f4d5ea615af3f7fd70fc310636fbb2bbd1f566ac0a23d98dd412de50051"}, - {file = "flatbuffers-25.2.10.tar.gz", hash = "sha256:97e451377a41262f8d9bd4295cc836133415cc03d8cb966410a4af92eb00d26e"}, -] - -[[package]] -name = "frozenlist" -version = "1.6.0" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.9" -files = [ - {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e"}, - {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352"}, - {file = "frozenlist-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3"}, - {file = "frozenlist-1.6.0-cp310-cp310-win32.whl", hash = "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812"}, - {file = "frozenlist-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1"}, - {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d"}, - {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0"}, - {file = "frozenlist-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e"}, - {file = "frozenlist-1.6.0-cp311-cp311-win32.whl", hash = "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860"}, - {file = "frozenlist-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603"}, - {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1"}, - {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29"}, - {file = "frozenlist-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770"}, - {file = "frozenlist-1.6.0-cp312-cp312-win32.whl", hash = "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc"}, - {file = "frozenlist-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878"}, - {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e"}, - {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117"}, - {file = "frozenlist-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e"}, - {file = "frozenlist-1.6.0-cp313-cp313-win32.whl", hash = "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4"}, - {file = "frozenlist-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd"}, - {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64"}, - {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91"}, - {file = "frozenlist-1.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497"}, - {file = "frozenlist-1.6.0-cp313-cp313t-win32.whl", hash = "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f"}, - {file = "frozenlist-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348"}, - {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0"}, - {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70"}, - {file = "frozenlist-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c"}, - {file = "frozenlist-1.6.0-cp39-cp39-win32.whl", hash = "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530"}, - {file = "frozenlist-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572"}, - {file = "frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191"}, - {file = "frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68"}, -] - -[[package]] -name = "fsspec" -version = "2025.3.2" -description = "File-system specification" -optional = false -python-versions = ">=3.9" -files = [ - {file = "fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711"}, - {file = "fsspec-2025.3.2.tar.gz", hash = "sha256:e52c77ef398680bbd6a98c0e628fbc469491282981209907bbc8aea76a04fdc6"}, -] - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -dev = ["pre-commit", "ruff"] -doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] -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"] -test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] -test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] -test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] -tqdm = ["tqdm"] - -[[package]] -name = "google-ai-generativelanguage" -version = "0.6.18" -description = "Google Ai Generativelanguage API client library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "google_ai_generativelanguage-0.6.18-py3-none-any.whl", hash = "sha256:13d8174fea90b633f520789d32df7b422058fd5883b022989c349f1017db7fcf"}, - {file = "google_ai_generativelanguage-0.6.18.tar.gz", hash = "sha256:274ba9fcf69466ff64e971d565884434388e523300afd468fc8e3033cd8e606e"}, -] - -[package.dependencies] -google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0", extras = ["grpc"]} -google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0" -proto-plus = [ - {version = ">=1.22.3,<2.0.0", markers = "python_version < \"3.13\""}, - {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, -] -protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" - -[[package]] -name = "google-api-core" -version = "2.24.2" -description = "Google API client core library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "google_api_core-2.24.2-py3-none-any.whl", hash = "sha256:810a63ac95f3c441b7c0e43d344e372887f62ce9071ba972eacf32672e072de9"}, - {file = "google_api_core-2.24.2.tar.gz", hash = "sha256:81718493daf06d96d6bc76a91c23874dbf2fac0adbbf542831b805ee6e974696"}, -] - -[package.dependencies] -google-auth = ">=2.14.1,<3.0.0" -googleapis-common-protos = ">=1.56.2,<2.0.0" -grpcio = {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} -grpcio-status = {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} -proto-plus = [ - {version = ">=1.22.3,<2.0.0", markers = "python_version < \"3.13\""}, - {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, -] -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" -requests = ">=2.18.0,<3.0.0" - -[package.extras] -async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.dev0)"] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] - -[[package]] -name = "google-auth" -version = "2.40.1" -description = "Google Authentication Library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "google_auth-2.40.1-py2.py3-none-any.whl", hash = "sha256:ed4cae4f5c46b41bae1d19c036e06f6c371926e97b19e816fc854eff811974ee"}, - {file = "google_auth-2.40.1.tar.gz", hash = "sha256:58f0e8416a9814c1d86c9b7f6acf6816b51aba167b2c76821965271bac275540"}, -] - -[package.dependencies] -cachetools = ">=2.0.0,<6.0" -pyasn1-modules = ">=0.2.1" -rsa = ">=3.1.4,<5" - -[package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0)", "requests (>=2.20.0,<3.0.0)"] -enterprise-cert = ["cryptography", "pyopenssl"] -pyjwt = ["cryptography (<39.0.0)", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] -pyopenssl = ["cryptography (<39.0.0)", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] -reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0)"] -testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0)", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] -urllib3 = ["packaging", "urllib3"] - -[[package]] -name = "googleapis-common-protos" -version = "1.70.0" -description = "Common protobufs used in Google APIs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "googleapis_common_protos-1.70.0-py3-none-any.whl", hash = "sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8"}, - {file = "googleapis_common_protos-1.70.0.tar.gz", hash = "sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257"}, -] - -[package.dependencies] -protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" - -[package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0)"] - -[[package]] -name = "greenlet" -version = "3.2.2" -description = "Lightweight in-process concurrent programming" -optional = false -python-versions = ">=3.9" -files = [ - {file = "greenlet-3.2.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:c49e9f7c6f625507ed83a7485366b46cbe325717c60837f7244fc99ba16ba9d6"}, - {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3cc1a3ed00ecfea8932477f729a9f616ad7347a5e55d50929efa50a86cb7be7"}, - {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c9896249fbef2c615853b890ee854f22c671560226c9221cfd27c995db97e5c"}, - {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7409796591d879425997a518138889d8d17e63ada7c99edc0d7a1c22007d4907"}, - {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7791dcb496ec53d60c7f1c78eaa156c21f402dda38542a00afc3e20cae0f480f"}, - {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8009ae46259e31bc73dc183e402f548e980c96f33a6ef58cc2e7865db012e13"}, - {file = "greenlet-3.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fd9fb7c941280e2c837b603850efc93c999ae58aae2b40765ed682a6907ebbc5"}, - {file = "greenlet-3.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:00cd814b8959b95a546e47e8d589610534cfb71f19802ea8a2ad99d95d702057"}, - {file = "greenlet-3.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:d0cb7d47199001de7658c213419358aa8937df767936506db0db7ce1a71f4a2f"}, - {file = "greenlet-3.2.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:dcb9cebbf3f62cb1e5afacae90761ccce0effb3adaa32339a0670fe7805d8068"}, - {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf3fc9145141250907730886b031681dfcc0de1c158f3cc51c092223c0f381ce"}, - {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efcdfb9df109e8a3b475c016f60438fcd4be68cd13a365d42b35914cdab4bb2b"}, - {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd139e4943547ce3a56ef4b8b1b9479f9e40bb47e72cc906f0f66b9d0d5cab3"}, - {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71566302219b17ca354eb274dfd29b8da3c268e41b646f330e324e3967546a74"}, - {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3091bc45e6b0c73f225374fefa1536cd91b1e987377b12ef5b19129b07d93ebe"}, - {file = "greenlet-3.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:44671c29da26539a5f142257eaba5110f71887c24d40df3ac87f1117df589e0e"}, - {file = "greenlet-3.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c23ea227847c9dbe0b3910f5c0dd95658b607137614eb821e6cbaecd60d81cc6"}, - {file = "greenlet-3.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:0a16fb934fcabfdfacf21d79e6fed81809d8cd97bc1be9d9c89f0e4567143d7b"}, - {file = "greenlet-3.2.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:df4d1509efd4977e6a844ac96d8be0b9e5aa5d5c77aa27ca9f4d3f92d3fcf330"}, - {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da956d534a6d1b9841f95ad0f18ace637668f680b1339ca4dcfb2c1837880a0b"}, - {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c7b15fb9b88d9ee07e076f5a683027bc3befd5bb5d25954bb633c385d8b737e"}, - {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:752f0e79785e11180ebd2e726c8a88109ded3e2301d40abced2543aa5d164275"}, - {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ae572c996ae4b5e122331e12bbb971ea49c08cc7c232d1bd43150800a2d6c65"}, - {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02f5972ff02c9cf615357c17ab713737cccfd0eaf69b951084a9fd43f39833d3"}, - {file = "greenlet-3.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4fefc7aa68b34b9224490dfda2e70ccf2131368493add64b4ef2d372955c207e"}, - {file = "greenlet-3.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a31ead8411a027c2c4759113cf2bd473690517494f3d6e4bf67064589afcd3c5"}, - {file = "greenlet-3.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:b24c7844c0a0afc3ccbeb0b807adeefb7eff2b5599229ecedddcfeb0ef333bec"}, - {file = "greenlet-3.2.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:3ab7194ee290302ca15449f601036007873028712e92ca15fc76597a0aeb4c59"}, - {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc5c43bb65ec3669452af0ab10729e8fdc17f87a1f2ad7ec65d4aaaefabf6bf"}, - {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:decb0658ec19e5c1f519faa9a160c0fc85a41a7e6654b3ce1b44b939f8bf1325"}, - {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fadd183186db360b61cb34e81117a096bff91c072929cd1b529eb20dd46e6c5"}, - {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1919cbdc1c53ef739c94cf2985056bcc0838c1f217b57647cbf4578576c63825"}, - {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3885f85b61798f4192d544aac7b25a04ece5fe2704670b4ab73c2d2c14ab740d"}, - {file = "greenlet-3.2.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:85f3e248507125bf4af607a26fd6cb8578776197bd4b66e35229cdf5acf1dfbf"}, - {file = "greenlet-3.2.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1e76106b6fc55fa3d6fe1c527f95ee65e324a13b62e243f77b48317346559708"}, - {file = "greenlet-3.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:fe46d4f8e94e637634d54477b0cfabcf93c53f29eedcbdeecaf2af32029b4421"}, - {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba30e88607fb6990544d84caf3c706c4b48f629e18853fc6a646f82db9629418"}, - {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:055916fafad3e3388d27dd68517478933a97edc2fc54ae79d3bec827de2c64c4"}, - {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2593283bf81ca37d27d110956b79e8723f9aa50c4bcdc29d3c0543d4743d2763"}, - {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89c69e9a10670eb7a66b8cef6354c24671ba241f46152dd3eed447f79c29fb5b"}, - {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02a98600899ca1ca5d3a2590974c9e3ec259503b2d6ba6527605fcd74e08e207"}, - {file = "greenlet-3.2.2-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b50a8c5c162469c3209e5ec92ee4f95c8231b11db6a04db09bbe338176723bb8"}, - {file = "greenlet-3.2.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:45f9f4853fb4cc46783085261c9ec4706628f3b57de3e68bae03e8f8b3c0de51"}, - {file = "greenlet-3.2.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:9ea5231428af34226c05f927e16fc7f6fa5e39e3ad3cd24ffa48ba53a47f4240"}, - {file = "greenlet-3.2.2-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:1e4747712c4365ef6765708f948acc9c10350719ca0545e362c24ab973017370"}, - {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782743700ab75716650b5238a4759f840bb2dcf7bff56917e9ffdf9f1f23ec59"}, - {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:354f67445f5bed6604e493a06a9a49ad65675d3d03477d38a4db4a427e9aad0e"}, - {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3aeca9848d08ce5eb653cf16e15bb25beeab36e53eb71cc32569f5f3afb2a3aa"}, - {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cb8553ee954536500d88a1a2f58fcb867e45125e600e80f586ade399b3f8819"}, - {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1592a615b598643dbfd566bac8467f06c8c8ab6e56f069e573832ed1d5d528cc"}, - {file = "greenlet-3.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1f72667cc341c95184f1c68f957cb2d4fc31eef81646e8e59358a10ce6689457"}, - {file = "greenlet-3.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a8fa80665b1a29faf76800173ff5325095f3e66a78e62999929809907aca5659"}, - {file = "greenlet-3.2.2-cp39-cp39-win32.whl", hash = "sha256:6629311595e3fe7304039c67f00d145cd1d38cf723bb5b99cc987b23c1433d61"}, - {file = "greenlet-3.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:eeb27bece45c0c2a5842ac4c5a1b5c2ceaefe5711078eed4e8043159fa05c834"}, - {file = "greenlet-3.2.2.tar.gz", hash = "sha256:ad053d34421a2debba45aa3cc39acf454acbcd025b3fc1a9f8a0dee237abd485"}, -] - -[package.extras] -docs = ["Sphinx", "furo"] -test = ["objgraph", "psutil"] - -[[package]] -name = "grpcio" -version = "1.71.0" -description = "HTTP/2-based RPC framework" -optional = false -python-versions = ">=3.9" -files = [ - {file = "grpcio-1.71.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:c200cb6f2393468142eb50ab19613229dcc7829b5ccee8b658a36005f6669fdd"}, - {file = "grpcio-1.71.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b2266862c5ad664a380fbbcdbdb8289d71464c42a8c29053820ee78ba0119e5d"}, - {file = "grpcio-1.71.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:0ab8b2864396663a5b0b0d6d79495657ae85fa37dcb6498a2669d067c65c11ea"}, - {file = "grpcio-1.71.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c30f393f9d5ff00a71bb56de4aa75b8fe91b161aeb61d39528db6b768d7eac69"}, - {file = "grpcio-1.71.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f250ff44843d9a0615e350c77f890082102a0318d66a99540f54769c8766ab73"}, - {file = "grpcio-1.71.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6d8de076528f7c43a2f576bc311799f89d795aa6c9b637377cc2b1616473804"}, - {file = "grpcio-1.71.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9b91879d6da1605811ebc60d21ab6a7e4bae6c35f6b63a061d61eb818c8168f6"}, - {file = "grpcio-1.71.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f71574afdf944e6652203cd1badcda195b2a27d9c83e6d88dc1ce3cfb73b31a5"}, - {file = "grpcio-1.71.0-cp310-cp310-win32.whl", hash = "sha256:8997d6785e93308f277884ee6899ba63baafa0dfb4729748200fcc537858a509"}, - {file = "grpcio-1.71.0-cp310-cp310-win_amd64.whl", hash = "sha256:7d6ac9481d9d0d129224f6d5934d5832c4b1cddb96b59e7eba8416868909786a"}, - {file = "grpcio-1.71.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:d6aa986318c36508dc1d5001a3ff169a15b99b9f96ef5e98e13522c506b37eef"}, - {file = "grpcio-1.71.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:d2c170247315f2d7e5798a22358e982ad6eeb68fa20cf7a820bb74c11f0736e7"}, - {file = "grpcio-1.71.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:e6f83a583ed0a5b08c5bc7a3fe860bb3c2eac1f03f1f63e0bc2091325605d2b7"}, - {file = "grpcio-1.71.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4be74ddeeb92cc87190e0e376dbc8fc7736dbb6d3d454f2fa1f5be1dee26b9d7"}, - {file = "grpcio-1.71.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd0dfbe4d5eb1fcfec9490ca13f82b089a309dc3678e2edabc144051270a66e"}, - {file = "grpcio-1.71.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a2242d6950dc892afdf9e951ed7ff89473aaf744b7d5727ad56bdaace363722b"}, - {file = "grpcio-1.71.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0fa05ee31a20456b13ae49ad2e5d585265f71dd19fbd9ef983c28f926d45d0a7"}, - {file = "grpcio-1.71.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3d081e859fb1ebe176de33fc3adb26c7d46b8812f906042705346b314bde32c3"}, - {file = "grpcio-1.71.0-cp311-cp311-win32.whl", hash = "sha256:d6de81c9c00c8a23047136b11794b3584cdc1460ed7cbc10eada50614baa1444"}, - {file = "grpcio-1.71.0-cp311-cp311-win_amd64.whl", hash = "sha256:24e867651fc67717b6f896d5f0cac0ec863a8b5fb7d6441c2ab428f52c651c6b"}, - {file = "grpcio-1.71.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:0ff35c8d807c1c7531d3002be03221ff9ae15712b53ab46e2a0b4bb271f38537"}, - {file = "grpcio-1.71.0-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:b78a99cd1ece4be92ab7c07765a0b038194ded2e0a26fd654591ee136088d8d7"}, - {file = "grpcio-1.71.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:dc1a1231ed23caac1de9f943d031f1bc38d0f69d2a3b243ea0d664fc1fbd7fec"}, - {file = "grpcio-1.71.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6beeea5566092c5e3c4896c6d1d307fb46b1d4bdf3e70c8340b190a69198594"}, - {file = "grpcio-1.71.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5170929109450a2c031cfe87d6716f2fae39695ad5335d9106ae88cc32dc84c"}, - {file = "grpcio-1.71.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5b08d03ace7aca7b2fadd4baf291139b4a5f058805a8327bfe9aece7253b6d67"}, - {file = "grpcio-1.71.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f903017db76bf9cc2b2d8bdd37bf04b505bbccad6be8a81e1542206875d0e9db"}, - {file = "grpcio-1.71.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:469f42a0b410883185eab4689060a20488a1a0a00f8bbb3cbc1061197b4c5a79"}, - {file = "grpcio-1.71.0-cp312-cp312-win32.whl", hash = "sha256:ad9f30838550695b5eb302add33f21f7301b882937460dd24f24b3cc5a95067a"}, - {file = "grpcio-1.71.0-cp312-cp312-win_amd64.whl", hash = "sha256:652350609332de6dac4ece254e5d7e1ff834e203d6afb769601f286886f6f3a8"}, - {file = "grpcio-1.71.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:cebc1b34ba40a312ab480ccdb396ff3c529377a2fce72c45a741f7215bfe8379"}, - {file = "grpcio-1.71.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:85da336e3649a3d2171e82f696b5cad2c6231fdd5bad52616476235681bee5b3"}, - {file = "grpcio-1.71.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:f9a412f55bb6e8f3bb000e020dbc1e709627dcb3a56f6431fa7076b4c1aab0db"}, - {file = "grpcio-1.71.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47be9584729534660416f6d2a3108aaeac1122f6b5bdbf9fd823e11fe6fbaa29"}, - {file = "grpcio-1.71.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9c80ac6091c916db81131d50926a93ab162a7e97e4428ffc186b6e80d6dda4"}, - {file = "grpcio-1.71.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:789d5e2a3a15419374b7b45cd680b1e83bbc1e52b9086e49308e2c0b5bbae6e3"}, - {file = "grpcio-1.71.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:1be857615e26a86d7363e8a163fade914595c81fec962b3d514a4b1e8760467b"}, - {file = "grpcio-1.71.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a76d39b5fafd79ed604c4be0a869ec3581a172a707e2a8d7a4858cb05a5a7637"}, - {file = "grpcio-1.71.0-cp313-cp313-win32.whl", hash = "sha256:74258dce215cb1995083daa17b379a1a5a87d275387b7ffe137f1d5131e2cfbb"}, - {file = "grpcio-1.71.0-cp313-cp313-win_amd64.whl", hash = "sha256:22c3bc8d488c039a199f7a003a38cb7635db6656fa96437a8accde8322ce2366"}, - {file = "grpcio-1.71.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:c6a0a28450c16809f94e0b5bfe52cabff63e7e4b97b44123ebf77f448534d07d"}, - {file = "grpcio-1.71.0-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:a371e6b6a5379d3692cc4ea1cb92754d2a47bdddeee755d3203d1f84ae08e03e"}, - {file = "grpcio-1.71.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:39983a9245d37394fd59de71e88c4b295eb510a3555e0a847d9965088cdbd033"}, - {file = "grpcio-1.71.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9182e0063112e55e74ee7584769ec5a0b4f18252c35787f48738627e23a62b97"}, - {file = "grpcio-1.71.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693bc706c031aeb848849b9d1c6b63ae6bcc64057984bb91a542332b75aa4c3d"}, - {file = "grpcio-1.71.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:20e8f653abd5ec606be69540f57289274c9ca503ed38388481e98fa396ed0b41"}, - {file = "grpcio-1.71.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8700a2a57771cc43ea295296330daaddc0d93c088f0a35cc969292b6db959bf3"}, - {file = "grpcio-1.71.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d35a95f05a8a2cbe8e02be137740138b3b2ea5f80bd004444e4f9a1ffc511e32"}, - {file = "grpcio-1.71.0-cp39-cp39-win32.whl", hash = "sha256:f9c30c464cb2ddfbc2ddf9400287701270fdc0f14be5f08a1e3939f1e749b455"}, - {file = "grpcio-1.71.0-cp39-cp39-win_amd64.whl", hash = "sha256:63e41b91032f298b3e973b3fa4093cbbc620c875e2da7b93e249d4728b54559a"}, - {file = "grpcio-1.71.0.tar.gz", hash = "sha256:2b85f7820475ad3edec209d3d89a7909ada16caab05d3f2e08a7e8ae3200a55c"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.71.0)"] - -[[package]] -name = "grpcio-status" -version = "1.62.3" -description = "Status proto mapping for gRPC" -optional = false -python-versions = ">=3.6" -files = [ - {file = "grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485"}, - {file = "grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8"}, -] - -[package.dependencies] -googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.62.3" -protobuf = ">=4.21.6" - -[[package]] -name = "h11" -version = "0.16.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.8" -files = [ - {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, - {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, -] - -[[package]] -name = "hf-xet" -version = "1.1.0" -description = "" -optional = false -python-versions = ">=3.8" -files = [ - {file = "hf_xet-1.1.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:0322c42551e275fcb7949c083a54a81b2898e50787c9aa74284fcb8d2c58c12c"}, - {file = "hf_xet-1.1.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:667153a0304ac2debf2af95a8ff7687186f885b493f4cd16344869af270cd110"}, - {file = "hf_xet-1.1.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:995eeffb119636ea617b96c7d7bf3c3f5ea8727fa57974574e25d700b8532d48"}, - {file = "hf_xet-1.1.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3aee847da362393331f515c4010d0aaa1c2669acfcca1f4b28946d6949cc0086"}, - {file = "hf_xet-1.1.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:68c5813a6074aa36e12ef5983230e3b03148cce61e0fcdd294096493795565b4"}, - {file = "hf_xet-1.1.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4ee9222bf9274b1c198b88a929de0b5a49349c4962d89c5b3b2f0f7f47d9761c"}, - {file = "hf_xet-1.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:73153eab9abf3d6973b21e94a67ccba5d595c3e12feb8c0bf50be02964e7f126"}, - {file = "hf_xet-1.1.0.tar.gz", hash = "sha256:a7c2a4c2b6eee9ce0a1a367a82b60d95ba634420ef1c250addad7aa4af419cf4"}, -] - -[package.extras] -tests = ["pytest"] - -[[package]] -name = "httpcore" -version = "1.0.9" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, - {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.16" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<1.0)"] - -[[package]] -name = "httptools" -version = "0.6.4" -description = "A collection of framework independent HTTP protocol utils." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0"}, - {file = "httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da"}, - {file = "httptools-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1"}, - {file = "httptools-0.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50"}, - {file = "httptools-0.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959"}, - {file = "httptools-0.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4"}, - {file = "httptools-0.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c"}, - {file = "httptools-0.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069"}, - {file = "httptools-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a"}, - {file = "httptools-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975"}, - {file = "httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636"}, - {file = "httptools-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721"}, - {file = "httptools-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988"}, - {file = "httptools-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17"}, - {file = "httptools-0.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2"}, - {file = "httptools-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44"}, - {file = "httptools-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1"}, - {file = "httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2"}, - {file = "httptools-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81"}, - {file = "httptools-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f"}, - {file = "httptools-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970"}, - {file = "httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660"}, - {file = "httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083"}, - {file = "httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3"}, - {file = "httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071"}, - {file = "httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5"}, - {file = "httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0"}, - {file = "httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8"}, - {file = "httptools-0.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba"}, - {file = "httptools-0.6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc"}, - {file = "httptools-0.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff"}, - {file = "httptools-0.6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490"}, - {file = "httptools-0.6.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43"}, - {file = "httptools-0.6.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440"}, - {file = "httptools-0.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f"}, - {file = "httptools-0.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003"}, - {file = "httptools-0.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab"}, - {file = "httptools-0.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547"}, - {file = "httptools-0.6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9"}, - {file = "httptools-0.6.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076"}, - {file = "httptools-0.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd"}, - {file = "httptools-0.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6"}, - {file = "httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c"}, -] - -[package.extras] -test = ["Cython (>=0.29.24)"] - -[[package]] -name = "httpx" -version = "0.28.1" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, - {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "httpx-sse" -version = "0.4.0" -description = "Consume Server-Sent Event (SSE) messages with HTTPX." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, - {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, -] - -[[package]] -name = "huggingface-hub" -version = "0.31.1" -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.31.1-py3-none-any.whl", hash = "sha256:43f73124819b48b42d140cbc0d7a2e6bd15b2853b1b9d728d4d55ad1750cac5b"}, - {file = "huggingface_hub-0.31.1.tar.gz", hash = "sha256:492bb5f545337aa9e2f59b75ef4c5f535a371e8958a6ce90af056387e67f1180"}, -] - -[package.dependencies] -filelock = "*" -fsspec = ">=2023.5.0" -hf-xet = {version = ">=1.1.0,<2.0.0", markers = "platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\""} -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", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.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", "fastapi", "gradio (>=4.0.0)", "jedi", "libcst (==1.4.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.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)"] -hf-xet = ["hf-xet (>=1.1.0,<2.0.0)"] -inference = ["aiohttp"] -quality = ["libcst (==1.4.0)", "mypy (==1.5.1)", "ruff (>=0.9.0)"] -tensorflow = ["graphviz", "pydot", "tensorflow"] -tensorflow-testing = ["keras (<3.0)", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio (>=4.0.0)", "jedi", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["safetensors[torch]", "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.10" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "jinja2" -version = "3.1.6" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, - {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "jiter" -version = "0.9.0" -description = "Fast iterable JSON parser." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jiter-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:816ec9b60fdfd1fec87da1d7ed46c66c44ffec37ab2ef7de5b147b2fce3fd5ad"}, - {file = "jiter-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1d3086f8a3ee0194ecf2008cf81286a5c3e540d977fa038ff23576c023c0ea"}, - {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1339f839b91ae30b37c409bf16ccd3dc453e8b8c3ed4bd1d6a567193651a4a51"}, - {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ffba79584b3b670fefae66ceb3a28822365d25b7bf811e030609a3d5b876f538"}, - {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cfc7d0a8e899089d11f065e289cb5b2daf3d82fbe028f49b20d7b809193958d"}, - {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e00a1a2bbfaaf237e13c3d1592356eab3e9015d7efd59359ac8b51eb56390a12"}, - {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1d9870561eb26b11448854dce0ff27a9a27cb616b632468cafc938de25e9e51"}, - {file = "jiter-0.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9872aeff3f21e437651df378cb75aeb7043e5297261222b6441a620218b58708"}, - {file = "jiter-0.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1fd19112d1049bdd47f17bfbb44a2c0001061312dcf0e72765bfa8abd4aa30e5"}, - {file = "jiter-0.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ef5da104664e526836070e4a23b5f68dec1cc673b60bf1edb1bfbe8a55d0678"}, - {file = "jiter-0.9.0-cp310-cp310-win32.whl", hash = "sha256:cb12e6d65ebbefe5518de819f3eda53b73187b7089040b2d17f5b39001ff31c4"}, - {file = "jiter-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:c43ca669493626d8672be3b645dbb406ef25af3f4b6384cfd306da7eb2e70322"}, - {file = "jiter-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6c4d99c71508912a7e556d631768dcdef43648a93660670986916b297f1c54af"}, - {file = "jiter-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f60fb8ce7df529812bf6c625635a19d27f30806885139e367af93f6e734ef58"}, - {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51c4e1a4f8ea84d98b7b98912aa4290ac3d1eabfde8e3c34541fae30e9d1f08b"}, - {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f4c677c424dc76684fea3e7285a7a2a7493424bea89ac441045e6a1fb1d7b3b"}, - {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2221176dfec87f3470b21e6abca056e6b04ce9bff72315cb0b243ca9e835a4b5"}, - {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c7adb66f899ffa25e3c92bfcb593391ee1947dbdd6a9a970e0d7e713237d572"}, - {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c98d27330fdfb77913c1097a7aab07f38ff2259048949f499c9901700789ac15"}, - {file = "jiter-0.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eda3f8cc74df66892b1d06b5d41a71670c22d95a1ca2cbab73654745ce9d0419"}, - {file = "jiter-0.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd5ab5ddc11418dce28343123644a100f487eaccf1de27a459ab36d6cca31043"}, - {file = "jiter-0.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42f8a68a69f047b310319ef8e2f52fdb2e7976fb3313ef27df495cf77bcad965"}, - {file = "jiter-0.9.0-cp311-cp311-win32.whl", hash = "sha256:a25519efb78a42254d59326ee417d6f5161b06f5da827d94cf521fed961b1ff2"}, - {file = "jiter-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:923b54afdd697dfd00d368b7ccad008cccfeb1efb4e621f32860c75e9f25edbd"}, - {file = "jiter-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7b46249cfd6c48da28f89eb0be3f52d6fdb40ab88e2c66804f546674e539ec11"}, - {file = "jiter-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:609cf3c78852f1189894383cf0b0b977665f54cb38788e3e6b941fa6d982c00e"}, - {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d726a3890a54561e55a9c5faea1f7655eda7f105bd165067575ace6e65f80bb2"}, - {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e89dc075c1fef8fa9be219e249f14040270dbc507df4215c324a1839522ea75"}, - {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04e8ffa3c353b1bc4134f96f167a2082494351e42888dfcf06e944f2729cbe1d"}, - {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:203f28a72a05ae0e129b3ed1f75f56bc419d5f91dfacd057519a8bd137b00c42"}, - {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca1a02ad60ec30bb230f65bc01f611c8608b02d269f998bc29cca8619a919dc"}, - {file = "jiter-0.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:237e5cee4d5d2659aaf91bbf8ec45052cc217d9446070699441a91b386ae27dc"}, - {file = "jiter-0.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:528b6b71745e7326eed73c53d4aa57e2a522242320b6f7d65b9c5af83cf49b6e"}, - {file = "jiter-0.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9f48e86b57bc711eb5acdfd12b6cb580a59cc9a993f6e7dcb6d8b50522dcd50d"}, - {file = "jiter-0.9.0-cp312-cp312-win32.whl", hash = "sha256:699edfde481e191d81f9cf6d2211debbfe4bd92f06410e7637dffb8dd5dfde06"}, - {file = "jiter-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:099500d07b43f61d8bd780466d429c45a7b25411b334c60ca875fa775f68ccb0"}, - {file = "jiter-0.9.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2764891d3f3e8b18dce2cff24949153ee30c9239da7c00f032511091ba688ff7"}, - {file = "jiter-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:387b22fbfd7a62418d5212b4638026d01723761c75c1c8232a8b8c37c2f1003b"}, - {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d8da8629ccae3606c61d9184970423655fb4e33d03330bcdfe52d234d32f69"}, - {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1be73d8982bdc278b7b9377426a4b44ceb5c7952073dd7488e4ae96b88e1103"}, - {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2228eaaaa111ec54b9e89f7481bffb3972e9059301a878d085b2b449fbbde635"}, - {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:11509bfecbc319459647d4ac3fd391d26fdf530dad00c13c4dadabf5b81f01a4"}, - {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f22238da568be8bbd8e0650e12feeb2cfea15eda4f9fc271d3b362a4fa0604d"}, - {file = "jiter-0.9.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17f5d55eb856597607562257c8e36c42bc87f16bef52ef7129b7da11afc779f3"}, - {file = "jiter-0.9.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:6a99bed9fbb02f5bed416d137944419a69aa4c423e44189bc49718859ea83bc5"}, - {file = "jiter-0.9.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e057adb0cd1bd39606100be0eafe742de2de88c79df632955b9ab53a086b3c8d"}, - {file = "jiter-0.9.0-cp313-cp313-win32.whl", hash = "sha256:f7e6850991f3940f62d387ccfa54d1a92bd4bb9f89690b53aea36b4364bcab53"}, - {file = "jiter-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:c8ae3bf27cd1ac5e6e8b7a27487bf3ab5f82318211ec2e1346a5b058756361f7"}, - {file = "jiter-0.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0b2827fb88dda2cbecbbc3e596ef08d69bda06c6f57930aec8e79505dc17001"}, - {file = "jiter-0.9.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062b756ceb1d40b0b28f326cba26cfd575a4918415b036464a52f08632731e5a"}, - {file = "jiter-0.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6f7838bc467ab7e8ef9f387bd6de195c43bad82a569c1699cb822f6609dd4cdf"}, - {file = "jiter-0.9.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4a2d16360d0642cd68236f931b85fe50288834c383492e4279d9f1792e309571"}, - {file = "jiter-0.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e84ed1c9c9ec10bbb8c37f450077cbe3c0d4e8c2b19f0a49a60ac7ace73c7452"}, - {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f3c848209ccd1bfa344a1240763975ca917de753c7875c77ec3034f4151d06c"}, - {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7825f46e50646bee937e0f849d14ef3a417910966136f59cd1eb848b8b5bb3e4"}, - {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d82a811928b26d1a6311a886b2566f68ccf2b23cf3bfed042e18686f1f22c2d7"}, - {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c058ecb51763a67f019ae423b1cbe3fa90f7ee6280c31a1baa6ccc0c0e2d06e"}, - {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9897115ad716c48f0120c1f0c4efae348ec47037319a6c63b2d7838bb53aaef4"}, - {file = "jiter-0.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:351f4c90a24c4fb8c87c6a73af2944c440494ed2bea2094feecacb75c50398ae"}, - {file = "jiter-0.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d45807b0f236c485e1e525e2ce3a854807dfe28ccf0d013dd4a563395e28008a"}, - {file = "jiter-0.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1537a890724ba00fdba21787010ac6f24dad47f763410e9e1093277913592784"}, - {file = "jiter-0.9.0-cp38-cp38-win32.whl", hash = "sha256:e3630ec20cbeaddd4b65513fa3857e1b7c4190d4481ef07fb63d0fad59033321"}, - {file = "jiter-0.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:2685f44bf80e95f8910553bf2d33b9c87bf25fceae6e9f0c1355f75d2922b0ee"}, - {file = "jiter-0.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:9ef340fae98065071ccd5805fe81c99c8f80484e820e40043689cf97fb66b3e2"}, - {file = "jiter-0.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:efb767d92c63b2cd9ec9f24feeb48f49574a713870ec87e9ba0c2c6e9329c3e2"}, - {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:113f30f87fb1f412510c6d7ed13e91422cfd329436364a690c34c8b8bd880c42"}, - {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8793b6df019b988526f5a633fdc7456ea75e4a79bd8396a3373c371fc59f5c9b"}, - {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a9aaa5102dba4e079bb728076fadd5a2dca94c05c04ce68004cfd96f128ea34"}, - {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d838650f6ebaf4ccadfb04522463e74a4c378d7e667e0eb1865cfe3990bfac49"}, - {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0194f813efdf4b8865ad5f5c5f50f8566df7d770a82c51ef593d09e0b347020"}, - {file = "jiter-0.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7954a401d0a8a0b8bc669199db78af435aae1e3569187c2939c477c53cb6a0a"}, - {file = "jiter-0.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4feafe787eb8a8d98168ab15637ca2577f6ddf77ac6c8c66242c2d028aa5420e"}, - {file = "jiter-0.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:27cd1f2e8bb377f31d3190b34e4328d280325ad7ef55c6ac9abde72f79e84d2e"}, - {file = "jiter-0.9.0-cp39-cp39-win32.whl", hash = "sha256:161d461dcbe658cf0bd0aa375b30a968b087cdddc624fc585f3867c63c6eca95"}, - {file = "jiter-0.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:e8b36d8a16a61993be33e75126ad3d8aa29cf450b09576f3c427d27647fcb4aa"}, - {file = "jiter-0.9.0.tar.gz", hash = "sha256:aadba0964deb424daa24492abc3d229c60c4a31bfee205aedbf1acc7639d7893"}, -] - -[[package]] -name = "jsonpatch" -version = "1.33" -description = "Apply JSON-Patches (RFC 6902)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, - {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, -] - -[package.dependencies] -jsonpointer = ">=1.9" - -[[package]] -name = "jsonpointer" -version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, - {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, -] - -[[package]] -name = "langchain" -version = "0.3.25" -description = "Building applications with LLMs through composability" -optional = false -python-versions = ">=3.9" -files = [ - {file = "langchain-0.3.25-py3-none-any.whl", hash = "sha256:931f7d2d1eaf182f9f41c5e3272859cfe7f94fc1f7cef6b3e5a46024b4884c21"}, - {file = "langchain-0.3.25.tar.gz", hash = "sha256:a1d72aa39546a23db08492d7228464af35c9ee83379945535ceef877340d2a3a"}, -] - -[package.dependencies] -langchain-core = ">=0.3.58,<1.0.0" -langchain-text-splitters = ">=0.3.8,<1.0.0" -langsmith = ">=0.1.17,<0.4" -pydantic = ">=2.7.4,<3.0.0" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" - -[package.extras] -anthropic = ["langchain-anthropic"] -aws = ["langchain-aws"] -azure-ai = ["langchain-azure-ai"] -cohere = ["langchain-cohere"] -community = ["langchain-community"] -deepseek = ["langchain-deepseek"] -fireworks = ["langchain-fireworks"] -google-genai = ["langchain-google-genai"] -google-vertexai = ["langchain-google-vertexai"] -groq = ["langchain-groq"] -huggingface = ["langchain-huggingface"] -mistralai = ["langchain-mistralai"] -ollama = ["langchain-ollama"] -openai = ["langchain-openai"] -perplexity = ["langchain-perplexity"] -together = ["langchain-together"] -xai = ["langchain-xai"] - -[[package]] -name = "langchain-community" -version = "0.3.23" -description = "Community contributed LangChain integrations." -optional = false -python-versions = ">=3.9" -files = [ - {file = "langchain_community-0.3.23-py3-none-any.whl", hash = "sha256:7b5328e749df6bbaf8e60c53d810a95ab22f2d2262911b206b0fb582d58350b7"}, - {file = "langchain_community-0.3.23.tar.gz", hash = "sha256:afb4b34d8b75fc00f78b2270e988bb48fff96b333d23fae05ab32d012940973f"}, -] - -[package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -dataclasses-json = ">=0.5.7,<0.7" -httpx-sse = ">=0.4.0,<1.0.0" -langchain = ">=0.3.24,<1.0.0" -langchain-core = ">=0.3.56,<1.0.0" -langsmith = ">=0.1.125,<0.4" -numpy = [ - {version = ">=1.26.2", markers = "python_version < \"3.13\""}, - {version = ">=2.1.0", markers = "python_version >= \"3.13\""}, -] -pydantic-settings = ">=2.4.0,<3.0.0" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10" - -[[package]] -name = "langchain-core" -version = "0.3.59" -description = "Building applications with LLMs through composability" -optional = false -python-versions = ">=3.9" -files = [ - {file = "langchain_core-0.3.59-py3-none-any.whl", hash = "sha256:9686baaff43f2c8175535da13faf40e6866769015e93130c3c1e4243e7244d70"}, - {file = "langchain_core-0.3.59.tar.gz", hash = "sha256:052a37cf298c505144f007e5aeede6ecff2dc92c827525d1ef59101eb3a4551c"}, -] - -[package.dependencies] -jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.1.125,<0.4" -packaging = ">=23.2,<25" -pydantic = [ - {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, -] -PyYAML = ">=5.3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" -typing-extensions = ">=4.7" - -[[package]] -name = "langchain-google-genai" -version = "2.1.4" -description = "An integration package connecting Google's genai package and LangChain" -optional = false -python-versions = "<4.0,>=3.9" -files = [ - {file = "langchain_google_genai-2.1.4-py3-none-any.whl", hash = "sha256:a3fa3cf7fe9c1de77280f42fbdd22cfcc5fbeb0d60cd5be7a0e6c50a74f5ce73"}, - {file = "langchain_google_genai-2.1.4.tar.gz", hash = "sha256:b52e10ea3daf1a65f70b73c78b78235466593de2aa9f4119fa887b804605efb7"}, -] - -[package.dependencies] -filetype = ">=1.2.0,<2.0.0" -google-ai-generativelanguage = ">=0.6.18,<0.7.0" -langchain-core = ">=0.3.52,<0.4.0" -pydantic = ">=2,<3" - -[[package]] -name = "langchain-openai" -version = "0.3.16" -description = "An integration package connecting OpenAI and LangChain" -optional = false -python-versions = ">=3.9" -files = [ - {file = "langchain_openai-0.3.16-py3-none-any.whl", hash = "sha256:eae74a6758d38a26159c5fde5abf8ef313e6400efb01a08f12dd7410c9f4fd0f"}, - {file = "langchain_openai-0.3.16.tar.gz", hash = "sha256:4e423e39d072f1432adc9430f2905fe635cc019f01ad1bdffa5ed8d0dda32149"}, -] - -[package.dependencies] -langchain-core = ">=0.3.58,<1.0.0" -openai = ">=1.68.2,<2.0.0" -tiktoken = ">=0.7,<1" - -[[package]] -name = "langchain-text-splitters" -version = "0.3.8" -description = "LangChain text splitting utilities" -optional = false -python-versions = "<4.0,>=3.9" -files = [ - {file = "langchain_text_splitters-0.3.8-py3-none-any.whl", hash = "sha256:e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02"}, - {file = "langchain_text_splitters-0.3.8.tar.gz", hash = "sha256:116d4b9f2a22dda357d0b79e30acf005c5518177971c66a9f1ab0edfdb0f912e"}, -] - -[package.dependencies] -langchain-core = ">=0.3.51,<1.0.0" - -[[package]] -name = "langsmith" -version = "0.3.42" -description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." -optional = false -python-versions = ">=3.9" -files = [ - {file = "langsmith-0.3.42-py3-none-any.whl", hash = "sha256:18114327f3364385dae4026ebfd57d1c1cb46d8f80931098f0f10abe533475ff"}, - {file = "langsmith-0.3.42.tar.gz", hash = "sha256:2b5cbc450ab808b992362aac6943bb1d285579aa68a3a8be901d30a393458f25"}, -] - -[package.dependencies] -httpx = ">=0.23.0,<1" -orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} -packaging = ">=23.2" -pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, -] -requests = ">=2,<3" -requests-toolbelt = ">=1.0.0,<2.0.0" -zstandard = ">=0.23.0,<0.24.0" - -[package.extras] -langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] -openai-agents = ["openai-agents (>=0.0.3,<0.1)"] -otel = ["opentelemetry-api (>=1.30.0,<2.0.0)", "opentelemetry-exporter-otlp-proto-http (>=1.30.0,<2.0.0)", "opentelemetry-sdk (>=1.30.0,<2.0.0)"] -pytest = ["pytest (>=7.0.0)", "rich (>=13.9.4,<14.0.0)"] - -[[package]] -name = "loguru" -version = "0.7.3" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = "<4.0,>=3.5" -files = [ - {file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"}, - {file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==8.1.3)", "build (==1.2.2)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.5.0)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.13.0)", "mypy (==v1.4.1)", "myst-parser (==4.0.0)", "pre-commit (==4.0.1)", "pytest (==6.1.2)", "pytest (==8.3.2)", "pytest-cov (==2.12.1)", "pytest-cov (==5.0.0)", "pytest-cov (==6.0.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.1.0)", "sphinx-rtd-theme (==3.0.2)", "tox (==3.27.1)", "tox (==4.23.2)", "twine (==6.0.1)"] - -[[package]] -name = "lxml" -version = "5.4.0" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=3.6" -files = [ - {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e7bc6df34d42322c5289e37e9971d6ed114e3776b45fa879f734bded9d1fea9c"}, - {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6854f8bd8a1536f8a1d9a3655e6354faa6406621cf857dc27b681b69860645c7"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:696ea9e87442467819ac22394ca36cb3d01848dad1be6fac3fb612d3bd5a12cf"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef80aeac414f33c24b3815ecd560cee272786c3adfa5f31316d8b349bfade28"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b9c2754cef6963f3408ab381ea55f47dabc6f78f4b8ebb0f0b25cf1ac1f7609"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a62cc23d754bb449d63ff35334acc9f5c02e6dae830d78dab4dd12b78a524f4"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f82125bc7203c5ae8633a7d5d20bcfdff0ba33e436e4ab0abc026a53a8960b7"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b67319b4aef1a6c56576ff544b67a2a6fbd7eaee485b241cabf53115e8908b8f"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:a8ef956fce64c8551221f395ba21d0724fed6b9b6242ca4f2f7beb4ce2f41997"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:0a01ce7d8479dce84fc03324e3b0c9c90b1ece9a9bb6a1b6c9025e7e4520e78c"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:91505d3ddebf268bb1588eb0f63821f738d20e1e7f05d3c647a5ca900288760b"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3bcdde35d82ff385f4ede021df801b5c4a5bcdfb61ea87caabcebfc4945dc1b"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aea7c06667b987787c7d1f5e1dfcd70419b711cdb47d6b4bb4ad4b76777a0563"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7fb111eef4d05909b82152721a59c1b14d0f365e2be4c742a473c5d7372f4f5"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43d549b876ce64aa18b2328faff70f5877f8c6dede415f80a2f799d31644d776"}, - {file = "lxml-5.4.0-cp310-cp310-win32.whl", hash = "sha256:75133890e40d229d6c5837b0312abbe5bac1c342452cf0e12523477cd3aa21e7"}, - {file = "lxml-5.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de5b4e1088523e2b6f730d0509a9a813355b7f5659d70eb4f319c76beea2e250"}, - {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98a3912194c079ef37e716ed228ae0dcb960992100461b704aea4e93af6b0bb9"}, - {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ea0252b51d296a75f6118ed0d8696888e7403408ad42345d7dfd0d1e93309a7"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92b69441d1bd39f4940f9eadfa417a25862242ca2c396b406f9272ef09cdcaa"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e16c08254b9b6466526bc1828d9370ee6c0d60a4b64836bc3ac2917d1e16df"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7605c1c32c3d6e8c990dd28a0970a3cbbf1429d5b92279e37fda05fb0c92190e"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecf4c4b83f1ab3d5a7ace10bafcb6f11df6156857a3c418244cef41ca9fa3e44"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cef4feae82709eed352cd7e97ae062ef6ae9c7b5dbe3663f104cd2c0e8d94ba"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:df53330a3bff250f10472ce96a9af28628ff1f4efc51ccba351a8820bca2a8ba"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:aefe1a7cb852fa61150fcb21a8c8fcea7b58c4cb11fbe59c97a0a4b31cae3c8c"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ef5a7178fcc73b7d8c07229e89f8eb45b2908a9238eb90dcfc46571ccf0383b8"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d2ed1b3cb9ff1c10e6e8b00941bb2e5bb568b307bfc6b17dffbbe8be5eecba86"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72ac9762a9f8ce74c9eed4a4e74306f2f18613a6b71fa065495a67ac227b3056"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f5cb182f6396706dc6cc1896dd02b1c889d644c081b0cdec38747573db88a7d7"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3a3178b4873df8ef9457a4875703488eb1622632a9cee6d76464b60e90adbfcd"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e094ec83694b59d263802ed03a8384594fcce477ce484b0cbcd0008a211ca751"}, - {file = "lxml-5.4.0-cp311-cp311-win32.whl", hash = "sha256:4329422de653cdb2b72afa39b0aa04252fca9071550044904b2e7036d9d97fe4"}, - {file = "lxml-5.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd3be6481ef54b8cfd0e1e953323b7aa9d9789b94842d0e5b142ef4bb7999539"}, - {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5aff6f3e818e6bdbbb38e5967520f174b18f539c2b9de867b1e7fde6f8d95a4"}, - {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942a5d73f739ad7c452bf739a62a0f83e2578afd6b8e5406308731f4ce78b16d"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460508a4b07364d6abf53acaa0a90b6d370fafde5693ef37602566613a9b0779"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529024ab3a505fed78fe3cc5ddc079464e709f6c892733e3f5842007cec8ac6e"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ca56ebc2c474e8f3d5761debfd9283b8b18c76c4fc0967b74aeafba1f5647f9"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a81e1196f0a5b4167a8dafe3a66aa67c4addac1b22dc47947abd5d5c7a3f24b5"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b8686694423ddae324cf614e1b9659c2edb754de617703c3d29ff568448df5"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c5681160758d3f6ac5b4fea370495c48aac0989d6a0f01bb9a72ad8ef5ab75c4"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:2dc191e60425ad70e75a68c9fd90ab284df64d9cd410ba8d2b641c0c45bc006e"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:67f779374c6b9753ae0a0195a892a1c234ce8416e4448fe1e9f34746482070a7"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79d5bfa9c1b455336f52343130b2067164040604e41f6dc4d8313867ed540079"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d3c30ba1c9b48c68489dc1829a6eede9873f52edca1dda900066542528d6b20"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1af80c6316ae68aded77e91cd9d80648f7dd40406cef73df841aa3c36f6907c8"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4d885698f5019abe0de3d352caf9466d5de2baded00a06ef3f1216c1a58ae78f"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea53d51859b6c64e7c51d522c03cc2c48b9b5d6172126854cc7f01aa11f52bc"}, - {file = "lxml-5.4.0-cp312-cp312-win32.whl", hash = "sha256:d90b729fd2732df28130c064aac9bb8aff14ba20baa4aee7bd0795ff1187545f"}, - {file = "lxml-5.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1dc4ca99e89c335a7ed47d38964abcb36c5910790f9bd106f2a8fa2ee0b909d2"}, - {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:773e27b62920199c6197130632c18fb7ead3257fce1ffb7d286912e56ddb79e0"}, - {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9c671845de9699904b1e9df95acfe8dfc183f2310f163cdaa91a3535af95de"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9454b8d8200ec99a224df8854786262b1bd6461f4280064c807303c642c05e76"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cccd007d5c95279e529c146d095f1d39ac05139de26c098166c4beb9374b0f4d"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fce1294a0497edb034cb416ad3e77ecc89b313cff7adbee5334e4dc0d11f422"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24974f774f3a78ac12b95e3a20ef0931795ff04dbb16db81a90c37f589819551"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:497cab4d8254c2a90bf988f162ace2ddbfdd806fce3bda3f581b9d24c852e03c"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e794f698ae4c5084414efea0f5cc9f4ac562ec02d66e1484ff822ef97c2cadff"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:2c62891b1ea3094bb12097822b3d44b93fc6c325f2043c4d2736a8ff09e65f60"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:142accb3e4d1edae4b392bd165a9abdee8a3c432a2cca193df995bc3886249c8"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1a42b3a19346e5601d1b8296ff6ef3d76038058f311902edd574461e9c036982"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4291d3c409a17febf817259cb37bc62cb7eb398bcc95c1356947e2871911ae61"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4f5322cf38fe0e21c2d73901abf68e6329dc02a4994e483adbcf92b568a09a54"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0be91891bdb06ebe65122aa6bf3fc94489960cf7e03033c6f83a90863b23c58b"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:15a665ad90054a3d4f397bc40f73948d48e36e4c09f9bcffc7d90c87410e478a"}, - {file = "lxml-5.4.0-cp313-cp313-win32.whl", hash = "sha256:d5663bc1b471c79f5c833cffbc9b87d7bf13f87e055a5c86c363ccd2348d7e82"}, - {file = "lxml-5.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:bcb7a1096b4b6b24ce1ac24d4942ad98f983cd3810f9711bcd0293f43a9d8b9f"}, - {file = "lxml-5.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7be701c24e7f843e6788353c055d806e8bd8466b52907bafe5d13ec6a6dbaecd"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb54f7c6bafaa808f27166569b1511fc42701a7713858dddc08afdde9746849e"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97dac543661e84a284502e0cf8a67b5c711b0ad5fb661d1bd505c02f8cf716d7"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:c70e93fba207106cb16bf852e421c37bbded92acd5964390aad07cb50d60f5cf"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9c886b481aefdf818ad44846145f6eaf373a20d200b5ce1a5c8e1bc2d8745410"}, - {file = "lxml-5.4.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:fa0e294046de09acd6146be0ed6727d1f42ded4ce3ea1e9a19c11b6774eea27c"}, - {file = "lxml-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:61c7bbf432f09ee44b1ccaa24896d21075e533cd01477966a5ff5a71d88b2f56"}, - {file = "lxml-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7ce1a171ec325192c6a636b64c94418e71a1964f56d002cc28122fceff0b6121"}, - {file = "lxml-5.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:795f61bcaf8770e1b37eec24edf9771b307df3af74d1d6f27d812e15a9ff3872"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29f451a4b614a7b5b6c2e043d7b64a15bd8304d7e767055e8ab68387a8cacf4e"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f7f991a68d20c75cb13c5c9142b2a3f9eb161f1f12a9489c82172d1f133c0"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aa412a82e460571fad592d0f93ce9935a20090029ba08eca05c614f99b0cc92"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:ac7ba71f9561cd7d7b55e1ea5511543c0282e2b6450f122672a2694621d63b7e"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:c5d32f5284012deaccd37da1e2cd42f081feaa76981f0eaa474351b68df813c5"}, - {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:ce31158630a6ac85bddd6b830cffd46085ff90498b397bd0a259f59d27a12188"}, - {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:31e63621e073e04697c1b2d23fcb89991790eef370ec37ce4d5d469f40924ed6"}, - {file = "lxml-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:be2ba4c3c5b7900246a8f866580700ef0d538f2ca32535e991027bdaba944063"}, - {file = "lxml-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:09846782b1ef650b321484ad429217f5154da4d6e786636c38e434fa32e94e49"}, - {file = "lxml-5.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eaf24066ad0b30917186420d51e2e3edf4b0e2ea68d8cd885b14dc8afdcf6556"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b31a3a77501d86d8ade128abb01082724c0dfd9524f542f2f07d693c9f1175f"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e108352e203c7afd0eb91d782582f00a0b16a948d204d4dec8565024fafeea5"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11a96c3b3f7551c8a8109aa65e8594e551d5a84c76bf950da33d0fb6dfafab7"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ca755eebf0d9e62d6cb013f1261e510317a41bf4650f22963474a663fdfe02aa"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4cd915c0fb1bed47b5e6d6edd424ac25856252f09120e3e8ba5154b6b921860e"}, - {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:226046e386556a45ebc787871d6d2467b32c37ce76c2680f5c608e25823ffc84"}, - {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b108134b9667bcd71236c5a02aad5ddd073e372fb5d48ea74853e009fe38acb6"}, - {file = "lxml-5.4.0-cp38-cp38-win32.whl", hash = "sha256:1320091caa89805df7dcb9e908add28166113dcd062590668514dbd510798c88"}, - {file = "lxml-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:073eb6dcdf1f587d9b88c8c93528b57eccda40209cf9be549d469b942b41d70b"}, - {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bda3ea44c39eb74e2488297bb39d47186ed01342f0022c8ff407c250ac3f498e"}, - {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ceaf423b50ecfc23ca00b7f50b64baba85fb3fb91c53e2c9d00bc86150c7e40"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:664cdc733bc87449fe781dbb1f309090966c11cc0c0cd7b84af956a02a8a4729"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67ed8a40665b84d161bae3181aa2763beea3747f748bca5874b4af4d75998f87"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4a3bd174cc9cdaa1afbc4620c049038b441d6ba07629d89a83b408e54c35cd"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b0989737a3ba6cf2a16efb857fb0dfa20bc5c542737fddb6d893fde48be45433"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:dc0af80267edc68adf85f2a5d9be1cdf062f973db6790c1d065e45025fa26140"}, - {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:639978bccb04c42677db43c79bdaa23785dc7f9b83bfd87570da8207872f1ce5"}, - {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a99d86351f9c15e4a901fc56404b485b1462039db59288b203f8c629260a142"}, - {file = "lxml-5.4.0-cp39-cp39-win32.whl", hash = "sha256:3e6d5557989cdc3ebb5302bbdc42b439733a841891762ded9514e74f60319ad6"}, - {file = "lxml-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8c9b7f16b63e65bbba889acb436a1034a82d34fa09752d754f88d708eca80e1"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1b717b00a71b901b4667226bba282dd462c42ccf618ade12f9ba3674e1fabc55"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a9ded0f0b52098ff89dd4c418325b987feed2ea5cc86e8860b0f844285d740"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7ce10634113651d6f383aa712a194179dcd496bd8c41e191cec2099fa09de5"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53370c26500d22b45182f98847243efb518d268374a9570409d2e2276232fd37"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6364038c519dffdbe07e3cf42e6a7f8b90c275d4d1617a69bb59734c1a2d571"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b12cb6527599808ada9eb2cd6e0e7d3d8f13fe7bbb01c6311255a15ded4c7ab4"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f11a1526ebd0dee85e7b1e39e39a0cc0d9d03fb527f56d8457f6df48a10dc0c"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b4afaf38bf79109bb060d9016fad014a9a48fb244e11b94f74ae366a64d252"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de6f6bb8a7840c7bf216fb83eec4e2f79f7325eca8858167b68708b929ab2172"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5cca36a194a4eb4e2ed6be36923d3cffd03dcdf477515dea687185506583d4c9"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b7c86884ad23d61b025989d99bfdd92a7351de956e01c61307cb87035960bcb1"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:53d9469ab5460402c19553b56c3648746774ecd0681b1b27ea74d5d8a3ef5590"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:56dbdbab0551532bb26c19c914848d7251d73edb507c3079d6805fa8bba5b706"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14479c2ad1cb08b62bb941ba8e0e05938524ee3c3114644df905d2331c76cd57"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32697d2ea994e0db19c1df9e40275ffe84973e4232b5c274f47e7c1ec9763cdd"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:24f6df5f24fc3385f622c0c9d63fe34604893bc1a5bdbb2dbf5870f85f9a404a"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:151d6c40bc9db11e960619d2bf2ec5829f0aaffb10b41dcf6ad2ce0f3c0b2325"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4025bf2884ac4370a3243c5aa8d66d3cb9e15d3ddd0af2d796eccc5f0244390e"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9459e6892f59ecea2e2584ee1058f5d8f629446eab52ba2305ae13a32a059530"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47fb24cc0f052f0576ea382872b3fc7e1f7e3028e53299ea751839418ade92a6"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50441c9de951a153c698b9b99992e806b71c1f36d14b154592580ff4a9d0d877"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ab339536aa798b1e17750733663d272038bf28069761d5be57cb4a9b0137b4f8"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9776af1aad5a4b4a1317242ee2bea51da54b2a7b7b48674be736d463c999f37d"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:63e7968ff83da2eb6fdda967483a7a023aa497d85ad8f05c3ad9b1f2e8c84987"}, - {file = "lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html-clean = ["lxml_html_clean"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.11,<3.1.0)"] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "3.0.2" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.9" -files = [ - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, - {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, -] - -[[package]] -name = "marshmallow" -version = "3.26.1" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.9" -files = [ - {file = "marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c"}, - {file = "marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6"}, -] - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] -tests = ["pytest", "simplejson"] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mmh3" -version = "5.1.0" -description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." -optional = false -python-versions = ">=3.9" -files = [ - {file = "mmh3-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:eaf4ac5c6ee18ca9232238364d7f2a213278ae5ca97897cafaa123fcc7bb8bec"}, - {file = "mmh3-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48f9aa8ccb9ad1d577a16104834ac44ff640d8de8c0caed09a2300df7ce8460a"}, - {file = "mmh3-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d4ba8cac21e1f2d4e436ce03a82a7f87cda80378691f760e9ea55045ec480a3d"}, - {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d69281c281cb01994f054d862a6bb02a2e7acfe64917795c58934b0872b9ece4"}, - {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d05ed3962312fbda2a1589b97359d2467f677166952f6bd410d8c916a55febf"}, - {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78ae6a03f4cff4aa92ddd690611168856f8c33a141bd3e5a1e0a85521dc21ea0"}, - {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95f983535b39795d9fb7336438faae117424c6798f763d67c6624f6caf2c4c01"}, - {file = "mmh3-5.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d46fdd80d4c7ecadd9faa6181e92ccc6fe91c50991c9af0e371fdf8b8a7a6150"}, - {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0f16e976af7365ea3b5c425124b2a7f0147eed97fdbb36d99857f173c8d8e096"}, - {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6fa97f7d1e1f74ad1565127229d510f3fd65d931fdedd707c1e15100bc9e5ebb"}, - {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4052fa4a8561bd62648e9eb993c8f3af3bdedadf3d9687aa4770d10e3709a80c"}, - {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3f0e8ae9f961037f812afe3cce7da57abf734285961fffbeff9a4c011b737732"}, - {file = "mmh3-5.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:99297f207db967814f1f02135bb7fe7628b9eacb046134a34e1015b26b06edce"}, - {file = "mmh3-5.1.0-cp310-cp310-win32.whl", hash = "sha256:2e6c8dc3631a5e22007fbdb55e993b2dbce7985c14b25b572dd78403c2e79182"}, - {file = "mmh3-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:e4e8c7ad5a4dddcfde35fd28ef96744c1ee0f9d9570108aa5f7e77cf9cfdf0bf"}, - {file = "mmh3-5.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:45da549269883208912868a07d0364e1418d8292c4259ca11699ba1b2475bd26"}, - {file = "mmh3-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0b529dcda3f951ff363a51d5866bc6d63cf57f1e73e8961f864ae5010647079d"}, - {file = "mmh3-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db1079b3ace965e562cdfc95847312f9273eb2ad3ebea983435c8423e06acd7"}, - {file = "mmh3-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:22d31e3a0ff89b8eb3b826d6fc8e19532998b2aa6b9143698043a1268da413e1"}, - {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2139bfbd354cd6cb0afed51c4b504f29bcd687a3b1460b7e89498329cc28a894"}, - {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c8105c6a435bc2cd6ea2ef59558ab1a2976fd4a4437026f562856d08996673a"}, - {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57730067174a7f36fcd6ce012fe359bd5510fdaa5fe067bc94ed03e65dafb769"}, - {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bde80eb196d7fdc765a318604ded74a4378f02c5b46c17aa48a27d742edaded2"}, - {file = "mmh3-5.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9c8eddcb441abddeb419c16c56fd74b3e2df9e57f7aa2903221996718435c7a"}, - {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:99e07e4acafbccc7a28c076a847fb060ffc1406036bc2005acb1b2af620e53c3"}, - {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9e25ba5b530e9a7d65f41a08d48f4b3fedc1e89c26486361166a5544aa4cad33"}, - {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bb9bf7475b4d99156ce2f0cf277c061a17560c8c10199c910a680869a278ddc7"}, - {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2a1b0878dd281ea3003368ab53ff6f568e175f1b39f281df1da319e58a19c23a"}, - {file = "mmh3-5.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:25f565093ac8b8aefe0f61f8f95c9a9d11dd69e6a9e9832ff0d293511bc36258"}, - {file = "mmh3-5.1.0-cp311-cp311-win32.whl", hash = "sha256:1e3554d8792387eac73c99c6eaea0b3f884e7130eb67986e11c403e4f9b6d372"}, - {file = "mmh3-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8ad777a48197882492af50bf3098085424993ce850bdda406a358b6ab74be759"}, - {file = "mmh3-5.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f29dc4efd99bdd29fe85ed6c81915b17b2ef2cf853abf7213a48ac6fb3eaabe1"}, - {file = "mmh3-5.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45712987367cb9235026e3cbf4334670522a97751abfd00b5bc8bfa022c3311d"}, - {file = "mmh3-5.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b1020735eb35086ab24affbea59bb9082f7f6a0ad517cb89f0fc14f16cea4dae"}, - {file = "mmh3-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:babf2a78ce5513d120c358722a2e3aa7762d6071cd10cede026f8b32452be322"}, - {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4f47f58cd5cbef968c84a7c1ddc192fef0a36b48b0b8a3cb67354531aa33b00"}, - {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2044a601c113c981f2c1e14fa33adc9b826c9017034fe193e9eb49a6882dbb06"}, - {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c94d999c9f2eb2da44d7c2826d3fbffdbbbbcde8488d353fee7c848ecc42b968"}, - {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a015dcb24fa0c7a78f88e9419ac74f5001c1ed6a92e70fd1803f74afb26a4c83"}, - {file = "mmh3-5.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:457da019c491a2d20e2022c7d4ce723675e4c081d9efc3b4d8b9f28a5ea789bd"}, - {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71408579a570193a4ac9c77344d68ddefa440b00468a0b566dcc2ba282a9c559"}, - {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8b3a04bc214a6e16c81f02f855e285c6df274a2084787eeafaa45f2fbdef1b63"}, - {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:832dae26a35514f6d3c1e267fa48e8de3c7b978afdafa0529c808ad72e13ada3"}, - {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bf658a61fc92ef8a48945ebb1076ef4ad74269e353fffcb642dfa0890b13673b"}, - {file = "mmh3-5.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3313577453582b03383731b66447cdcdd28a68f78df28f10d275d7d19010c1df"}, - {file = "mmh3-5.1.0-cp312-cp312-win32.whl", hash = "sha256:1d6508504c531ab86c4424b5a5ff07c1132d063863339cf92f6657ff7a580f76"}, - {file = "mmh3-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:aa75981fcdf3f21759d94f2c81b6a6e04a49dfbcdad88b152ba49b8e20544776"}, - {file = "mmh3-5.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:a4c1a76808dfea47f7407a0b07aaff9087447ef6280716fd0783409b3088bb3c"}, - {file = "mmh3-5.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a523899ca29cfb8a5239618474a435f3d892b22004b91779fcb83504c0d5b8c"}, - {file = "mmh3-5.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:17cef2c3a6ca2391ca7171a35ed574b5dab8398163129a3e3a4c05ab85a4ff40"}, - {file = "mmh3-5.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:52e12895b30110f3d89dae59a888683cc886ed0472dd2eca77497edef6161997"}, - {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0d6719045cda75c3f40397fc24ab67b18e0cb8f69d3429ab4c39763c4c608dd"}, - {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d19fa07d303a91f8858982c37e6939834cb11893cb3ff20e6ee6fa2a7563826a"}, - {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31b47a620d622fbde8ca1ca0435c5d25de0ac57ab507209245e918128e38e676"}, - {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00f810647c22c179b6821079f7aa306d51953ac893587ee09cf1afb35adf87cb"}, - {file = "mmh3-5.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6128b610b577eed1e89ac7177ab0c33d06ade2aba93f5c89306032306b5f1c6"}, - {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1e550a45d2ff87a1c11b42015107f1778c93f4c6f8e731bf1b8fa770321b8cc4"}, - {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:785ae09276342f79fd8092633e2d52c0f7c44d56e8cfda8274ccc9b76612dba2"}, - {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0f4be3703a867ef976434afd3661a33884abe73ceb4ee436cac49d3b4c2aaa7b"}, - {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e513983830c4ff1f205ab97152a0050cf7164f1b4783d702256d39c637b9d107"}, - {file = "mmh3-5.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9135c300535c828c0bae311b659f33a31c941572eae278568d1a953c4a57b59"}, - {file = "mmh3-5.1.0-cp313-cp313-win32.whl", hash = "sha256:c65dbd12885a5598b70140d24de5839551af5a99b29f9804bb2484b29ef07692"}, - {file = "mmh3-5.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:10db7765201fc65003fa998faa067417ef6283eb5f9bba8f323c48fd9c33e91f"}, - {file = "mmh3-5.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:b22fe2e54be81f6c07dcb36b96fa250fb72effe08aa52fbb83eade6e1e2d5fd7"}, - {file = "mmh3-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:166b67749a1d8c93b06f5e90576f1ba838a65c8e79f28ffd9dfafba7c7d0a084"}, - {file = "mmh3-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:adba83c7ba5cc8ea201ee1e235f8413a68e7f7b8a657d582cc6c6c9d73f2830e"}, - {file = "mmh3-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a61f434736106804eb0b1612d503c4e6eb22ba31b16e6a2f987473de4226fa55"}, - {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba9ce59816b30866093f048b3312c2204ff59806d3a02adee71ff7bd22b87554"}, - {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd51597bef1e503363b05cb579db09269e6e6c39d419486626b255048daf545b"}, - {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d51a1ed642d3fb37b8f4cab966811c52eb246c3e1740985f701ef5ad4cdd2145"}, - {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:709bfe81c53bf8a3609efcbd65c72305ade60944f66138f697eefc1a86b6e356"}, - {file = "mmh3-5.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e01a9b0092b6f82e861137c8e9bb9899375125b24012eb5219e61708be320032"}, - {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:27e46a2c13c9a805e03c9ec7de0ca8e096794688ab2125bdce4229daf60c4a56"}, - {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5766299c1d26f6bfd0a638e070bd17dbd98d4ccb067d64db3745bf178e700ef0"}, - {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7785205e3e4443fdcbb73766798c7647f94c2f538b90f666688f3e757546069e"}, - {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:8e574fbd39afb433b3ab95683b1b4bf18313dc46456fc9daaddc2693c19ca565"}, - {file = "mmh3-5.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1b6727a5a20e32cbf605743749f3862abe5f5e097cbf2afc7be5aafd32a549ae"}, - {file = "mmh3-5.1.0-cp39-cp39-win32.whl", hash = "sha256:d6eaa711d4b9220fe5252032a44bf68e5dcfb7b21745a96efc9e769b0dd57ec2"}, - {file = "mmh3-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:49d444913f6c02980e5241a53fe9af2338f2043d6ce5b6f5ea7d302c52c604ac"}, - {file = "mmh3-5.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:0daaeaedd78773b70378f2413c7d6b10239a75d955d30d54f460fb25d599942d"}, - {file = "mmh3-5.1.0.tar.gz", hash = "sha256:136e1e670500f177f49ec106a4ebf0adf20d18d96990cc36ea492c651d2b406c"}, -] - -[package.extras] -benchmark = ["pymmh3 (==0.0.5)", "pyperf (==2.8.1)", "xxhash (==3.5.0)"] -docs = ["myst-parser (==4.0.0)", "shibuya (==2024.12.21)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)"] -lint = ["black (==24.10.0)", "clang-format (==19.1.7)", "isort (==5.13.2)", "pylint (==3.3.3)"] -plot = ["matplotlib (==3.10.0)", "pandas (==2.2.3)"] -test = ["pytest (==8.3.4)", "pytest-sugar (==1.0.0)"] -type = ["mypy (==1.14.1)"] - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" -optional = false -python-versions = "*" -files = [ - {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, - {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, -] - -[package.extras] -develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] -docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] -tests = ["pytest (>=4.6)"] - -[[package]] -name = "multidict" -version = "6.4.3" -description = "multidict implementation" -optional = false -python-versions = ">=3.9" -files = [ - {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5"}, - {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188"}, - {file = "multidict-6.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5"}, - {file = "multidict-6.4.3-cp310-cp310-win32.whl", hash = "sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e"}, - {file = "multidict-6.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887"}, - {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd"}, - {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8"}, - {file = "multidict-6.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7"}, - {file = "multidict-6.4.3-cp311-cp311-win32.whl", hash = "sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378"}, - {file = "multidict-6.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589"}, - {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676"}, - {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1"}, - {file = "multidict-6.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a"}, - {file = "multidict-6.4.3-cp312-cp312-win32.whl", hash = "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124"}, - {file = "multidict-6.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db"}, - {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474"}, - {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd"}, - {file = "multidict-6.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8"}, - {file = "multidict-6.4.3-cp313-cp313-win32.whl", hash = "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3"}, - {file = "multidict-6.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5"}, - {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6"}, - {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c"}, - {file = "multidict-6.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4"}, - {file = "multidict-6.4.3-cp313-cp313t-win32.whl", hash = "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5"}, - {file = "multidict-6.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208"}, - {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21"}, - {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b"}, - {file = "multidict-6.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df"}, - {file = "multidict-6.4.3-cp39-cp39-win32.whl", hash = "sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f"}, - {file = "multidict-6.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897"}, - {file = "multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9"}, - {file = "multidict-6.4.3.tar.gz", hash = "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec"}, -] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.8" -files = [ - {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, - {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, -] - -[[package]] -name = "numpy" -version = "2.2.5" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.10" -files = [ - {file = "numpy-2.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f4a922da1729f4c40932b2af4fe84909c7a6e167e6e99f71838ce3a29f3fe26"}, - {file = "numpy-2.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6f91524d31b34f4a5fee24f5bc16dcd1491b668798b6d85585d836c1e633a6a"}, - {file = "numpy-2.2.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:19f4718c9012e3baea91a7dba661dcab2451cda2550678dc30d53acb91a7290f"}, - {file = "numpy-2.2.5-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:eb7fd5b184e5d277afa9ec0ad5e4eb562ecff541e7f60e69ee69c8d59e9aeaba"}, - {file = "numpy-2.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6413d48a9be53e183eb06495d8e3b006ef8f87c324af68241bbe7a39e8ff54c3"}, - {file = "numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7451f92eddf8503c9b8aa4fe6aa7e87fd51a29c2cfc5f7dbd72efde6c65acf57"}, - {file = "numpy-2.2.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0bcb1d057b7571334139129b7f941588f69ce7c4ed15a9d6162b2ea54ded700c"}, - {file = "numpy-2.2.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:36ab5b23915887543441efd0417e6a3baa08634308894316f446027611b53bf1"}, - {file = "numpy-2.2.5-cp310-cp310-win32.whl", hash = "sha256:422cc684f17bc963da5f59a31530b3936f57c95a29743056ef7a7903a5dbdf88"}, - {file = "numpy-2.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:e4f0b035d9d0ed519c813ee23e0a733db81ec37d2e9503afbb6e54ccfdee0fa7"}, - {file = "numpy-2.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c42365005c7a6c42436a54d28c43fe0e01ca11eb2ac3cefe796c25a5f98e5e9b"}, - {file = "numpy-2.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:498815b96f67dc347e03b719ef49c772589fb74b8ee9ea2c37feae915ad6ebda"}, - {file = "numpy-2.2.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6411f744f7f20081b1b4e7112e0f4c9c5b08f94b9f086e6f0adf3645f85d3a4d"}, - {file = "numpy-2.2.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9de6832228f617c9ef45d948ec1cd8949c482238d68b2477e6f642c33a7b0a54"}, - {file = "numpy-2.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:369e0d4647c17c9363244f3468f2227d557a74b6781cb62ce57cf3ef5cc7c610"}, - {file = "numpy-2.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:262d23f383170f99cd9191a7c85b9a50970fe9069b2f8ab5d786eca8a675d60b"}, - {file = "numpy-2.2.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa70fdbdc3b169d69e8c59e65c07a1c9351ceb438e627f0fdcd471015cd956be"}, - {file = "numpy-2.2.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37e32e985f03c06206582a7323ef926b4e78bdaa6915095ef08070471865b906"}, - {file = "numpy-2.2.5-cp311-cp311-win32.whl", hash = "sha256:f5045039100ed58fa817a6227a356240ea1b9a1bc141018864c306c1a16d4175"}, - {file = "numpy-2.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:b13f04968b46ad705f7c8a80122a42ae8f620536ea38cf4bdd374302926424dd"}, - {file = "numpy-2.2.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ee461a4eaab4f165b68780a6a1af95fb23a29932be7569b9fab666c407969051"}, - {file = "numpy-2.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec31367fd6a255dc8de4772bd1658c3e926d8e860a0b6e922b615e532d320ddc"}, - {file = "numpy-2.2.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:47834cde750d3c9f4e52c6ca28a7361859fcaf52695c7dc3cc1a720b8922683e"}, - {file = "numpy-2.2.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2c1a1c6ccce4022383583a6ded7bbcda22fc635eb4eb1e0a053336425ed36dfa"}, - {file = "numpy-2.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d75f338f5f79ee23548b03d801d28a505198297534f62416391857ea0479571"}, - {file = "numpy-2.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a801fef99668f309b88640e28d261991bfad9617c27beda4a3aec4f217ea073"}, - {file = "numpy-2.2.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:abe38cd8381245a7f49967a6010e77dbf3680bd3627c0fe4362dd693b404c7f8"}, - {file = "numpy-2.2.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a0ac90e46fdb5649ab6369d1ab6104bfe5854ab19b645bf5cda0127a13034ae"}, - {file = "numpy-2.2.5-cp312-cp312-win32.whl", hash = "sha256:0cd48122a6b7eab8f06404805b1bd5856200e3ed6f8a1b9a194f9d9054631beb"}, - {file = "numpy-2.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:ced69262a8278547e63409b2653b372bf4baff0870c57efa76c5703fd6543282"}, - {file = "numpy-2.2.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:059b51b658f4414fff78c6d7b1b4e18283ab5fa56d270ff212d5ba0c561846f4"}, - {file = "numpy-2.2.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:47f9ed103af0bc63182609044b0490747e03bd20a67e391192dde119bf43d52f"}, - {file = "numpy-2.2.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:261a1ef047751bb02f29dfe337230b5882b54521ca121fc7f62668133cb119c9"}, - {file = "numpy-2.2.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4520caa3807c1ceb005d125a75e715567806fed67e315cea619d5ec6e75a4191"}, - {file = "numpy-2.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d14b17b9be5f9c9301f43d2e2a4886a33b53f4e6fdf9ca2f4cc60aeeee76372"}, - {file = "numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba321813a00e508d5421104464510cc962a6f791aa2fca1c97b1e65027da80d"}, - {file = "numpy-2.2.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4cbdef3ddf777423060c6f81b5694bad2dc9675f110c4b2a60dc0181543fac7"}, - {file = "numpy-2.2.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54088a5a147ab71a8e7fdfd8c3601972751ded0739c6b696ad9cb0343e21ab73"}, - {file = "numpy-2.2.5-cp313-cp313-win32.whl", hash = "sha256:c8b82a55ef86a2d8e81b63da85e55f5537d2157165be1cb2ce7cfa57b6aef38b"}, - {file = "numpy-2.2.5-cp313-cp313-win_amd64.whl", hash = "sha256:d8882a829fd779f0f43998e931c466802a77ca1ee0fe25a3abe50278616b1471"}, - {file = "numpy-2.2.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e8b025c351b9f0e8b5436cf28a07fa4ac0204d67b38f01433ac7f9b870fa38c6"}, - {file = "numpy-2.2.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dfa94b6a4374e7851bbb6f35e6ded2120b752b063e6acdd3157e4d2bb922eba"}, - {file = "numpy-2.2.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:97c8425d4e26437e65e1d189d22dff4a079b747ff9c2788057bfb8114ce1e133"}, - {file = "numpy-2.2.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:352d330048c055ea6db701130abc48a21bec690a8d38f8284e00fab256dc1376"}, - {file = "numpy-2.2.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b4c0773b6ada798f51f0f8e30c054d32304ccc6e9c5d93d46cb26f3d385ab19"}, - {file = "numpy-2.2.5-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55f09e00d4dccd76b179c0f18a44f041e5332fd0e022886ba1c0bbf3ea4a18d0"}, - {file = "numpy-2.2.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02f226baeefa68f7d579e213d0f3493496397d8f1cff5e2b222af274c86a552a"}, - {file = "numpy-2.2.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c26843fd58f65da9491165072da2cccc372530681de481ef670dcc8e27cfb066"}, - {file = "numpy-2.2.5-cp313-cp313t-win32.whl", hash = "sha256:1a161c2c79ab30fe4501d5a2bbfe8b162490757cf90b7f05be8b80bc02f7bb8e"}, - {file = "numpy-2.2.5-cp313-cp313t-win_amd64.whl", hash = "sha256:d403c84991b5ad291d3809bace5e85f4bbf44a04bdc9a88ed2bb1807b3360bb8"}, - {file = "numpy-2.2.5-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4ea7e1cff6784e58fe281ce7e7f05036b3e1c89c6f922a6bfbc0a7e8768adbe"}, - {file = "numpy-2.2.5-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d7543263084a85fbc09c704b515395398d31d6395518446237eac219eab9e55e"}, - {file = "numpy-2.2.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0255732338c4fdd00996c0421884ea8a3651eea555c3a56b84892b66f696eb70"}, - {file = "numpy-2.2.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d2e3bdadaba0e040d1e7ab39db73e0afe2c74ae277f5614dad53eadbecbbb169"}, - {file = "numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291"}, -] - -[[package]] -name = "onnxruntime" -version = "1.22.0" -description = "ONNX Runtime is a runtime accelerator for Machine Learning models" -optional = false -python-versions = ">=3.10" -files = [ - {file = "onnxruntime-1.22.0-cp310-cp310-macosx_13_0_universal2.whl", hash = "sha256:85d8826cc8054e4d6bf07f779dc742a363c39094015bdad6a08b3c18cfe0ba8c"}, - {file = "onnxruntime-1.22.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:468c9502a12f6f49ec335c2febd22fdceecc1e4cc96dfc27e419ba237dff5aff"}, - {file = "onnxruntime-1.22.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:681fe356d853630a898ee05f01ddb95728c9a168c9460e8361d0a240c9b7cb97"}, - {file = "onnxruntime-1.22.0-cp311-cp311-macosx_13_0_universal2.whl", hash = "sha256:8d6725c5b9a681d8fe72f2960c191a96c256367887d076b08466f52b4e0991df"}, - {file = "onnxruntime-1.22.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fef17d665a917866d1f68f09edc98223b9a27e6cb167dec69da4c66484ad12fd"}, - {file = "onnxruntime-1.22.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b978aa63a9a22095479c38371a9b359d4c15173cbb164eaad5f2cd27d666aa65"}, - {file = "onnxruntime-1.22.0-cp312-cp312-macosx_13_0_universal2.whl", hash = "sha256:f3c0380f53c1e72a41b3f4d6af2ccc01df2c17844072233442c3a7e74851ab97"}, - {file = "onnxruntime-1.22.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8601128eaef79b636152aea76ae6981b7c9fc81a618f584c15d78d42b310f1c"}, - {file = "onnxruntime-1.22.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6964a975731afc19dc3418fad8d4e08c48920144ff590149429a5ebe0d15fb3c"}, - {file = "onnxruntime-1.22.0-cp313-cp313-macosx_13_0_universal2.whl", hash = "sha256:fe7c051236aae16d8e2e9ffbfc1e115a0cc2450e873a9c4cb75c0cc96c1dae07"}, - {file = "onnxruntime-1.22.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a6bbed10bc5e770c04d422893d3045b81acbbadc9fb759a2cd1ca00993da919"}, - {file = "onnxruntime-1.22.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fe45ee3e756300fccfd8d61b91129a121d3d80e9d38e01f03ff1295badc32b8"}, - {file = "onnxruntime-1.22.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a2ac5bd9205d831541db4e508e586e764a74f14efdd3f89af7fd20e1bf4a1ed"}, - {file = "onnxruntime-1.22.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64845709f9e8a2809e8e009bc4c8f73b788cee9c6619b7d9930344eae4c9cd36"}, -] - -[package.dependencies] -coloredlogs = "*" -flatbuffers = "*" -numpy = ">=1.21.6" -packaging = "*" -protobuf = "*" -sympy = "*" - -[[package]] -name = "openai" -version = "1.78.0" -description = "The official Python library for the openai API" -optional = false -python-versions = ">=3.8" -files = [ - {file = "openai-1.78.0-py3-none-any.whl", hash = "sha256:1ade6a48cd323ad8a7715e7e1669bb97a17e1a5b8a916644261aaef4bf284778"}, - {file = "openai-1.78.0.tar.gz", hash = "sha256:254aef4980688468e96cbddb1f348ed01d274d02c64c6c69b0334bf001fb62b3"}, -] - -[package.dependencies] -anyio = ">=3.5.0,<5" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -jiter = ">=0.4.0,<1" -pydantic = ">=1.9.0,<3" -sniffio = "*" -tqdm = ">4" -typing-extensions = ">=4.11,<5" - -[package.extras] -datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -realtime = ["websockets (>=13,<16)"] -voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"] - -[[package]] -name = "orjson" -version = "3.10.18" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = false -python-versions = ">=3.9" -files = [ - {file = "orjson-3.10.18-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a45e5d68066b408e4bc383b6e4ef05e717c65219a9e1390abc6155a520cac402"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be3b9b143e8b9db05368b13b04c84d37544ec85bb97237b3a923f076265ec89c"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9b0aa09745e2c9b3bf779b096fa71d1cc2d801a604ef6dd79c8b1bfef52b2f92"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53a245c104d2792e65c8d225158f2b8262749ffe64bc7755b00024757d957a13"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9495ab2611b7f8a0a8a505bcb0f0cbdb5469caafe17b0e404c3c746f9900469"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73be1cbcebadeabdbc468f82b087df435843c809cd079a565fb16f0f3b23238f"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8936ee2679e38903df158037a2f1c108129dee218975122e37847fb1d4ac68"}, - {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7115fcbc8525c74e4c2b608129bef740198e9a120ae46184dac7683191042056"}, - {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:771474ad34c66bc4d1c01f645f150048030694ea5b2709b87d3bda273ffe505d"}, - {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7c14047dbbea52886dd87169f21939af5d55143dad22d10db6a7514f058156a8"}, - {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:641481b73baec8db14fdf58f8967e52dc8bda1f2aba3aa5f5c1b07ed6df50b7f"}, - {file = "orjson-3.10.18-cp310-cp310-win32.whl", hash = "sha256:607eb3ae0909d47280c1fc657c4284c34b785bae371d007595633f4b1a2bbe06"}, - {file = "orjson-3.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:8770432524ce0eca50b7efc2a9a5f486ee0113a5fbb4231526d414e6254eba92"}, - {file = "orjson-3.10.18-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e0a183ac3b8e40471e8d843105da6fbe7c070faab023be3b08188ee3f85719b8"}, - {file = "orjson-3.10.18-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:5ef7c164d9174362f85238d0cd4afdeeb89d9e523e4651add6a5d458d6f7d42d"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd14c5d99cdc7bf93f22b12ec3b294931518aa019e2a147e8aa2f31fd3240f7"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b672502323b6cd133c4af6b79e3bea36bad2d16bca6c1f645903fce83909a7a"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51f8c63be6e070ec894c629186b1c0fe798662b8687f3d9fdfa5e401c6bd7679"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f9478ade5313d724e0495d167083c6f3be0dd2f1c9c8a38db9a9e912cdaf947"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:187aefa562300a9d382b4b4eb9694806e5848b0cedf52037bb5c228c61bb66d4"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da552683bc9da222379c7a01779bddd0ad39dd699dd6300abaf43eadee38334"}, - {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e450885f7b47a0231979d9c49b567ed1c4e9f69240804621be87c40bc9d3cf17"}, - {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5e3c9cc2ba324187cd06287ca24f65528f16dfc80add48dc99fa6c836bb3137e"}, - {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:50ce016233ac4bfd843ac5471e232b865271d7d9d44cf9d33773bcd883ce442b"}, - {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b3ceff74a8f7ffde0b2785ca749fc4e80e4315c0fd887561144059fb1c138aa7"}, - {file = "orjson-3.10.18-cp311-cp311-win32.whl", hash = "sha256:fdba703c722bd868c04702cac4cb8c6b8ff137af2623bc0ddb3b3e6a2c8996c1"}, - {file = "orjson-3.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:c28082933c71ff4bc6ccc82a454a2bffcef6e1d7379756ca567c772e4fb3278a"}, - {file = "orjson-3.10.18-cp311-cp311-win_arm64.whl", hash = "sha256:a6c7c391beaedd3fa63206e5c2b7b554196f14debf1ec9deb54b5d279b1b46f5"}, - {file = "orjson-3.10.18-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:50c15557afb7f6d63bc6d6348e0337a880a04eaa9cd7c9d569bcb4e760a24753"}, - {file = "orjson-3.10.18-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:356b076f1662c9813d5fa56db7d63ccceef4c271b1fb3dd522aca291375fcf17"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:559eb40a70a7494cd5beab2d73657262a74a2c59aff2068fdba8f0424ec5b39d"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f3c29eb9a81e2fbc6fd7ddcfba3e101ba92eaff455b8d602bf7511088bbc0eae"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6612787e5b0756a171c7d81ba245ef63a3533a637c335aa7fcb8e665f4a0966f"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ac6bd7be0dcab5b702c9d43d25e70eb456dfd2e119d512447468f6405b4a69c"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9f72f100cee8dde70100406d5c1abba515a7df926d4ed81e20a9730c062fe9ad"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca85398d6d093dd41dc0983cbf54ab8e6afd1c547b6b8a311643917fbf4e0c"}, - {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22748de2a07fcc8781a70edb887abf801bb6142e6236123ff93d12d92db3d406"}, - {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3a83c9954a4107b9acd10291b7f12a6b29e35e8d43a414799906ea10e75438e6"}, - {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:303565c67a6c7b1f194c94632a4a39918e067bd6176a48bec697393865ce4f06"}, - {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:86314fdb5053a2f5a5d881f03fca0219bfdf832912aa88d18676a5175c6916b5"}, - {file = "orjson-3.10.18-cp312-cp312-win32.whl", hash = "sha256:187ec33bbec58c76dbd4066340067d9ece6e10067bb0cc074a21ae3300caa84e"}, - {file = "orjson-3.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:f9f94cf6d3f9cd720d641f8399e390e7411487e493962213390d1ae45c7814fc"}, - {file = "orjson-3.10.18-cp312-cp312-win_arm64.whl", hash = "sha256:3d600be83fe4514944500fa8c2a0a77099025ec6482e8087d7659e891f23058a"}, - {file = "orjson-3.10.18-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:69c34b9441b863175cc6a01f2935de994025e773f814412030f269da4f7be147"}, - {file = "orjson-3.10.18-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1ebeda919725f9dbdb269f59bc94f861afbe2a27dce5608cdba2d92772364d1c"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5adf5f4eed520a4959d29ea80192fa626ab9a20b2ea13f8f6dc58644f6927103"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7592bb48a214e18cd670974f289520f12b7aed1fa0b2e2616b8ed9e069e08595"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f872bef9f042734110642b7a11937440797ace8c87527de25e0c53558b579ccc"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0315317601149c244cb3ecef246ef5861a64824ccbcb8018d32c66a60a84ffbc"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0da26957e77e9e55a6c2ce2e7182a36a6f6b180ab7189315cb0995ec362e049"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb70d489bc79b7519e5803e2cc4c72343c9dc1154258adf2f8925d0b60da7c58"}, - {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e9e86a6af31b92299b00736c89caf63816f70a4001e750bda179e15564d7a034"}, - {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c382a5c0b5931a5fc5405053d36c1ce3fd561694738626c77ae0b1dfc0242ca1"}, - {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8e4b2ae732431127171b875cb2668f883e1234711d3c147ffd69fe5be51a8012"}, - {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d808e34ddb24fc29a4d4041dcfafbae13e129c93509b847b14432717d94b44f"}, - {file = "orjson-3.10.18-cp313-cp313-win32.whl", hash = "sha256:ad8eacbb5d904d5591f27dee4031e2c1db43d559edb8f91778efd642d70e6bea"}, - {file = "orjson-3.10.18-cp313-cp313-win_amd64.whl", hash = "sha256:aed411bcb68bf62e85588f2a7e03a6082cc42e5a2796e06e72a962d7c6310b52"}, - {file = "orjson-3.10.18-cp313-cp313-win_arm64.whl", hash = "sha256:f54c1385a0e6aba2f15a40d703b858bedad36ded0491e55d35d905b2c34a4cc3"}, - {file = "orjson-3.10.18-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95fae14225edfd699454e84f61c3dd938df6629a00c6ce15e704f57b58433bb"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5232d85f177f98e0cefabb48b5e7f60cff6f3f0365f9c60631fecd73849b2a82"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2783e121cafedf0d85c148c248a20470018b4ffd34494a68e125e7d5857655d1"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e54ee3722caf3db09c91f442441e78f916046aa58d16b93af8a91500b7bbf273"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2daf7e5379b61380808c24f6fc182b7719301739e4271c3ec88f2984a2d61f89"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f39b371af3add20b25338f4b29a8d6e79a8c7ed0e9dd49e008228a065d07781"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b819ed34c01d88c6bec290e6842966f8e9ff84b7694632e88341363440d4cc0"}, - {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2f6c57debaef0b1aa13092822cbd3698a1fb0209a9ea013a969f4efa36bdea57"}, - {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:755b6d61ffdb1ffa1e768330190132e21343757c9aa2308c67257cc81a1a6f5a"}, - {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce8d0a875a85b4c8579eab5ac535fb4b2a50937267482be402627ca7e7570ee3"}, - {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57b5d0673cbd26781bebc2bf86f99dd19bd5a9cb55f71cc4f66419f6b50f3d77"}, - {file = "orjson-3.10.18-cp39-cp39-win32.whl", hash = "sha256:951775d8b49d1d16ca8818b1f20c4965cae9157e7b562a2ae34d3967b8f21c8e"}, - {file = "orjson-3.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:fdd9d68f83f0bc4406610b1ac68bdcded8c5ee58605cc69e643a06f4d075f429"}, - {file = "orjson-3.10.18.tar.gz", hash = "sha256:e8da3947d92123eda795b68228cafe2724815621fe35e8e320a9e9593a4bcd53"}, -] - -[[package]] -name = "packaging" -version = "24.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, -] - -[[package]] -name = "pdfminer-six" -version = "20250327" -description = "PDF parser and analyzer" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pdfminer_six-20250327-py3-none-any.whl", hash = "sha256:5af494c85b1ecb7c28df5e3a26bb5234a8226a307503d9a09f4958bc154b16a9"}, - {file = "pdfminer_six-20250327.tar.gz", hash = "sha256:57f6c34c2702df04cfa3191622a3db0a922ced686d35283232b00094f8914aa1"}, -] - -[package.dependencies] -charset-normalizer = ">=2.0.0" -cryptography = ">=36.0.0" - -[package.extras] -dev = ["atheris", "black", "mypy (==0.931)", "nox", "pytest"] -docs = ["sphinx", "sphinx-argparse"] -image = ["Pillow"] - -[[package]] -name = "pdfplumber" -version = "0.11.6" -description = "Plumb a PDF for detailed information about each char, rectangle, and line." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pdfplumber-0.11.6-py3-none-any.whl", hash = "sha256:169fc2b8dbf328c81a4e9bab30af0c304ad4b472fd7816616eabdb79dc5d9d17"}, - {file = "pdfplumber-0.11.6.tar.gz", hash = "sha256:d0f419e031641d9eac70dc18c60e1fc3ca2ec28cce7e149644923c030a0003ff"}, -] - -[package.dependencies] -"pdfminer.six" = "20250327" -Pillow = ">=9.1" -pypdfium2 = ">=4.18.0" - -[[package]] -name = "pillow" -version = "11.2.1" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pillow-11.2.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:d57a75d53922fc20c165016a20d9c44f73305e67c351bbc60d1adaf662e74047"}, - {file = "pillow-11.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:127bf6ac4a5b58b3d32fc8289656f77f80567d65660bc46f72c0d77e6600cc95"}, - {file = "pillow-11.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ba4be812c7a40280629e55ae0b14a0aafa150dd6451297562e1764808bbe61"}, - {file = "pillow-11.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8bd62331e5032bc396a93609982a9ab6b411c05078a52f5fe3cc59234a3abd1"}, - {file = "pillow-11.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:562d11134c97a62fe3af29581f083033179f7ff435f78392565a1ad2d1c2c45c"}, - {file = "pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c97209e85b5be259994eb5b69ff50c5d20cca0f458ef9abd835e262d9d88b39d"}, - {file = "pillow-11.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0c3e6d0f59171dfa2e25d7116217543310908dfa2770aa64b8f87605f8cacc97"}, - {file = "pillow-11.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc1c3bc53befb6096b84165956e886b1729634a799e9d6329a0c512ab651e579"}, - {file = "pillow-11.2.1-cp310-cp310-win32.whl", hash = "sha256:312c77b7f07ab2139924d2639860e084ec2a13e72af54d4f08ac843a5fc9c79d"}, - {file = "pillow-11.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9bc7ae48b8057a611e5fe9f853baa88093b9a76303937449397899385da06fad"}, - {file = "pillow-11.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:2728567e249cdd939f6cc3d1f049595c66e4187f3c34078cbc0a7d21c47482d2"}, - {file = "pillow-11.2.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35ca289f712ccfc699508c4658a1d14652e8033e9b69839edf83cbdd0ba39e70"}, - {file = "pillow-11.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0409af9f829f87a2dfb7e259f78f317a5351f2045158be321fd135973fff7bf"}, - {file = "pillow-11.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4e5c5edee874dce4f653dbe59db7c73a600119fbea8d31f53423586ee2aafd7"}, - {file = "pillow-11.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b93a07e76d13bff9444f1a029e0af2964e654bfc2e2c2d46bfd080df5ad5f3d8"}, - {file = "pillow-11.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e6def7eed9e7fa90fde255afaf08060dc4b343bbe524a8f69bdd2a2f0018f600"}, - {file = "pillow-11.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8f4f3724c068be008c08257207210c138d5f3731af6c155a81c2b09a9eb3a788"}, - {file = "pillow-11.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a0a6709b47019dff32e678bc12c63008311b82b9327613f534e496dacaefb71e"}, - {file = "pillow-11.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f6b0c664ccb879109ee3ca702a9272d877f4fcd21e5eb63c26422fd6e415365e"}, - {file = "pillow-11.2.1-cp311-cp311-win32.whl", hash = "sha256:cc5d875d56e49f112b6def6813c4e3d3036d269c008bf8aef72cd08d20ca6df6"}, - {file = "pillow-11.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:0f5c7eda47bf8e3c8a283762cab94e496ba977a420868cb819159980b6709193"}, - {file = "pillow-11.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:4d375eb838755f2528ac8cbc926c3e31cc49ca4ad0cf79cff48b20e30634a4a7"}, - {file = "pillow-11.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:78afba22027b4accef10dbd5eed84425930ba41b3ea0a86fa8d20baaf19d807f"}, - {file = "pillow-11.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78092232a4ab376a35d68c4e6d5e00dfd73454bd12b230420025fbe178ee3b0b"}, - {file = "pillow-11.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a5f306095c6780c52e6bbb6109624b95c5b18e40aab1c3041da3e9e0cd3e2d"}, - {file = "pillow-11.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c7b29dbd4281923a2bfe562acb734cee96bbb129e96e6972d315ed9f232bef4"}, - {file = "pillow-11.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3e645b020f3209a0181a418bffe7b4a93171eef6c4ef6cc20980b30bebf17b7d"}, - {file = "pillow-11.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b2dbea1012ccb784a65349f57bbc93730b96e85b42e9bf7b01ef40443db720b4"}, - {file = "pillow-11.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:da3104c57bbd72948d75f6a9389e6727d2ab6333c3617f0a89d72d4940aa0443"}, - {file = "pillow-11.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:598174aef4589af795f66f9caab87ba4ff860ce08cd5bb447c6fc553ffee603c"}, - {file = "pillow-11.2.1-cp312-cp312-win32.whl", hash = "sha256:1d535df14716e7f8776b9e7fee118576d65572b4aad3ed639be9e4fa88a1cad3"}, - {file = "pillow-11.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:14e33b28bf17c7a38eede290f77db7c664e4eb01f7869e37fa98a5aa95978941"}, - {file = "pillow-11.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:21e1470ac9e5739ff880c211fc3af01e3ae505859392bf65458c224d0bf283eb"}, - {file = "pillow-11.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28"}, - {file = "pillow-11.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830"}, - {file = "pillow-11.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0"}, - {file = "pillow-11.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1"}, - {file = "pillow-11.2.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f"}, - {file = "pillow-11.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155"}, - {file = "pillow-11.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14"}, - {file = "pillow-11.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b"}, - {file = "pillow-11.2.1-cp313-cp313-win32.whl", hash = "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2"}, - {file = "pillow-11.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691"}, - {file = "pillow-11.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c"}, - {file = "pillow-11.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22"}, - {file = "pillow-11.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7"}, - {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16"}, - {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b"}, - {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406"}, - {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91"}, - {file = "pillow-11.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751"}, - {file = "pillow-11.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9"}, - {file = "pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd"}, - {file = "pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e"}, - {file = "pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681"}, - {file = "pillow-11.2.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:7491cf8a79b8eb867d419648fff2f83cb0b3891c8b36da92cc7f1931d46108c8"}, - {file = "pillow-11.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b02d8f9cb83c52578a0b4beadba92e37d83a4ef11570a8688bbf43f4ca50909"}, - {file = "pillow-11.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:014ca0050c85003620526b0ac1ac53f56fc93af128f7546623cc8e31875ab928"}, - {file = "pillow-11.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3692b68c87096ac6308296d96354eddd25f98740c9d2ab54e1549d6c8aea9d79"}, - {file = "pillow-11.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f781dcb0bc9929adc77bad571b8621ecb1e4cdef86e940fe2e5b5ee24fd33b35"}, - {file = "pillow-11.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:2b490402c96f907a166615e9a5afacf2519e28295f157ec3a2bb9bd57de638cb"}, - {file = "pillow-11.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dd6b20b93b3ccc9c1b597999209e4bc5cf2853f9ee66e3fc9a400a78733ffc9a"}, - {file = "pillow-11.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4b835d89c08a6c2ee7781b8dd0a30209a8012b5f09c0a665b65b0eb3560b6f36"}, - {file = "pillow-11.2.1-cp39-cp39-win32.whl", hash = "sha256:b10428b3416d4f9c61f94b494681280be7686bda15898a3a9e08eb66a6d92d67"}, - {file = "pillow-11.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:6ebce70c3f486acf7591a3d73431fa504a4e18a9b97ff27f5f47b7368e4b9dd1"}, - {file = "pillow-11.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:c27476257b2fdcd7872d54cfd119b3a9ce4610fb85c8e32b70b42e3680a29a1e"}, - {file = "pillow-11.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9b7b0d4fd2635f54ad82785d56bc0d94f147096493a79985d0ab57aedd563156"}, - {file = "pillow-11.2.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:aa442755e31c64037aa7c1cb186e0b369f8416c567381852c63444dd666fb772"}, - {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d3348c95b766f54b76116d53d4cb171b52992a1027e7ca50c81b43b9d9e363"}, - {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85d27ea4c889342f7e35f6d56e7e1cb345632ad592e8c51b693d7b7556043ce0"}, - {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bf2c33d6791c598142f00c9c4c7d47f6476731c31081331664eb26d6ab583e01"}, - {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e616e7154c37669fc1dfc14584f11e284e05d1c650e1c0f972f281c4ccc53193"}, - {file = "pillow-11.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:39ad2e0f424394e3aebc40168845fee52df1394a4673a6ee512d840d14ab3013"}, - {file = "pillow-11.2.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:80f1df8dbe9572b4b7abdfa17eb5d78dd620b1d55d9e25f834efdbee872d3aed"}, - {file = "pillow-11.2.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ea926cfbc3957090becbcbbb65ad177161a2ff2ad578b5a6ec9bb1e1cd78753c"}, - {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:738db0e0941ca0376804d4de6a782c005245264edaa253ffce24e5a15cbdc7bd"}, - {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db98ab6565c69082ec9b0d4e40dd9f6181dab0dd236d26f7a50b8b9bfbd5076"}, - {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:036e53f4170e270ddb8797d4c590e6dd14d28e15c7da375c18978045f7e6c37b"}, - {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:14f73f7c291279bd65fda51ee87affd7c1e097709f7fdd0188957a16c264601f"}, - {file = "pillow-11.2.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:208653868d5c9ecc2b327f9b9ef34e0e42a4cdd172c2988fd81d62d2bc9bc044"}, - {file = "pillow-11.2.1.tar.gz", hash = "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] -fpx = ["olefile"] -mic = ["olefile"] -test-arrow = ["pyarrow"] -tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions"] -xmp = ["defusedxml"] - -[[package]] -name = "propcache" -version = "0.3.1" -description = "Accelerated property cache" -optional = false -python-versions = ">=3.9" -files = [ - {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, - {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, - {file = "propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136"}, - {file = "propcache-0.3.1-cp310-cp310-win32.whl", hash = "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42"}, - {file = "propcache-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833"}, - {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5"}, - {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371"}, - {file = "propcache-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9"}, - {file = "propcache-0.3.1-cp311-cp311-win32.whl", hash = "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005"}, - {file = "propcache-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7"}, - {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723"}, - {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976"}, - {file = "propcache-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7"}, - {file = "propcache-0.3.1-cp312-cp312-win32.whl", hash = "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b"}, - {file = "propcache-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"}, - {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8"}, - {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f"}, - {file = "propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef"}, - {file = "propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24"}, - {file = "propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"}, - {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f"}, - {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c"}, - {file = "propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a"}, - {file = "propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d"}, - {file = "propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e"}, - {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6"}, - {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf"}, - {file = "propcache-0.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe"}, - {file = "propcache-0.3.1-cp39-cp39-win32.whl", hash = "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64"}, - {file = "propcache-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566"}, - {file = "propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40"}, - {file = "propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf"}, -] - -[[package]] -name = "proto-plus" -version = "1.26.1" -description = "Beautiful, Pythonic protocol buffers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "proto_plus-1.26.1-py3-none-any.whl", hash = "sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66"}, - {file = "proto_plus-1.26.1.tar.gz", hash = "sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012"}, -] - -[package.dependencies] -protobuf = ">=3.19.0,<7.0.0" - -[package.extras] -testing = ["google-api-core (>=1.31.5)"] - -[[package]] -name = "protobuf" -version = "6.30.2" -description = "" -optional = false -python-versions = ">=3.9" -files = [ - {file = "protobuf-6.30.2-cp310-abi3-win32.whl", hash = "sha256:b12ef7df7b9329886e66404bef5e9ce6a26b54069d7f7436a0853ccdeb91c103"}, - {file = "protobuf-6.30.2-cp310-abi3-win_amd64.whl", hash = "sha256:7653c99774f73fe6b9301b87da52af0e69783a2e371e8b599b3e9cb4da4b12b9"}, - {file = "protobuf-6.30.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:0eb523c550a66a09a0c20f86dd554afbf4d32b02af34ae53d93268c1f73bc65b"}, - {file = "protobuf-6.30.2-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:50f32cc9fd9cb09c783ebc275611b4f19dfdfb68d1ee55d2f0c7fa040df96815"}, - {file = "protobuf-6.30.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4f6c687ae8efae6cf6093389a596548214467778146b7245e886f35e1485315d"}, - {file = "protobuf-6.30.2-cp39-cp39-win32.whl", hash = "sha256:524afedc03b31b15586ca7f64d877a98b184f007180ce25183d1a5cb230ee72b"}, - {file = "protobuf-6.30.2-cp39-cp39-win_amd64.whl", hash = "sha256:acec579c39c88bd8fbbacab1b8052c793efe83a0a5bd99db4a31423a25c0a0e2"}, - {file = "protobuf-6.30.2-py3-none-any.whl", hash = "sha256:ae86b030e69a98e08c77beab574cbcb9fff6d031d57209f574a5aea1445f4b51"}, - {file = "protobuf-6.30.2.tar.gz", hash = "sha256:35c859ae076d8c56054c25b59e5e59638d86545ed6e2b6efac6be0b6ea3ba048"}, -] - -[[package]] -name = "py-rust-stemmers" -version = "0.1.5" -description = "Fast and parallel snowball stemmer" -optional = false -python-versions = "*" -files = [ - {file = "py_rust_stemmers-0.1.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bfbd9034ae00419ff2154e33b8f5b4c4d99d1f9271f31ed059e5c7e9fa005844"}, - {file = "py_rust_stemmers-0.1.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7162ae66df2bb0fc39b350c24a049f5f5151c03c046092ba095c2141ec223a2"}, - {file = "py_rust_stemmers-0.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da6de2b694af6227ba8c5a0447d4e0ef69991e63ee558b969f90c415f33e54d0"}, - {file = "py_rust_stemmers-0.1.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a3abbd6d26722951a04550fff55460c0f26819169c23286e11ea25c645be6140"}, - {file = "py_rust_stemmers-0.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:019221c57a7bcc51097fa3f124b62d0577b5b6167184ee51abd3aea822d78f69"}, - {file = "py_rust_stemmers-0.1.5-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8dd5824194c279ee07f2675a55b3d728dfeec69a4b3c27329fab9b2ff5063c91"}, - {file = "py_rust_stemmers-0.1.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7cf4d69bf20cec373ba0e89df3d98549b1a0cfb130dbd859a50ed772dd044546"}, - {file = "py_rust_stemmers-0.1.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:b42eb52609ac958e7fcc441395457dc5183397e8014e954f4aed78de210837b9"}, - {file = "py_rust_stemmers-0.1.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c836aeb53409a44f38b153106374fe780099a7c976c582c5ae952061ff5d2fed"}, - {file = "py_rust_stemmers-0.1.5-cp310-none-win_amd64.whl", hash = "sha256:39550089f7a021a3a97fec2ff0d4ad77e471f0a65c0f100919555e60a4daabf0"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:e644987edaf66919f5a9e4693336930f98d67b790857890623a431bb77774c84"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:910d87d39ba75da1fe3d65df88b926b4b454ada8d73893cbd36e258a8a648158"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31ff4fb9417cec35907c18a6463e3d5a4941a5aa8401f77fbb4156b3ada69e3f"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07b3b8582313ef8a7f544acf2c887f27c3dd48c5ddca028fa0f498de7380e24f"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:804944eeb5c5559443d81f30c34d6e83c6292d72423f299e42f9d71b9d240941"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c52c5c326de78c70cfc71813fa56818d1bd4894264820d037d2be0e805b477bd"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8f374c0f26ef35fb87212686add8dff394bcd9a1364f14ce40fe11504e25e30"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:0ae0540453843bc36937abb54fdbc0d5d60b51ef47aa9667afd05af9248e09eb"}, - {file = "py_rust_stemmers-0.1.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:85944262c248ea30444155638c9e148a3adc61fe51cf9a3705b4055b564ec95d"}, - {file = "py_rust_stemmers-0.1.5-cp311-none-win_amd64.whl", hash = "sha256:147234020b3eefe6e1a962173e41d8cf1dbf5d0689f3cd60e3022d1ac5c2e203"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:29772837126a28263bf54ecd1bc709dd569d15a94d5e861937813ce51e8a6df4"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d62410ada44a01e02974b85d45d82f4b4c511aae9121e5f3c1ba1d0bea9126b"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b28ef729a4c83c7d9418be3c23c0372493fcccc67e86783ff04596ef8a208cdf"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a979c3f4ff7ad94a0d4cf566ca7bfecebb59e66488cc158e64485cf0c9a7879f"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c3593d895453fa06bf70a7b76d6f00d06def0f91fc253fe4260920650c5e078"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:96ccc7fd042ffc3f7f082f2223bb7082ed1423aa6b43d5d89ab23e321936c045"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef18cfced2c9c676e0d7d172ba61c3fab2aa6969db64cc8f5ca33a7759efbefe"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:541d4b5aa911381e3d37ec483abb6a2cf2351b4f16d5e8d77f9aa2722956662a"}, - {file = "py_rust_stemmers-0.1.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ffd946a36e9ac17ca96821963663012e04bc0ee94d21e8b5ae034721070b436c"}, - {file = "py_rust_stemmers-0.1.5-cp312-none-win_amd64.whl", hash = "sha256:6ed61e1207f3b7428e99b5d00c055645c6415bb75033bff2d06394cbe035fd8e"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:398b3a843a9cd4c5d09e726246bc36f66b3d05b0a937996814e91f47708f5db5"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4e308fc7687901f0c73603203869908f3156fa9c17c4ba010a7fcc98a7a1c5f2"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f9efc4da5e734bdd00612e7506de3d0c9b7abc4b89d192742a0569d0d1fe749"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc2cc8d2b36bc05b8b06506199ac63d437360ae38caefd98cd19e479d35afd42"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a231dc6f0b2a5f12a080dfc7abd9e6a4ea0909290b10fd0a4620e5a0f52c3d17"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5845709d48afc8b29e248f42f92431155a3d8df9ba30418301c49c6072b181b0"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e48bfd5e3ce9d223bfb9e634dc1425cf93ee57eef6f56aa9a7120ada3990d4be"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:35d32f6e7bdf6fd90e981765e32293a8be74def807147dea9fdc1f65d6ce382f"}, - {file = "py_rust_stemmers-0.1.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:191ea8bf922c984631ffa20bf02ef0ad7eec0465baeaed3852779e8f97c7e7a3"}, - {file = "py_rust_stemmers-0.1.5-cp313-none-win_amd64.whl", hash = "sha256:e564c9efdbe7621704e222b53bac265b0e4fbea788f07c814094f0ec6b80adcf"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:7720c4d472653f7301537fb289d10f827b25c9b998d1b58403181180097212ee"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:53e2ad505d15959fd86a8b204e55fd73290cf5fdba0020fd0d9323d7fe225962"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa7d6bd88cb99933178bc1e9f803d921c13274a2fe52325d40f8d35046e929c3"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f240be882e9afcc8eeb5860c13bf37cf666d99179da49b0cd19ac3cbb4871423"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52c397e314a02319d7a0f7d2cd845557a3ba145f8318a6f2e119b46056bf4379"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:b5ae7a3d1d015e72817f8fe6b35bb762681b7197fee2d80232528fff68be7576"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f161278168a7ad5ace2909454f2ee87d2c815bfd1bfec5a80fac36de31bf96e4"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:918ce5252570febdf8accded210046e7f3edb933eac5599fa40e773ff42c7a8f"}, - {file = "py_rust_stemmers-0.1.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0db3d2fff5775060c78a67e72132fa8802ace50175da26bf4661e4071aa10094"}, - {file = "py_rust_stemmers-0.1.5-cp38-none-win_amd64.whl", hash = "sha256:9982b5f915e8e5b7ca83104f57cc4e7668b900d87232eea2c6f432d2009f0d18"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:67b2753cadb0bdb827ae8088ef5ead44408b8ff92d2bc8926231c7e056810e4a"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68f1fd369c4be5d63c2f697a07511c868f41875a464aab0f564071131d84bab4"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec840a009de79a9a8231090222a8fdc07043d337e2ef38843daae88f0479ae7f"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1816ade2c5148337cec16c115e210c8e3341c4cde5b591bf43224bd2168e5eda"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d095b359d6e14e219b6fbff074f7b53e845f70e6d7fc9e63b50f192677c94cf5"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5bc04bd5f72ee5d9cfb1530c56e450de7d80ed4504d5013f02f522cf8ea9b474"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7687586cf4e34f230ee154b5f034b9c568409aaef997c888d4749e4bdbab79fd"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:544e3e5e0174924f2dce3248094d9632c3106c1619a03141dbfb8bfdb29b0925"}, - {file = "py_rust_stemmers-0.1.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:77b96f1141de6db8b550052ef7f90099e3c3e10bb0d472a4af7a30af776252f8"}, - {file = "py_rust_stemmers-0.1.5-cp39-none-win_amd64.whl", hash = "sha256:c3078476318a4697dc216bb6c615b59d1ee02058202c2fa91ccfb4bebf412e22"}, - {file = "py_rust_stemmers-0.1.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f8c6596f04e7a6df2a5cc18854d31b133d2a69a8c494fa49853fe174d8739d14"}, - {file = "py_rust_stemmers-0.1.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:154c27f5d576fabf2bacf53620f014562af4c6cf9eb09ba7477830f2be868902"}, - {file = "py_rust_stemmers-0.1.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec42b66927b62fd57328980b6c7004fe85e8fad89c952e8718da68b805a119e3"}, - {file = "py_rust_stemmers-0.1.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57b061c3b4af9e409d009d729b21bc53dabe47116c955ccf0b642a5a2d438f93"}, - {file = "py_rust_stemmers-0.1.5.tar.gz", hash = "sha256:e9c310cfb5c2470d7c7c8a0484725965e7cab8b1237e106a0863d5741da3e1f7"}, -] - -[[package]] -name = "pyasn1" -version = "0.6.1" -description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, - {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, -] - -[[package]] -name = "pyasn1-modules" -version = "0.4.2" -description = "A collection of ASN.1-based protocols modules" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, - {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, -] - -[package.dependencies] -pyasn1 = ">=0.6.1,<0.7.0" - -[[package]] -name = "pycparser" -version = "2.22" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, - {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, -] - -[[package]] -name = "pydantic" -version = "2.11.4" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pydantic-2.11.4-py3-none-any.whl", hash = "sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb"}, - {file = "pydantic-2.11.4.tar.gz", hash = "sha256:32738d19d63a226a52eed76645a98ee07c1f410ee41d93b4afbfa85ed8111c2d"}, -] - -[package.dependencies] -annotated-types = ">=0.6.0" -pydantic-core = "2.33.2" -typing-extensions = ">=4.12.2" -typing-inspection = ">=0.4.0" - -[package.extras] -email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] - -[[package]] -name = "pydantic-core" -version = "2.33.2" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, - {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, - {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, - {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, - {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, - {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, - {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, - {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, - {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, - {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, - {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, - {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, - {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pydantic-settings" -version = "2.9.1" -description = "Settings management using Pydantic" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pydantic_settings-2.9.1-py3-none-any.whl", hash = "sha256:59b4f431b1defb26fe620c71a7d3968a710d719f5f4cdbbdb7926edeb770f6ef"}, - {file = "pydantic_settings-2.9.1.tar.gz", hash = "sha256:c509bf79d27563add44e8446233359004ed85066cd096d8b510f715e6ef5d268"}, -] - -[package.dependencies] -pydantic = ">=2.7.0" -python-dotenv = ">=0.21.0" -typing-inspection = ">=0.4.0" - -[package.extras] -aws-secrets-manager = ["boto3 (>=1.35.0)", "boto3-stubs[secretsmanager]"] -azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] -gcp-secret-manager = ["google-cloud-secret-manager (>=2.23.1)"] -toml = ["tomli (>=2.0.1)"] -yaml = ["pyyaml (>=6.0.1)"] - -[[package]] -name = "pygments" -version = "2.19.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, - {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pypdfium2" -version = "4.30.1" -description = "Python bindings to PDFium" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pypdfium2-4.30.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:e07c47633732cc18d890bb7e965ad28a9c5a932e548acb928596f86be2e5ae37"}, - {file = "pypdfium2-4.30.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ea2d44e96d361123b67b00f527017aa9c847c871b5714e013c01c3eb36a79fe"}, - {file = "pypdfium2-4.30.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de7a3a36803171b3f66911131046d65a732f9e7834438191cb58235e6163c4e"}, - {file = "pypdfium2-4.30.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8a4231efb13170354f568c722d6540b8d5b476b08825586d48ef70c40d16e03"}, - {file = "pypdfium2-4.30.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f434a4934e8244aa95343ffcf24e9ad9f120dbb4785f631bb40a88c39292493"}, - {file = "pypdfium2-4.30.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f454032a0bc7681900170f67d8711b3942824531e765f91c2f5ce7937f999794"}, - {file = "pypdfium2-4.30.1-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:bbf9130a72370ee9d602e39949b902db669a2a1c24746a91e5586eb829055d9f"}, - {file = "pypdfium2-4.30.1-py3-none-musllinux_1_1_i686.whl", hash = "sha256:5cb52884b1583b96e94fd78542c63bb42e06df5e8f9e52f8f31f5ad5a1e53367"}, - {file = "pypdfium2-4.30.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:1a9e372bd4867ff223cc8c338e33fe11055dad12f22885950fc27646cc8d9122"}, - {file = "pypdfium2-4.30.1-py3-none-win32.whl", hash = "sha256:421f1cf205e213e07c1f2934905779547f4f4a2ff2f59dde29da3d511d3fc806"}, - {file = "pypdfium2-4.30.1-py3-none-win_amd64.whl", hash = "sha256:598a7f20264ab5113853cba6d86c4566e4356cad037d7d1f849c8c9021007e05"}, - {file = "pypdfium2-4.30.1-py3-none-win_arm64.whl", hash = "sha256:c2b6d63f6d425d9416c08d2511822b54b8e3ac38e639fc41164b1d75584b3a8c"}, - {file = "pypdfium2-4.30.1.tar.gz", hash = "sha256:5f5c7c6d03598e107d974f66b220a49436aceb191da34cda5f692be098a814ce"}, -] - -[[package]] -name = "pyreadline3" -version = "3.5.4" -description = "A python implementation of GNU readline." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, - {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, -] - -[package.extras] -dev = ["build", "flake8", "mypy", "pytest", "twine"] - -[[package]] -name = "python-docx" -version = "1.1.2" -description = "Create, read, and update Microsoft Word .docx files." -optional = false -python-versions = ">=3.7" -files = [ - {file = "python_docx-1.1.2-py3-none-any.whl", hash = "sha256:08c20d6058916fb19853fcf080f7f42b6270d89eac9fa5f8c15f691c0017fabe"}, - {file = "python_docx-1.1.2.tar.gz", hash = "sha256:0cf1f22e95b9002addca7948e16f2cd7acdfd498047f1941ca5d293db7762efd"}, -] - -[package.dependencies] -lxml = ">=3.1.0" -typing-extensions = ">=4.9.0" - -[[package]] -name = "python-dotenv" -version = "1.1.0" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.9" -files = [ - {file = "python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"}, - {file = "python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "python-multipart" -version = "0.0.20" -description = "A streaming multipart parser for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"}, - {file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"}, -] - -[[package]] -name = "python-pptx" -version = "1.0.2" -description = "Create, read, and update PowerPoint 2007+ (.pptx) files." -optional = false -python-versions = ">=3.8" -files = [ - {file = "python_pptx-1.0.2-py3-none-any.whl", hash = "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba"}, - {file = "python_pptx-1.0.2.tar.gz", hash = "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095"}, -] - -[package.dependencies] -lxml = ">=3.1.0" -Pillow = ">=3.3.2" -typing-extensions = ">=4.9.0" -XlsxWriter = ">=0.5.7" - -[[package]] -name = "pyyaml" -version = "6.0.2" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, -] - -[[package]] -name = "regex" -version = "2024.11.6" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.8" -files = [ - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, - {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, - {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, - {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, - {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, - {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, - {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, - {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, - {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, - {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, - {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, - {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, - {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, - {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, -] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[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 = "requests-toolbelt" -version = "1.0.0" -description = "A utility belt for advanced users of python-requests" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, - {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, -] - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" - -[[package]] -name = "rich" -version = "14.0.0" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"}, - {file = "rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "rich-toolkit" -version = "0.14.5" -description = "Rich toolkit for building command-line applications" -optional = false -python-versions = ">=3.8" -files = [ - {file = "rich_toolkit-0.14.5-py3-none-any.whl", hash = "sha256:2fe9846ecbf5d0cdf236c7f43452b68d9da1436a81594aba6b79b3c48b05703b"}, - {file = "rich_toolkit-0.14.5.tar.gz", hash = "sha256:1cb7a3fa0bdbf35793460708664f3f797e8b18cedec9cd41a7e6125e4bc6272b"}, -] - -[package.dependencies] -click = ">=8.1.7" -rich = ">=13.7.1" -typing-extensions = ">=4.12.2" - -[[package]] -name = "rsa" -version = "4.9.1" -description = "Pure-Python RSA implementation" -optional = false -python-versions = "<4,>=3.6" -files = [ - {file = "rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762"}, - {file = "rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75"}, -] - -[package.dependencies] -pyasn1 = ">=0.1.3" - -[[package]] -name = "shellingham" -version = "1.5.4" -description = "Tool to Detect Surrounding Shell" -optional = false -python-versions = ">=3.7" -files = [ - {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, - {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, -] - -[[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 = "sqlalchemy" -version = "2.0.40" -description = "Database Abstraction Library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "SQLAlchemy-2.0.40-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bece9527f5a98466d67fb5d34dc560c4da964240d8b09024bb21c1246545e04e"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:8bb131ffd2165fae48162c7bbd0d97c84ab961deea9b8bab16366543deeab625"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9408fd453d5f8990405cc9def9af46bfbe3183e6110401b407c2d073c3388f47"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-win32.whl", hash = "sha256:00a494ea6f42a44c326477b5bee4e0fc75f6a80c01570a32b57e89cf0fbef85a"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-win_amd64.whl", hash = "sha256:c7b927155112ac858357ccf9d255dd8c044fd9ad2dc6ce4c4149527c901fa4c3"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-win32.whl", hash = "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-win_amd64.whl", hash = "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-win32.whl", hash = "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-win_amd64.whl", hash = "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-win32.whl", hash = "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-win_amd64.whl", hash = "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-win32.whl", hash = "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-win_amd64.whl", hash = "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:50f5885bbed261fc97e2e66c5156244f9704083a674b8d17f24c72217d29baf5"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf0e99cdb600eabcd1d65cdba0d3c91418fee21c4aa1d28db47d095b1064a7d8"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe147fcd85aaed53ce90645c91ed5fca0cc88a797314c70dfd9d35925bd5d106"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf7cee56bd552385c1ee39af360772fbfc2f43be005c78d1140204ad6148438"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4aeb939bcac234b88e2d25d5381655e8353fe06b4e50b1c55ecffe56951d18c2"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c268b5100cfeaa222c40f55e169d484efa1384b44bf9ca415eae6d556f02cb08"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-win32.whl", hash = "sha256:46628ebcec4f23a1584fb52f2abe12ddb00f3bb3b7b337618b80fc1b51177aff"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-win_amd64.whl", hash = "sha256:7e0505719939e52a7b0c65d20e84a6044eb3712bb6f239c6b1db77ba8e173a37"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c884de19528e0fcd9dc34ee94c810581dd6e74aef75437ff17e696c2bfefae3e"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1abb387710283fc5983d8a1209d9696a4eae9db8d7ac94b402981fe2fe2e39ad"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cfa124eda500ba4b0d3afc3e91ea27ed4754e727c7f025f293a22f512bcd4c9"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6b28d303b9d57c17a5164eb1fd2d5119bb6ff4413d5894e74873280483eeb5"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b5a5bbe29c10c5bfd63893747a1bf6f8049df607638c786252cb9243b86b6706"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f0fda83e113bb0fb27dc003685f32a5dcb99c9c4f41f4fa0838ac35265c23b5c"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-win32.whl", hash = "sha256:957f8d85d5e834397ef78a6109550aeb0d27a53b5032f7a57f2451e1adc37e98"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-win_amd64.whl", hash = "sha256:1ffdf9c91428e59744f8e6f98190516f8e1d05eec90e936eb08b257332c5e870"}, - {file = "sqlalchemy-2.0.40-py3-none-any.whl", hash = "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a"}, - {file = "sqlalchemy-2.0.40.tar.gz", hash = "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00"}, -] - -[package.dependencies] -greenlet = {version = ">=1", markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} -typing-extensions = ">=4.6.0" - -[package.extras] -aiomysql = ["aiomysql (>=0.2.0)", "greenlet (>=1)"] -aioodbc = ["aioodbc", "greenlet (>=1)"] -aiosqlite = ["aiosqlite", "greenlet (>=1)", "typing_extensions (!=3.10.0.1)"] -asyncio = ["greenlet (>=1)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (>=1)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] -mssql = ["pyodbc"] -mssql-pymssql = ["pymssql"] -mssql-pyodbc = ["pyodbc"] -mypy = ["mypy (>=0.910)"] -mysql = ["mysqlclient (>=1.4.0)"] -mysql-connector = ["mysql-connector-python"] -oracle = ["cx_oracle (>=8)"] -oracle-oracledb = ["oracledb (>=1.0.1)"] -postgresql = ["psycopg2 (>=2.7)"] -postgresql-asyncpg = ["asyncpg", "greenlet (>=1)"] -postgresql-pg8000 = ["pg8000 (>=1.29.1)"] -postgresql-psycopg = ["psycopg (>=3.0.7)"] -postgresql-psycopg2binary = ["psycopg2-binary"] -postgresql-psycopg2cffi = ["psycopg2cffi"] -postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] -pymysql = ["pymysql"] -sqlcipher = ["sqlcipher3_binary"] - -[[package]] -name = "sqlmodel" -version = "0.0.24" -description = "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness." -optional = false -python-versions = ">=3.7" -files = [ - {file = "sqlmodel-0.0.24-py3-none-any.whl", hash = "sha256:6778852f09370908985b667d6a3ab92910d0d5ec88adcaf23dbc242715ff7193"}, - {file = "sqlmodel-0.0.24.tar.gz", hash = "sha256:cc5c7613c1a5533c9c7867e1aab2fd489a76c9e8a061984da11b4e613c182423"}, -] - -[package.dependencies] -pydantic = ">=1.10.13,<3.0.0" -SQLAlchemy = ">=2.0.14,<2.1.0" - -[[package]] -name = "starlette" -version = "0.46.2" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.9" -files = [ - {file = "starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35"}, - {file = "starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5"}, -] - -[package.dependencies] -anyio = ">=3.6.2,<5" - -[package.extras] -full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] - -[[package]] -name = "sympy" -version = "1.14.0" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"}, - {file = "sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517"}, -] - -[package.dependencies] -mpmath = ">=1.1.0,<1.4" - -[package.extras] -dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] - -[[package]] -name = "tenacity" -version = "9.1.2" -description = "Retry code until it succeeds" -optional = false -python-versions = ">=3.9" -files = [ - {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, - {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, -] - -[package.extras] -doc = ["reno", "sphinx"] -test = ["pytest", "tornado (>=4.5)", "typeguard"] - -[[package]] -name = "tiktoken" -version = "0.9.0" -description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" -optional = false -python-versions = ">=3.9" -files = [ - {file = "tiktoken-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:586c16358138b96ea804c034b8acf3f5d3f0258bd2bc3b0227af4af5d622e382"}, - {file = "tiktoken-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9c59ccc528c6c5dd51820b3474402f69d9a9e1d656226848ad68a8d5b2e5108"}, - {file = "tiktoken-0.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0968d5beeafbca2a72c595e8385a1a1f8af58feaebb02b227229b69ca5357fd"}, - {file = "tiktoken-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a5fb085a6a3b7350b8fc838baf493317ca0e17bd95e8642f95fc69ecfed1de"}, - {file = "tiktoken-0.9.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15a2752dea63d93b0332fb0ddb05dd909371ededa145fe6a3242f46724fa7990"}, - {file = "tiktoken-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:26113fec3bd7a352e4b33dbaf1bd8948de2507e30bd95a44e2b1156647bc01b4"}, - {file = "tiktoken-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f32cc56168eac4851109e9b5d327637f15fd662aa30dd79f964b7c39fbadd26e"}, - {file = "tiktoken-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:45556bc41241e5294063508caf901bf92ba52d8ef9222023f83d2483a3055348"}, - {file = "tiktoken-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03935988a91d6d3216e2ec7c645afbb3d870b37bcb67ada1943ec48678e7ee33"}, - {file = "tiktoken-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b3d80aad8d2c6b9238fc1a5524542087c52b860b10cbf952429ffb714bc1136"}, - {file = "tiktoken-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b2a21133be05dc116b1d0372af051cd2c6aa1d2188250c9b553f9fa49301b336"}, - {file = "tiktoken-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:11a20e67fdf58b0e2dea7b8654a288e481bb4fc0289d3ad21291f8d0849915fb"}, - {file = "tiktoken-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e88f121c1c22b726649ce67c089b90ddda8b9662545a8aeb03cfef15967ddd03"}, - {file = "tiktoken-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a6600660f2f72369acb13a57fb3e212434ed38b045fd8cc6cdd74947b4b5d210"}, - {file = "tiktoken-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95e811743b5dfa74f4b227927ed86cbc57cad4df859cb3b643be797914e41794"}, - {file = "tiktoken-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99376e1370d59bcf6935c933cb9ba64adc29033b7e73f5f7569f3aad86552b22"}, - {file = "tiktoken-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:badb947c32739fb6ddde173e14885fb3de4d32ab9d8c591cbd013c22b4c31dd2"}, - {file = "tiktoken-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:5a62d7a25225bafed786a524c1b9f0910a1128f4232615bf3f8257a73aaa3b16"}, - {file = "tiktoken-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b0e8e05a26eda1249e824156d537015480af7ae222ccb798e5234ae0285dbdb"}, - {file = "tiktoken-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:27d457f096f87685195eea0165a1807fae87b97b2161fe8c9b1df5bd74ca6f63"}, - {file = "tiktoken-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf8ded49cddf825390e36dd1ad35cd49589e8161fdcb52aa25f0583e90a3e01"}, - {file = "tiktoken-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc156cb314119a8bb9748257a2eaebd5cc0753b6cb491d26694ed42fc7cb3139"}, - {file = "tiktoken-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cd69372e8c9dd761f0ab873112aba55a0e3e506332dd9f7522ca466e817b1b7a"}, - {file = "tiktoken-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5ea0edb6f83dc56d794723286215918c1cde03712cbbafa0348b33448faf5b95"}, - {file = "tiktoken-0.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c6386ca815e7d96ef5b4ac61e0048cd32ca5a92d5781255e13b31381d28667dc"}, - {file = "tiktoken-0.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75f6d5db5bc2c6274b674ceab1615c1778e6416b14705827d19b40e6355f03e0"}, - {file = "tiktoken-0.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e15b16f61e6f4625a57a36496d28dd182a8a60ec20a534c5343ba3cafa156ac7"}, - {file = "tiktoken-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebcec91babf21297022882344c3f7d9eed855931466c3311b1ad6b64befb3df"}, - {file = "tiktoken-0.9.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e5fd49e7799579240f03913447c0cdfa1129625ebd5ac440787afc4345990427"}, - {file = "tiktoken-0.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:26242ca9dc8b58e875ff4ca078b9a94d2f0813e6a535dcd2205df5d49d927cc7"}, - {file = "tiktoken-0.9.0.tar.gz", hash = "sha256:d02a5ca6a938e0490e1ff957bc48c8b078c88cb83977be1625b1fd8aac792c5d"}, -] - -[package.dependencies] -regex = ">=2022.1.18" -requests = ">=2.26.0" - -[package.extras] -blobfile = ["blobfile (>=2)"] - -[[package]] -name = "tokenizers" -version = "0.21.1" -description = "" -optional = false -python-versions = ">=3.9" -files = [ - {file = "tokenizers-0.21.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e78e413e9e668ad790a29456e677d9d3aa50a9ad311a40905d6861ba7692cf41"}, - {file = "tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:cd51cd0a91ecc801633829fcd1fda9cf8682ed3477c6243b9a095539de4aecf3"}, - {file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28da6b72d4fb14ee200a1bd386ff74ade8992d7f725f2bde2c495a9a98cf4d9f"}, - {file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d8cfde551c9916cb92014e040806122295a6800914bab5865deb85623931cf"}, - {file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaa852d23e125b73d283c98f007e06d4595732104b65402f46e8ef24b588d9f8"}, - {file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a21a15d5c8e603331b8a59548bbe113564136dc0f5ad8306dd5033459a226da0"}, - {file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2fdbd4c067c60a0ac7eca14b6bd18a5bebace54eb757c706b47ea93204f7a37c"}, - {file = "tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd9a0061e403546f7377df940e866c3e678d7d4e9643d0461ea442b4f89e61a"}, - {file = "tokenizers-0.21.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:db9484aeb2e200c43b915a1a0150ea885e35f357a5a8fabf7373af333dcc8dbf"}, - {file = "tokenizers-0.21.1-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed248ab5279e601a30a4d67bdb897ecbe955a50f1e7bb62bd99f07dd11c2f5b6"}, - {file = "tokenizers-0.21.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:9ac78b12e541d4ce67b4dfd970e44c060a2147b9b2a21f509566d556a509c67d"}, - {file = "tokenizers-0.21.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5a69c1a4496b81a5ee5d2c1f3f7fbdf95e90a0196101b0ee89ed9956b8a168f"}, - {file = "tokenizers-0.21.1-cp39-abi3-win32.whl", hash = "sha256:1039a3a5734944e09de1d48761ade94e00d0fa760c0e0551151d4dd851ba63e3"}, - {file = "tokenizers-0.21.1-cp39-abi3-win_amd64.whl", hash = "sha256:0f0dcbcc9f6e13e675a66d7a5f2f225a736745ce484c1a4e07476a89ccdad382"}, - {file = "tokenizers-0.21.1.tar.gz", hash = "sha256:a1bb04dc5b448985f86ecd4b05407f5a8d97cb2c0532199b2a302a604a0165ab"}, -] - -[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 = "tqdm" -version = "4.67.1" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, - {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] -discord = ["requests"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "typer" -version = "0.15.3" -description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -optional = false -python-versions = ">=3.7" -files = [ - {file = "typer-0.15.3-py3-none-any.whl", hash = "sha256:c86a65ad77ca531f03de08d1b9cb67cd09ad02ddddf4b34745b5008f43b239bd"}, - {file = "typer-0.15.3.tar.gz", hash = "sha256:818873625d0569653438316567861899f7e9972f2e6e0c16dab608345ced713c"}, -] - -[package.dependencies] -click = ">=8.0.0" -rich = ">=10.11.0" -shellingham = ">=1.3.0" -typing-extensions = ">=3.7.4.3" - -[[package]] -name = "typing-extensions" -version = "4.13.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, - {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, -] - -[[package]] -name = "typing-inspect" -version = "0.9.0" -description = "Runtime inspection utilities for typing module." -optional = false -python-versions = "*" -files = [ - {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, - {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, -] - -[package.dependencies] -mypy-extensions = ">=0.3.0" -typing-extensions = ">=3.7.4" - -[[package]] -name = "typing-inspection" -version = "0.4.0" -description = "Runtime typing introspection tools" -optional = false -python-versions = ">=3.9" -files = [ - {file = "typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"}, - {file = "typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"}, -] - -[package.dependencies] -typing-extensions = ">=4.12.0" - -[[package]] -name = "urllib3" -version = "2.4.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.9" -files = [ - {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, - {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, -] - -[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.34.2" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.9" -files = [ - {file = "uvicorn-0.34.2-py3-none-any.whl", hash = "sha256:deb49af569084536d269fe0a6d67e3754f104cf03aba7c11c40f01aadf33c403"}, - {file = "uvicorn-0.34.2.tar.gz", hash = "sha256:0e929828f6186353a80b58ea719861d2629d766293b6d19baf086ba31d4f3328"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} -h11 = ">=0.8" -httptools = {version = ">=0.6.3", optional = true, markers = "extra == \"standard\""} -python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -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.6.3)", "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.21.0" -description = "Fast implementation of asyncio event loop on top of libuv" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, - {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, - {file = "uvloop-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26"}, - {file = "uvloop-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb"}, - {file = "uvloop-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f"}, - {file = "uvloop-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c"}, - {file = "uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8"}, - {file = "uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0"}, - {file = "uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e"}, - {file = "uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb"}, - {file = "uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6"}, - {file = "uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d"}, - {file = "uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c"}, - {file = "uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2"}, - {file = "uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d"}, - {file = "uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc"}, - {file = "uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb"}, - {file = "uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f"}, - {file = "uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281"}, - {file = "uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af"}, - {file = "uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6"}, - {file = "uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816"}, - {file = "uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc"}, - {file = "uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553"}, - {file = "uvloop-0.21.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414"}, - {file = "uvloop-0.21.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206"}, - {file = "uvloop-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe"}, - {file = "uvloop-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79"}, - {file = "uvloop-0.21.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a"}, - {file = "uvloop-0.21.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc"}, - {file = "uvloop-0.21.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b"}, - {file = "uvloop-0.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2"}, - {file = "uvloop-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0"}, - {file = "uvloop-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75"}, - {file = "uvloop-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd"}, - {file = "uvloop-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff"}, - {file = "uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3"}, -] - -[package.extras] -dev = ["Cython (>=3.0,<4.0)", "setuptools (>=60)"] -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 = ["aiohttp (>=3.10.5)", "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 = "1.0.5" -description = "Simple, modern and high performance file watching and code reload in python." -optional = false -python-versions = ">=3.9" -files = [ - {file = "watchfiles-1.0.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5c40fe7dd9e5f81e0847b1ea64e1f5dd79dd61afbedb57759df06767ac719b40"}, - {file = "watchfiles-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8c0db396e6003d99bb2d7232c957b5f0b5634bbd1b24e381a5afcc880f7373fb"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b551d4fb482fc57d852b4541f911ba28957d051c8776e79c3b4a51eb5e2a1b11"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:830aa432ba5c491d52a15b51526c29e4a4b92bf4f92253787f9726fe01519487"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a16512051a822a416b0d477d5f8c0e67b67c1a20d9acecb0aafa3aa4d6e7d256"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe0cbc787770e52a96c6fda6726ace75be7f840cb327e1b08d7d54eadc3bc85"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d363152c5e16b29d66cbde8fa614f9e313e6f94a8204eaab268db52231fe5358"}, - {file = "watchfiles-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ee32c9a9bee4d0b7bd7cbeb53cb185cf0b622ac761efaa2eba84006c3b3a614"}, - {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29c7fd632ccaf5517c16a5188e36f6612d6472ccf55382db6c7fe3fcccb7f59f"}, - {file = "watchfiles-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e637810586e6fe380c8bc1b3910accd7f1d3a9a7262c8a78d4c8fb3ba6a2b3d"}, - {file = "watchfiles-1.0.5-cp310-cp310-win32.whl", hash = "sha256:cd47d063fbeabd4c6cae1d4bcaa38f0902f8dc5ed168072874ea11d0c7afc1ff"}, - {file = "watchfiles-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:86c0df05b47a79d80351cd179893f2f9c1b1cae49d96e8b3290c7f4bd0ca0a92"}, - {file = "watchfiles-1.0.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:237f9be419e977a0f8f6b2e7b0475ababe78ff1ab06822df95d914a945eac827"}, - {file = "watchfiles-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0da39ff917af8b27a4bdc5a97ac577552a38aac0d260a859c1517ea3dc1a7c4"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfcb3952350e95603f232a7a15f6c5f86c5375e46f0bd4ae70d43e3e063c13d"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68b2dddba7a4e6151384e252a5632efcaa9bc5d1c4b567f3cb621306b2ca9f63"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95cf944fcfc394c5f9de794ce581914900f82ff1f855326f25ebcf24d5397418"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ecf6cd9f83d7c023b1aba15d13f705ca7b7d38675c121f3cc4a6e25bd0857ee9"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:852de68acd6212cd6d33edf21e6f9e56e5d98c6add46f48244bd479d97c967c6"}, - {file = "watchfiles-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5730f3aa35e646103b53389d5bc77edfbf578ab6dab2e005142b5b80a35ef25"}, - {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:18b3bd29954bc4abeeb4e9d9cf0b30227f0f206c86657674f544cb032296acd5"}, - {file = "watchfiles-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ba5552a1b07c8edbf197055bc9d518b8f0d98a1c6a73a293bc0726dce068ed01"}, - {file = "watchfiles-1.0.5-cp311-cp311-win32.whl", hash = "sha256:2f1fefb2e90e89959447bc0420fddd1e76f625784340d64a2f7d5983ef9ad246"}, - {file = "watchfiles-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:b6e76ceb1dd18c8e29c73f47d41866972e891fc4cc7ba014f487def72c1cf096"}, - {file = "watchfiles-1.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:266710eb6fddc1f5e51843c70e3bebfb0f5e77cf4f27129278c70554104d19ed"}, - {file = "watchfiles-1.0.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b5eb568c2aa6018e26da9e6c86f3ec3fd958cee7f0311b35c2630fa4217d17f2"}, - {file = "watchfiles-1.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0a04059f4923ce4e856b4b4e5e783a70f49d9663d22a4c3b3298165996d1377f"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e380c89983ce6e6fe2dd1e1921b9952fb4e6da882931abd1824c092ed495dec"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fe43139b2c0fdc4a14d4f8d5b5d967f7a2777fd3d38ecf5b1ec669b0d7e43c21"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee0822ce1b8a14fe5a066f93edd20aada932acfe348bede8aa2149f1a4489512"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0dbcb1c2d8f2ab6e0a81c6699b236932bd264d4cef1ac475858d16c403de74d"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2014a2b18ad3ca53b1f6c23f8cd94a18ce930c1837bd891262c182640eb40a6"}, - {file = "watchfiles-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f6ae86d5cb647bf58f9f655fcf577f713915a5d69057a0371bc257e2553234"}, - {file = "watchfiles-1.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1a7bac2bde1d661fb31f4d4e8e539e178774b76db3c2c17c4bb3e960a5de07a2"}, - {file = "watchfiles-1.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ab626da2fc1ac277bbf752446470b367f84b50295264d2d313e28dc4405d663"}, - {file = "watchfiles-1.0.5-cp312-cp312-win32.whl", hash = "sha256:9f4571a783914feda92018ef3901dab8caf5b029325b5fe4558c074582815249"}, - {file = "watchfiles-1.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:360a398c3a19672cf93527f7e8d8b60d8275119c5d900f2e184d32483117a705"}, - {file = "watchfiles-1.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:1a2902ede862969077b97523987c38db28abbe09fb19866e711485d9fbf0d417"}, - {file = "watchfiles-1.0.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0b289572c33a0deae62daa57e44a25b99b783e5f7aed81b314232b3d3c81a11d"}, - {file = "watchfiles-1.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a056c2f692d65bf1e99c41045e3bdcaea3cb9e6b5a53dcaf60a5f3bd95fc9763"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9dca99744991fc9850d18015c4f0438865414e50069670f5f7eee08340d8b40"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:894342d61d355446d02cd3988a7326af344143eb33a2fd5d38482a92072d9563"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab44e1580924d1ffd7b3938e02716d5ad190441965138b4aa1d1f31ea0877f04"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6f9367b132078b2ceb8d066ff6c93a970a18c3029cea37bfd7b2d3dd2e5db8f"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2e55a9b162e06e3f862fb61e399fe9f05d908d019d87bf5b496a04ef18a970a"}, - {file = "watchfiles-1.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0125f91f70e0732a9f8ee01e49515c35d38ba48db507a50c5bdcad9503af5827"}, - {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:13bb21f8ba3248386337c9fa51c528868e6c34a707f729ab041c846d52a0c69a"}, - {file = "watchfiles-1.0.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:839ebd0df4a18c5b3c1b890145b5a3f5f64063c2a0d02b13c76d78fe5de34936"}, - {file = "watchfiles-1.0.5-cp313-cp313-win32.whl", hash = "sha256:4a8ec1e4e16e2d5bafc9ba82f7aaecfeec990ca7cd27e84fb6f191804ed2fcfc"}, - {file = "watchfiles-1.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:f436601594f15bf406518af922a89dcaab416568edb6f65c4e5bbbad1ea45c11"}, - {file = "watchfiles-1.0.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2cfb371be97d4db374cba381b9f911dd35bb5f4c58faa7b8b7106c8853e5d225"}, - {file = "watchfiles-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a3904d88955fda461ea2531fcf6ef73584ca921415d5cfa44457a225f4a42bc1"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7a21715fb12274a71d335cff6c71fe7f676b293d322722fe708a9ec81d91f5"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dfd6ae1c385ab481766b3c61c44aca2b3cd775f6f7c0fa93d979ddec853d29d5"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b659576b950865fdad31fa491d31d37cf78b27113a7671d39f919828587b429b"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1909e0a9cd95251b15bff4261de5dd7550885bd172e3536824bf1cf6b121e200"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:832ccc221927c860e7286c55c9b6ebcc0265d5e072f49c7f6456c7798d2b39aa"}, - {file = "watchfiles-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85fbb6102b3296926d0c62cfc9347f6237fb9400aecd0ba6bbda94cae15f2b3b"}, - {file = "watchfiles-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:15ac96dd567ad6c71c71f7b2c658cb22b7734901546cd50a475128ab557593ca"}, - {file = "watchfiles-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b6227351e11c57ae997d222e13f5b6f1f0700d84b8c52304e8675d33a808382"}, - {file = "watchfiles-1.0.5-cp39-cp39-win32.whl", hash = "sha256:974866e0db748ebf1eccab17862bc0f0303807ed9cda465d1324625b81293a18"}, - {file = "watchfiles-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:9848b21ae152fe79c10dd0197304ada8f7b586d3ebc3f27f43c506e5a52a863c"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f59b870db1f1ae5a9ac28245707d955c8721dd6565e7f411024fa374b5362d1d"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9475b0093767e1475095f2aeb1d219fb9664081d403d1dff81342df8cd707034"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc533aa50664ebd6c628b2f30591956519462f5d27f951ed03d6c82b2dfd9965"}, - {file = "watchfiles-1.0.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fed1cd825158dcaae36acce7b2db33dcbfd12b30c34317a88b8ed80f0541cc57"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:554389562c29c2c182e3908b149095051f81d28c2fec79ad6c8997d7d63e0009"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a74add8d7727e6404d5dc4dcd7fac65d4d82f95928bbee0cf5414c900e86773e"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb1489f25b051a89fae574505cc26360c8e95e227a9500182a7fe0afcc500ce0"}, - {file = "watchfiles-1.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0901429650652d3f0da90bad42bdafc1f9143ff3605633c455c999a2d786cac"}, - {file = "watchfiles-1.0.5.tar.gz", hash = "sha256:b7529b5dcc114679d43827d8c35a07c493ad6f083633d573d81c660abc5979e9"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - -[[package]] -name = "websockets" -version = "15.0.1" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.9" -files = [ - {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b"}, - {file = "websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205"}, - {file = "websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf"}, - {file = "websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9"}, - {file = "websockets-15.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c"}, - {file = "websockets-15.0.1-cp310-cp310-win32.whl", hash = "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256"}, - {file = "websockets-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57"}, - {file = "websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792"}, - {file = "websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3"}, - {file = "websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf"}, - {file = "websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85"}, - {file = "websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065"}, - {file = "websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3"}, - {file = "websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665"}, - {file = "websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2"}, - {file = "websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215"}, - {file = "websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5"}, - {file = "websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65"}, - {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe"}, - {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4"}, - {file = "websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597"}, - {file = "websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9"}, - {file = "websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7"}, - {file = "websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931"}, - {file = "websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675"}, - {file = "websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151"}, - {file = "websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22"}, - {file = "websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f"}, - {file = "websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8"}, - {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375"}, - {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d"}, - {file = "websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4"}, - {file = "websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa"}, - {file = "websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561"}, - {file = "websockets-15.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5"}, - {file = "websockets-15.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a"}, - {file = "websockets-15.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b"}, - {file = "websockets-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770"}, - {file = "websockets-15.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb"}, - {file = "websockets-15.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054"}, - {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee"}, - {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed"}, - {file = "websockets-15.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880"}, - {file = "websockets-15.0.1-cp39-cp39-win32.whl", hash = "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411"}, - {file = "websockets-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04"}, - {file = "websockets-15.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f"}, - {file = "websockets-15.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123"}, - {file = "websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f"}, - {file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"}, -] - -[[package]] -name = "win32-setctime" -version = "1.2.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, - {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - -[[package]] -name = "xlsxwriter" -version = "3.2.3" -description = "A Python module for creating Excel XLSX files." -optional = false -python-versions = ">=3.6" -files = [ - {file = "XlsxWriter-3.2.3-py3-none-any.whl", hash = "sha256:593f8296e8a91790c6d0378ab08b064f34a642b3feb787cf6738236bd0a4860d"}, - {file = "xlsxwriter-3.2.3.tar.gz", hash = "sha256:ad6fd41bdcf1b885876b1f6b7087560aecc9ae5a9cc2ba97dcac7ab2e210d3d5"}, -] - -[[package]] -name = "yarl" -version = "1.20.0" -description = "Yet another URL library" -optional = false -python-versions = ">=3.9" -files = [ - {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22"}, - {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62"}, - {file = "yarl-1.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19"}, - {file = "yarl-1.20.0-cp310-cp310-win32.whl", hash = "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d"}, - {file = "yarl-1.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076"}, - {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3"}, - {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a"}, - {file = "yarl-1.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5"}, - {file = "yarl-1.20.0-cp311-cp311-win32.whl", hash = "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6"}, - {file = "yarl-1.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb"}, - {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f"}, - {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e"}, - {file = "yarl-1.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b"}, - {file = "yarl-1.20.0-cp312-cp312-win32.whl", hash = "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64"}, - {file = "yarl-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c"}, - {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f"}, - {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3"}, - {file = "yarl-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384"}, - {file = "yarl-1.20.0-cp313-cp313-win32.whl", hash = "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62"}, - {file = "yarl-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c"}, - {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051"}, - {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d"}, - {file = "yarl-1.20.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f"}, - {file = "yarl-1.20.0-cp313-cp313t-win32.whl", hash = "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac"}, - {file = "yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe"}, - {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914"}, - {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc"}, - {file = "yarl-1.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0"}, - {file = "yarl-1.20.0-cp39-cp39-win32.whl", hash = "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8"}, - {file = "yarl-1.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7"}, - {file = "yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124"}, - {file = "yarl-1.20.0.tar.gz", hash = "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" -propcache = ">=0.2.1" - -[[package]] -name = "zstandard" -version = "0.23.0" -description = "Zstandard bindings for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, - {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c"}, - {file = "zstandard-0.23.0-cp310-cp310-win32.whl", hash = "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813"}, - {file = "zstandard-0.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4"}, - {file = "zstandard-0.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e"}, - {file = "zstandard-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473"}, - {file = "zstandard-0.23.0-cp311-cp311-win32.whl", hash = "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160"}, - {file = "zstandard-0.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0"}, - {file = "zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094"}, - {file = "zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35"}, - {file = "zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d"}, - {file = "zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b"}, - {file = "zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9"}, - {file = "zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33"}, - {file = "zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd"}, - {file = "zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b"}, - {file = "zstandard-0.23.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc"}, - {file = "zstandard-0.23.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e"}, - {file = "zstandard-0.23.0-cp38-cp38-win32.whl", hash = "sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9"}, - {file = "zstandard-0.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f"}, - {file = "zstandard-0.23.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb"}, - {file = "zstandard-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5"}, - {file = "zstandard-0.23.0-cp39-cp39-win32.whl", hash = "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274"}, - {file = "zstandard-0.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58"}, - {file = "zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09"}, -] - -[package.dependencies] -cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""} - -[package.extras] -cffi = ["cffi (>=1.11)"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.11" -content-hash = "bac8a220e5be2d88612363435b8405ae663ee19573d2ea14e59108d5602d7cd4" diff --git a/servers/fastapi/poetry.toml b/servers/fastapi/poetry.toml deleted file mode 100644 index 53b35d37..00000000 --- a/servers/fastapi/poetry.toml +++ /dev/null @@ -1,3 +0,0 @@ -[virtualenvs] -create = true -in-project = true diff --git a/servers/fastapi/ppt_config_generator/document_summary_generator.py b/servers/fastapi/ppt_config_generator/document_summary_generator.py index 521575fb..8e0c7943 100644 --- a/servers/fastapi/ppt_config_generator/document_summary_generator.py +++ b/servers/fastapi/ppt_config_generator/document_summary_generator.py @@ -8,20 +8,20 @@ from langchain_core.prompts import ChatPromptTemplate from langchain_core.messages import BaseMessage from langchain_text_splitters import CharacterTextSplitter +from api.utils.utils import get_nano_model + sysmte_prompt = """ -Generate a blog-style summary of the provided document in **more than 2000 words**, focusing on **prominently featuring any numerical data and statistics**. Maintain as much information as possible. +Generate a blog-style summary of the provided document in **more than 2000 words**. +Maintain as much information as possible. ### Output Format - Provide the summary in a **blog format** with an **engaging introduction** and a **clear structure**. - Ensure the **logical flow** of the document is preserved. -- Emphasize any **numbers, statistics, and data points**. ### Notes -- **Emphasize numerical data and statistics** in the summary. - **Retain the main ideas and essential details** from the document. -- Use **engaging language** suitable for a blog audience to enhance readability. - **Show line-breaks** clearly. - If **slides structure is mentioned** in document, structure the summary in the same way. """ @@ -35,14 +35,7 @@ prompt_template = ChatPromptTemplate.from_messages( async def generate_document_summary(documents: List[Document]): - model = ( - ChatOpenAI(model="gpt-4.1-nano", max_completion_tokens=8000) - if os.getenv("LLM") == "openai" - else ChatGoogleGenerativeAI(model="gemini-2.0-flash", max_output_tokens=8000) - ) - # text_splitter = CharacterTextSplitter.from_tiktoken_encoder( - # encoding_name="cl100k_base", chunk_size=200000, chunk_overlap=0 - # ) + model = get_nano_model() text_splitter = CharacterTextSplitter(chunk_size=200000, chunk_overlap=0) chain = prompt_template | model @@ -54,5 +47,5 @@ async def generate_document_summary(documents: List[Document]): coroutines.append(coroutine) completions: List[BaseMessage] = await asyncio.gather(*coroutines) - combined = "\n\n".join([completion.content for completion in completions]) + combined = "\n\n\n\n".join([completion.content for completion in completions]) return combined diff --git a/servers/fastapi/ppt_config_generator/models.py b/servers/fastapi/ppt_config_generator/models.py index 1e5689d4..a530b334 100644 --- a/servers/fastapi/ppt_config_generator/models.py +++ b/servers/fastapi/ppt_config_generator/models.py @@ -1,9 +1,40 @@ -from typing import List +from typing import List, Optional from pydantic import BaseModel, Field -class PresentationTitlesModel(BaseModel): - presentation_title: str = Field("Title of this presentation in about 3 to 8 words") - titles: List[str] = Field( - description="List of title of every slide in presentation in about 2 to 8 words" +class SlideStructureModel(BaseModel): + type: int = Field(description="Type of the slide", gte=1, lte=9) + + +class PresentationStructureModel(BaseModel): + slides: List[SlideStructureModel] = Field(description="List of slide structure") + + +class SlideMarkdownModel(BaseModel): + title: str = Field( + description="Title of the slide in about 3 to 5 words", ) + body: str = Field( + description="Content of the slide in markdown format", + ) + + +class PresentationMarkdownModel(BaseModel): + title: str = Field( + description="Title of the presentation in about 3 to 8 words", + ) + notes: Optional[List[str]] = Field(description="Notes for the presentation") + slides: List[SlideMarkdownModel] = Field(description="List of slides") + + def to_string(self): + message = f"# Presentation Title: {self.title} \n\n" + for i, slide in enumerate(self.slides): + message += f"## Slide {i+1}:\n" + message += f" - Title: {slide.title} \n" + message += f" - Body: {slide.body} \n" + + if self.notes: + message += f"# Notes: \n" + for note in self.notes: + message += f" - {note} \n" + return message diff --git a/servers/fastapi/ppt_config_generator/parsers.py b/servers/fastapi/ppt_config_generator/parsers.py new file mode 100644 index 00000000..5f591742 --- /dev/null +++ b/servers/fastapi/ppt_config_generator/parsers.py @@ -0,0 +1,9 @@ +from langchain.schema import BaseOutputParser + + +class StripMarkdownOutputParser(BaseOutputParser): + def parse(self, text: str) -> str: + # Remove triple backticks and any optional language hint like ```markdown + import re + + return re.sub(r"^```[\w]*\n?|```$", "", text.strip(), flags=re.MULTILINE) diff --git a/servers/fastapi/ppt_config_generator/ppt_outlines_generator.py b/servers/fastapi/ppt_config_generator/ppt_outlines_generator.py new file mode 100644 index 00000000..246768af --- /dev/null +++ b/servers/fastapi/ppt_config_generator/ppt_outlines_generator.py @@ -0,0 +1,84 @@ +from typing import Optional +from langchain_core.prompts import ChatPromptTemplate + +from api.utils.utils import get_large_model +from api.utils.variable_length_models import ( + get_presentation_markdown_model_with_n_slides, +) +from ppt_config_generator.models import PresentationMarkdownModel +from ppt_generator.fix_validation_errors import get_validated_response + + +user_prompt_text = { + "type": "text", + "text": """ + **Input:** + - Prompt: {prompt} + - Output Language: {language} + - Number of Slides: {n_slides} + - Additional Information: {content} + """, +} + + +def get_prompt_template(): + return ChatPromptTemplate.from_messages( + [ + ( + "system", + """ + Create a presentation based on the provided prompt, number of slides, output language, and additional informational details. + Format the output in the specified JSON schema with structured markdown content. + + # Steps + + 1. Identify key points from the provided prompt, including the topic, number of slides, output language, and additional content directions. + 2. Create a concise and descriptive title reflecting the main topic, adhering to the specified language. + 3. Generate a clear title for each slide. + 4. Develop comprehensive content using markdown structure: + * Use bullet points (- or *) for lists. + * Use **bold** for emphasis, *italic* for secondary emphasis, and `code` for technical terms. + 5. Provide important points from prompt as notes. + + # Notes + - Content must be generated for every slide. + - Images or Icons information provided in **Input** must be included in the **notes**. + - Notes should cleary define if it is for specific slide or for the presentation. + - Slide **body** should not contain slide **title**. + - Slide **title** should not contain "Slide 1", "Slide 2", etc. + - Slide **title** should not be in markdown format. + - There must be exact **Number of Slides** as specified. + """, + ), + ( + "user", + [user_prompt_text], + ), + ], + ) + + +async def generate_ppt_content( + prompt: Optional[str], + n_slides: int, + language: Optional[str] = None, + content: Optional[str] = None, +) -> PresentationMarkdownModel: + model = get_large_model() + response_model = get_presentation_markdown_model_with_n_slides(n_slides) + + chain = get_prompt_template() | model.with_structured_output( + response_model.model_json_schema() + ) + + return await get_validated_response( + chain, + { + "prompt": prompt, + "n_slides": n_slides, + "language": language or "English", + "content": content, + }, + response_model, + PresentationMarkdownModel, + ) diff --git a/servers/fastapi/ppt_config_generator/ppt_title_summary_generator.py b/servers/fastapi/ppt_config_generator/ppt_title_summary_generator.py deleted file mode 100644 index cada451b..00000000 --- a/servers/fastapi/ppt_config_generator/ppt_title_summary_generator.py +++ /dev/null @@ -1,85 +0,0 @@ -import os -from typing import Optional -from langchain_core.prompts import ChatPromptTemplate -from langchain_google_genai import ChatGoogleGenerativeAI -from langchain_openai import ChatOpenAI - -from ppt_config_generator.models import PresentationTitlesModel -from ppt_generator.fix_validation_errors import get_validated_response - -user_prompt_text = { - "type": "text", - "text": """ - **Input:** - - Prompt: {prompt} - - Output Language: {language} - - Number of Slides: {n_slides} - - Content: {content} - """, -} - - -def get_prompt_template(): - return ChatPromptTemplate.from_messages( - [ - ( - "system", - """ - Generate titles for the presentation based on the prompt and additional information. - - # Steps - 1. Analyze the prompt and additional information. - 2. Visualize presentation with **Number of Slides**. - 3. Use provided input or any information you have on this topic. - 4. Check if slide titles are provided in **Input**. - 5. Generate title for each slide if not provided in **Input**. - 6. If slide titles are provided in **Input** then use them as it is. - 7. In case if slides for chapter is provided then analyze all chapter content and then structurally generate titles considering all slide content. \ - Keep the flow as per given chapter content. Ensure that titles are generated to cover all the content in the chapter. - - # Notes - - Generate output in language mentioned in **Input**. - - Ensure the prompt and additional information remains the main focus of the presentation. - - **Additional Information** serves as supporting information, providing depth and details. - - Slide titles should maintain a logical and coherent flow throughout the presentation. - - Slide **Title** should not contain slide number like (Slide 1, Slide 2, etc) - - Slide **Title** can have 3 to 8 words. - - Slide **Title** must not use any other special characters except ":". - - Presentation **Title** should be around 3 to 8 words. - - Extract titles from the **Additional Information** or **Prompt** if provided. - - If presentation flow is mentioned in **Additional Information** then use it to generate titles. - - If Chapter Content is provided than strictly adhere to it and then generate titles in the same content flow as chapter content. - """, - ), - ( - "user", - [user_prompt_text], - ), - ], - ) - - -async def generate_ppt_titles( - prompt: Optional[str], - n_slides: int, - content: Optional[str], - language: Optional[str] = None, -) -> PresentationTitlesModel: - model = ( - ChatOpenAI(model="gpt-4.1-nano") - if os.getenv("LLM") == "openai" - else ChatGoogleGenerativeAI(model="gemini-2.0-flash") - ).with_structured_output(PresentationTitlesModel.model_json_schema()) - - chain = get_prompt_template() | model - - return await get_validated_response( - chain, - { - "prompt": prompt, - "n_slides": n_slides, - "language": language or "English", - "content": content, - }, - PresentationTitlesModel, - ) diff --git a/servers/fastapi/ppt_config_generator/structure_generator.py b/servers/fastapi/ppt_config_generator/structure_generator.py new file mode 100644 index 00000000..28f3c8f6 --- /dev/null +++ b/servers/fastapi/ppt_config_generator/structure_generator.py @@ -0,0 +1,76 @@ +from langchain_core.prompts import ChatPromptTemplate + +from api.utils.utils import get_small_model +from api.utils.variable_length_models import ( + get_presentation_structure_model_with_n_slides, +) +from ppt_config_generator.models import ( + PresentationStructureModel, + PresentationMarkdownModel, +) +from ppt_generator.fix_validation_errors import get_validated_response + +prompt = ChatPromptTemplate.from_messages( + [ + ( + "system", + """ + You're a professional presentation designer with years of experience in designing clear and engaging presentations. + + # Slide Types + - **1**: contains title, description and image. + - **2**: contains title and list of items. + - **4**: contains title and list of items with images. + - **5**: contains title, description and a graph. + - **6**: contains title, description and list of items. + - **7**: contains title and list of items with icons. + - **8**: contains title, description and list of items with icons. + - **9**: contains title, list of items and a graph. + + # Steps + 1. Analyze provided Number of slides, Presentation title, Slides content and Slide types. + 2. Select appropriate slide type for each slide. + 3. Provide output in json format as per given schema. + + # Notes + - Slide type should be selected based on provided content for slide and notes. + - Feel free to select slide type with images and icons. + - Introduction and Conclusion should have type **1**. + - Don't fall into patterns like always using type 2 and after type 1. + - Each presentation should have its own unique flow and rhythm. + - Do not select type **3** for any slide. + - Do not select type **5** or **9** if outline does not have table. + - Select type for {n_slides} slides. + + **Go through notes and steps and make sure they are all followed. Rule breaks are strictly not allowed.** + """, + ), + ( + "human", + """ + {data} + """, + ), + ] +) + + +async def generate_presentation_structure( + presentation_outline: PresentationMarkdownModel, +) -> PresentationStructureModel: + + model = get_small_model() + response_model = get_presentation_structure_model_with_n_slides( + len(presentation_outline.slides) + ) + chain = prompt | model.with_structured_output(response_model.model_json_schema()) + + return await get_validated_response( + chain, + { + "n_slides": len(presentation_outline.slides), + "data": presentation_outline.to_string(), + }, + response_model, + PresentationStructureModel, + ) diff --git a/servers/fastapi/ppt_generator/fix_validation_errors.py b/servers/fastapi/ppt_generator/fix_validation_errors.py index 58bf51c2..73a4c15e 100644 --- a/servers/fastapi/ppt_generator/fix_validation_errors.py +++ b/servers/fastapi/ppt_generator/fix_validation_errors.py @@ -1,10 +1,13 @@ import os +from typing import Optional from fastapi import HTTPException from langchain_google_genai import ChatGoogleGenerativeAI from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from pydantic import BaseModel, ValidationError +from api.utils.utils import get_large_model + def get_prompt_template(): return ChatPromptTemplate( @@ -38,11 +41,7 @@ def get_prompt_template(): async def fix_validation_errors(response_model: BaseModel, response, errors): - model = ( - ChatOpenAI(model="o3-mini", reasoning_effort="high") - if os.getenv("LLM") == "openai" - else ChatGoogleGenerativeAI(model="gemini-2.5-flash-preview-04-17") - ) + model = get_large_model() chain = get_prompt_template() | model.with_structured_output( response_model.model_json_schema() @@ -51,18 +50,25 @@ async def fix_validation_errors(response_model: BaseModel, response, errors): async def get_validated_response( - chain, input_dict, response_model: BaseModel, retries: int = 1 + chain, + input_dict, + response_model: BaseModel, + validation_model: Optional[BaseModel] = None, + retries: int = 1, ): response = await chain.ainvoke(input_dict) + validation_model = validation_model or response_model attempt = 0 while retries >= attempt: attempt += 1 + print("-" * 50) + print(f"Validation Retry attempt - {attempt}") try: if response and type(response) is list: response = response[0]["args"] - validated_response = response_model(**response) + validated_response = validation_model(**response) return validated_response except ValidationError as e: if retries < attempt: @@ -78,7 +84,6 @@ async def get_validated_response( } ) - print(f"Validation Retry attempt - {attempt}") response = await fix_validation_errors( response_model, response, error_details ) diff --git a/servers/fastapi/ppt_generator/generator.py b/servers/fastapi/ppt_generator/generator.py index 8feec033..76cd22f1 100644 --- a/servers/fastapi/ppt_generator/generator.py +++ b/servers/fastapi/ppt_generator/generator.py @@ -1,96 +1,111 @@ -import os -from typing import AsyncIterator, List +from typing import AsyncIterator + +from langchain_core.messages import ( + HumanMessage, + AIMessageChunk, + AIMessage, +) +from api.utils.utils import get_large_model +from ppt_config_generator.models import PresentationMarkdownModel +from ppt_generator.models.llm_models_with_validations import ( + LLMPresentationModelWithValidation, +) -from langchain_google_genai import ChatGoogleGenerativeAI -from langchain_openai import ChatOpenAI -from langchain_core.messages import SystemMessage, HumanMessage, AIMessageChunk -from ppt_generator.models.llm_models import LLMPresentationModel CREATE_PRESENTATION_PROMPT = """ - You're a professional presenter with years of experience in creating clear and engaging presentations. + You're a professional presenter with years of experience in creating clear and engaging presentations. - Create a presentation using the provided slide titles, images, and additional data, following specified steps and guidelines. + Create a presentation using the provided title, slide titles and body following specified steps and guidelines. - Analyze all inputs, including slide titles, graphs, summary, big idea, story and spreadsheet content to construct each slide with appropriate content and format. + Analyze all inputs, to construct each slide with appropriate content and format. - # Slide Types - - **1**: contains title, description and image. - - **2**: contains title and list of items. - - **4**: contains title and list of items with images. - - **5**: contains title, description and a graph. - - **6**: contains title, description and list of items. - - **7**: contains title and list of items with icons. - - **8**: contains title, description and list of items with icons. - # Steps - 1. Analyze Prompt, and other provided data. - 2. Use Slide titles provided in **Titles**. - 3. Generate Slide Content for each slide. Make sure it has all the context and information required to create this individual slide from. - 4. Select slide type. - 5. Output should be in json format as per given schema. - 6. **Adherence to schema should be beyond all the rules mentioned in notes.** + # Slide Types + - **1**: contains title, description and image. + - **2**: contains title and list of items. + - **4**: contains title and list of items with images. + - **5**: contains title, description and a graph. + - **6**: contains title, description and list of items. + - **7**: contains title and list of items with icons. + - **8**: contains title, description and list of items with icons. - # Notes - - Generate output in language mentioned in *Input*. - - Distribute contexts mentioned in prompt to slides using **info** field. - - User prompt should be respected beyond all rules or constraints. - - If the presentation is academic, then make only take the chapter text as context and create presentation according to that text and structure. Don't assume or put text or context which is not in the text. - - If **Story** is provided, presentation should follow the story flow. - - When you have to express single numbers like percentage or figures, you should use inforgraphics but for a collection of numbers in series you can use charts. - - Freely select type with images and icons. - - Introduction and Conclusion should have *Type 1* if graph is not assigned. - - Try to select **different types for every slides**. - - Don't select Type **3** for any slide. - - Make sure to give presentation in said language. You must translate and understand given context and text is in any other language. - - Do not include same graph twice in presentation without any changes to the other. - - Every series in a graph should have data in same unit. Example: all series should be in percentage or all series should be in number of items. - - Type **9** and **5** should be only picked if graph is available. - - **Strictly keep the text under given limit.** - - For slide content follow these rules: - - Highlighting in markdown format should be used to emphasize numbers and data. - - Adhere to length contraints in **body** and **description**. Focus on direct communication within character constrainsts than lengthy explanation. - - **body** and **description** in slides should never exceed character limits of 200 characters. - - Specify **don't include text in image** in image prompt. - - All the numbers should be bolded with **bold** tag in body or description of slide. - - Image prompt should cleary define how image should look like. - - Image prompt should not ask to generate **numbers, graphs, dashboard and report**. - - Examples of image prompts: - - a travel agent presenting a detailed itinerary with photos of destinations, showcasing specific experiences, highlighting travel highlights - - a person smiling while traveling, with a beautiful background scenery, such as mountains, beach, or city, golden hour lighting - - a humanoid robot standing tall, gazing confidently at the horizon, bathed in warm sunlight, the background showing a futuristic cityscape with sleek buildings and flying vehicles - - Descriptions should be clear and to the point. - - Descriptions should not use words like "This slide", "This presentation". - - If **body** contains items, *choose number of items randomly between mentioned constraints.* - - **Icon queries** must be a generic **single word noun**. - - Provide 3 icon query for each icon where, - - First one should be specific like "Led bulb". - - Second one should be more generic that first like "bulb". - - Third one should be simplest like "light". + # Steps + 1. Analyze provided presentation title, slide titles and body. + 2. Select slide type for each slide. + 3. Output should be in json format as per given schema. + 4. **Adherence to schema should be beyond all the rules mentioned in notes.** - **Go through notes and steps and make sure they are all followed. Rule breaks are strictly not allowed.** + # Notes + - Generate output in language mentioned in *Input*. + - Freely select type with images and icons. + - Introduction and Conclusion should have *Type 1* if graph is not assigned. + - Try to select **different types for every slides**. + - Don't select Type **3** for any slide. + - Do not include same graph twice in presentation without any changes to the other. + - Every series in a graph should have data in same unit. Example: all series should be in percentage or all series should be in number of items. + - Type **9** and **5** should be only picked if graph is available. + - **Strictly keep the text under given limit.** + - For slide content follow these rules: + - Highlighting in markdown format should be used to emphasize numbers and data. + - Adhere to length contraints in **body** and **description**. Focus on direct communication within character constrainsts than lengthy explanation. + - **body** and **description** in slides should never exceed character limits of 200 characters. + - Specify **don't include text in image** in image prompt. + - All the numbers should be bolded with **bold** tag in body or description of slide. + - Image prompt should cleary define how image should look like. + - Image prompt should not ask to generate **numbers, graphs, dashboard and report**. + - Examples of image prompts: + - a travel agent presenting a detailed itinerary with photos of destinations, showcasing specific experiences, highlighting travel highlights + - a person smiling while traveling, with a beautiful background scenery, such as mountains, beach, or city, golden hour lighting + - a humanoid robot standing tall, gazing confidently at the horizon, bathed in warm sunlight, the background showing a futuristic cityscape with sleek buildings and flying vehicles + - Descriptions should be clear and to the point. + - Descriptions should not use words like "This slide", "This presentation". + - If **body** contains items, *choose number of items randomly between mentioned constraints.* + - **Icon queries** must be a generic **single word noun**. + - Provide 3 icon query for each icon where, + - First one should be specific like "Led bulb". + - Second one should be more generic that first like "bulb". + - Third one should be simplest like "light". + + **Follow the all the length constraints provided in the schema and notes.** + **Go through notes and steps and make sure they are all followed. Rule breaks are strictly not allowed.** +""" + +schema = LLMPresentationModelWithValidation.model_json_schema() + +system_prompt = f""" +{CREATE_PRESENTATION_PROMPT} + +Follow this schema while giving out response: {schema}. + +Make description short and obey the character limits. Output should be in JSON format. Give out only JSON, nothing else. +""" + +ollama_system_prompt = f""" +{CREATE_PRESENTATION_PROMPT} + +Make description short and obey the character limits. Output should be in JSON format. Give out only JSON, nothing else. """ +def get_model_and_messages( + presentation_outline: PresentationMarkdownModel, +): + user_message = HumanMessage(presentation_outline.to_string()) + model = get_large_model() + + return model, system_prompt, user_message + + def generate_presentation_stream( - titles: List[str], - prompt: str, - n_slides: int, - language: str, - summary: str, + presentation_outline: PresentationMarkdownModel, ) -> AsyncIterator[AIMessageChunk]: - - schema = LLMPresentationModel.model_json_schema() - - system_prompt = f"{CREATE_PRESENTATION_PROMPT} -|0|--|0|- Follow this schema while giving out response: {schema}. Make description short and obey the character limits. Output should be in JSON format. Give out only JSON, nothing else." - system_prompt = SystemMessage(system_prompt.replace("-|0|-", "\n")) - - user_message = f"Prompt: {prompt}-|0|--|0|- Number of Slides: {n_slides}-|0|--|0|- Presentation Language: {language} -|0|--|0|- Slide Titles: {titles} -|0|--|0|- Reference Document: {summary}" - user_message = HumanMessage(user_message.replace("-|0|-", "\n")) - - model = ( - ChatOpenAI(model="gpt-4.1") - if os.getenv("LLM") == "openai" - else ChatGoogleGenerativeAI(model="gemini-2.0-flash") - ) + model, system_prompt, user_message = get_model_and_messages(presentation_outline) return model.astream([system_prompt, user_message]) + + +async def generate_presentation( + presentation_outline: PresentationMarkdownModel, +) -> AIMessage: + model, system_prompt, user_message = get_model_and_messages(presentation_outline) + return await model.ainvoke([system_prompt, user_message]) diff --git a/servers/fastapi/ppt_generator/models/content_type_models.py b/servers/fastapi/ppt_generator/models/content_type_models.py index 772bfe1f..f13cb76c 100644 --- a/servers/fastapi/ppt_generator/models/content_type_models.py +++ b/servers/fastapi/ppt_generator/models/content_type_models.py @@ -1,7 +1,17 @@ from typing import List, Mapping -from pydantic import BaseModel, Field +from pydantic import BaseModel -from ppt_generator.models.other_models import SlideType +from ppt_generator.models.other_models import ( + TYPE1, + TYPE2, + TYPE3, + TYPE4, + TYPE5, + TYPE6, + TYPE7, + TYPE8, + TYPE9, +) from graph_processor.models import GraphModel @@ -9,68 +19,181 @@ class HeadingModel(BaseModel): heading: str description: str + def to_llm_content(self, image_prompt: str = None, icon_query: str = None): + from ppt_generator.models.llm_models import ( + LLMHeadingModel, + LLMHeadingModelWithImagePrompt, + LLMHeadingModelWithIconQuery, + ) -class IconQueryCollectionModel(BaseModel): - queries: List[str] + if image_prompt: + return LLMHeadingModelWithImagePrompt( + heading=self.heading, + description=self.description, + image_prompt=image_prompt, + ) + elif icon_query: + return LLMHeadingModelWithIconQuery( + heading=self.heading, + description=self.description, + icon_query=icon_query, + ) + return LLMHeadingModel( + heading=self.heading, + description=self.description, + ) class SlideContentModel(BaseModel): title: str + def to_llm_content(self): + raise NotImplementedError("to_llm_content method not implemented") + class Type1Content(SlideContentModel): body: str image_prompts: List[str] + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType1Content + + return LLMType1Content( + title=self.title, + body=self.body, + image_prompt=self.image_prompts[0] if self.image_prompts else "", + ) + class Type2Content(SlideContentModel): body: List[HeadingModel] + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType2Content + + return LLMType2Content( + title=self.title, + body=[item.to_llm_content() for item in self.body], + ) + class Type3Content(SlideContentModel): body: List[HeadingModel] image_prompts: List[str] + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType3Content + + return LLMType3Content( + title=self.title, + body=[item.to_llm_content() for item in self.body], + image_prompt=self.image_prompts[0] if self.image_prompts else "", + ) + class Type4Content(SlideContentModel): body: List[HeadingModel] image_prompts: List[str] + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType4Content + + llm_body = [] + for i, item in enumerate(self.body): + image_prompt = self.image_prompts[i] if i < len(self.image_prompts) else "" + llm_body.append(item.to_llm_content(image_prompt=image_prompt)) + return LLMType4Content( + title=self.title, + body=llm_body, + ) + class Type5Content(SlideContentModel): body: str graph: GraphModel + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType5Content + + return LLMType5Content( + title=self.title, + body=self.body, + graph=self.graph, + ) + class Type6Content(SlideContentModel): description: str body: List[HeadingModel] + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType6Content + + return LLMType6Content( + title=self.title, + description=self.description, + body=[item.to_llm_content() for item in self.body], + ) + class Type7Content(SlideContentModel): body: List[HeadingModel] - icon_queries: List[IconQueryCollectionModel] + icon_queries: List[str] + + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType7Content + + llm_body = [] + for i, item in enumerate(self.body): + icon_query = self.icon_queries[i] if i < len(self.icon_queries) else "" + llm_body.append(item.to_llm_content(icon_query=icon_query)) + return LLMType7Content( + title=self.title, + body=llm_body, + ) class Type8Content(SlideContentModel): description: str body: List[HeadingModel] - icon_queries: List[IconQueryCollectionModel] + icon_queries: List[str] + + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType8Content + + llm_body = [] + for i, item in enumerate(self.body): + icon_query = self.icon_queries[i] if i < len(self.icon_queries) else "" + llm_body.append(item.to_llm_content(icon_query=icon_query)) + return LLMType8Content( + title=self.title, + description=self.description, + body=llm_body, + ) class Type9Content(SlideContentModel): body: List[HeadingModel] graph: GraphModel + def to_llm_content(self): + from ppt_generator.models.llm_models import LLMType9Content -CONTENT_TYPE_MAPPING: Mapping[SlideType, SlideContentModel] = { - SlideType.type1: Type1Content, - SlideType.type2: Type2Content, - SlideType.type3: Type3Content, - SlideType.type4: Type4Content, - SlideType.type5: Type5Content, - SlideType.type6: Type6Content, - SlideType.type7: Type7Content, - SlideType.type8: Type8Content, - SlideType.type9: Type9Content, + return LLMType9Content( + title=self.title, + body=[item.to_llm_content() for item in self.body], + graph=self.graph, + ) + + +CONTENT_TYPE_MAPPING: Mapping[int, SlideContentModel] = { + TYPE1: Type1Content, + TYPE2: Type2Content, + TYPE3: Type3Content, + TYPE4: Type4Content, + TYPE5: Type5Content, + TYPE6: Type6Content, + TYPE7: Type7Content, + TYPE8: Type8Content, + TYPE9: Type9Content, } diff --git a/servers/fastapi/ppt_generator/models/llm_models.py b/servers/fastapi/ppt_generator/models/llm_models.py index 72f11ea8..1ff43feb 100644 --- a/servers/fastapi/ppt_generator/models/llm_models.py +++ b/servers/fastapi/ppt_generator/models/llm_models.py @@ -1,220 +1,182 @@ from typing import List, Mapping -from pydantic import BaseModel, Field +from pydantic import BaseModel from graph_processor.models import GraphModel -from ppt_generator.models.content_type_models import SlideContentModel -from ppt_generator.models.other_models import SlideType +from ppt_generator.models.content_type_models import ( + HeadingModel, + SlideContentModel, + Type1Content, + Type2Content, + Type3Content, + Type4Content, + Type5Content, + Type6Content, + Type7Content, + Type8Content, + Type9Content, +) +from ppt_generator.models.other_models import ( + TYPE1, + TYPE2, + TYPE3, + TYPE4, + TYPE5, + TYPE6, + TYPE7, + TYPE8, + TYPE9, +) class LLMHeadingModel(BaseModel): - heading: str = Field( - description="List item heading to show in slide body", - max_length=35, - ) - description: str = Field( - description="Description of list item in less than 20 words.", - max_length=180, - min_length=100, - ) + heading: str + description: str + + def to_content(self) -> HeadingModel: + return HeadingModel( + heading=self.heading, + description=self.description, + ) -class LLMIconQueryCollectionModel(BaseModel): - queries: List[str] = Field( - description="Multiple queries to generate simillar icons matching heading and description" - ) +class LLMHeadingModelWithImagePrompt(LLMHeadingModel): + image_prompt: str + + +class LLMHeadingModelWithIconQuery(LLMHeadingModel): + icon_query: str class LLMSlideContentModel(BaseModel): - title: str = Field(description="Title of the slide") + title: str - @classmethod - def get_notes(cls) -> str: - return "" + def to_content(self) -> SlideContentModel: + raise NotImplementedError("to_content method not implemented") class LLMType1Content(LLMSlideContentModel): - body: str = Field( - description="Slide content summary in less than 15 words. This will be shown in text box in slide.", - max_length=230, - min_length=150, - ) - image_prompts: List[str] = Field( - description="Prompt used to generate image for this slide. Only one prompt is allowed.", - min_length=1, - max_length=1, - ) + body: str + image_prompt: str + + def to_content(self) -> Type1Content: + return Type1Content( + title=self.title, + body=self.body, + image_prompts=[self.image_prompt], + ) class LLMType2Content(LLMSlideContentModel): - body: List[LLMHeadingModel] = Field( - "List items to show in slide's body", - min_length=1, - max_length=4, - ) + body: List[LLMHeadingModel] - @classmethod - def get_notes(cls): - return """ - - The **Body** should include **1 to 4 HeadingModels**. - - Each **Heading** must consist of **1 to 3 words**. - - Each item **Description** can be upto 10 words. - """ + def to_content(self) -> Type2Content: + return Type2Content( + title=self.title, + body=[each.to_content() for each in self.body], + ) class LLMType3Content(LLMSlideContentModel): - body: List[LLMHeadingModel] = Field( - "List items to show in slide's body", - min_length=3, - max_length=3, - ) - image_prompts: List[str] = Field( - description="Prompt used to generate image for this slide", - min_length=1, - max_length=1, - ) + body: List[LLMHeadingModel] + image_prompt: str - @classmethod - def get_notes(cls): - return """ - - The **Body** should include **3 HeadingModels**. - - Each **Heading** must consist of **1 to 3 words**. - - Each item **Description** can be upto 10 words. - """ + def to_content(self) -> Type3Content: + return Type3Content( + title=self.title, + body=[each.to_content() for each in self.body], + image_prompts=[self.image_prompt], + ) class LLMType4Content(LLMSlideContentModel): - body: List[LLMHeadingModel] = Field( - "List items to show in slide's body", - min_length=1, - max_length=3, - ) - image_prompts: List[str] = Field( - description="Prompts used to generate image for each item in body", - min_length=1, - max_length=3, - ) + body: List[LLMHeadingModelWithImagePrompt] - @classmethod - def get_notes(cls): - return """ - - The **Body** should include **1 to 3 HeadingModels**. - - **Image prompts** should contain one prompt for each item in body. - - Each **Heading** must consist of **1 to 3 words**. - - Each item **Description** can be upto 10 words. - """ + def to_content(self) -> Type4Content: + return Type4Content( + title=self.title, + body=[each.to_content() for each in self.body], + image_prompts=[each.image_prompt for each in self.body], + ) class LLMType5Content(LLMSlideContentModel): - body: str = Field( - description="Slide content summary in less than 15 words. This will be shown in text box in slide.", - max_length=230, - min_length=150, - ) - graph: GraphModel = Field(description="Graph to show in slide") + body: str + graph: GraphModel + + def to_content(self) -> Type5Content: + return Type5Content( + title=self.title, + body=self.body, + graph=self.graph, + ) class LLMType6Content(LLMSlideContentModel): - description: str = Field( - description="Slide content summary in less than 15 words. This will be shown in text box in slide.", - ) - body: List[LLMHeadingModel] = Field( - description="List items to show in slide's body", - min_length=1, - max_length=3, - ) + description: str + body: List[LLMHeadingModel] - @classmethod - def get_notes(cls): - return """ - - The **Body** should include **1 to 3 HeadingModels**. - - Each **Heading** must consist of **1 to 3 words**. - - Each item **Description** can be upto 10 words. - """ + def to_content(self) -> Type6Content: + return Type6Content( + title=self.title, + description=self.description, + body=[each.to_content() for each in self.body], + ) class LLMType7Content(LLMSlideContentModel): - body: List[LLMHeadingModel] = Field( - description="List items to show in slide's body", - min_length=1, - max_length=4, - ) - icon_queries: List[LLMIconQueryCollectionModel] = Field( - description="One icon query collection model for every item in body to search icon", - min_length=1, - max_length=4, - ) + body: List[LLMHeadingModelWithIconQuery] - @classmethod - def get_notes(cls): - return """ - - The **Body** should include **1 to 4 HeadingModels**. - - Each **IconQueryCollectionModel** must contain 3 *queries*. - - Each **Heading** must consist of **1 to 3 words**. - - Each item **Description** can be upto 10 words. - """ + def to_content(self) -> Type7Content: + return Type7Content( + title=self.title, + body=[each.to_content() for each in self.body], + icon_queries=[each.icon_query for each in self.body], + ) class LLMType8Content(LLMSlideContentModel): - description: str = Field( - description="Slide content summary in less than 15 words. This will be shown in text box in slide.", - max_length=230, - min_length=150, - ) - body: List[LLMHeadingModel] = Field( - "List items to show in slide's body", - min_length=1, - max_length=3, - ) - icon_queries: List[LLMIconQueryCollectionModel] = Field( - description="One icon query collection model for every item in body to search icon" - ) + description: str + body: List[LLMHeadingModelWithImagePrompt] - @classmethod - def get_notes(cls): - return """ - - The **Body** should include **1 to 3 HeadingModels**. - - Each **IconQueryCollectionModel** must contain 3 *queries*. - - Each **Heading** must consist of **1 to 3 words**. - - Each item **Description** can be upto 10 words. - """ + def to_content(self) -> Type8Content: + return Type8Content( + title=self.title, + description=self.description, + body=[each.to_content() for each in self.body], + icon_queries=[each.image_prompt for each in self.body], + ) class LLMType9Content(LLMSlideContentModel): - body: List[LLMHeadingModel] = Field( - "List items to show in slide's body", - min_length=1, - max_length=3, - ) - graph: GraphModel = Field(description="Graph to show in slide") + body: List[LLMHeadingModel] + graph: GraphModel - @classmethod - def get_notes(cls): - return """ - - The **Body** should include **1 to 3 HeadingModels**. - - Each **Heading** must consist of **1 to 3 words**. - - Each item **Description** can be upto 10 words. - """ + def to_content(self) -> Type9Content: + return Type9Content( + title=self.title, + body=[each.to_content() for each in self.body], + graph=self.graph, + ) -LLM_CONTENT_TYPE_MAPPING: Mapping[SlideType, LLMSlideContentModel] = { - SlideType.type1: LLMType1Content, - SlideType.type2: LLMType2Content, - SlideType.type3: LLMType3Content, - SlideType.type4: LLMType4Content, - SlideType.type5: LLMType5Content, - SlideType.type6: LLMType6Content, - SlideType.type7: LLMType7Content, - SlideType.type8: LLMType8Content, - SlideType.type9: LLMType9Content, +LLM_CONTENT_TYPE_MAPPING: Mapping[int, LLMSlideContentModel] = { + TYPE1: LLMType1Content, + TYPE2: LLMType2Content, + TYPE3: LLMType3Content, + TYPE4: LLMType4Content, + TYPE5: LLMType5Content, + TYPE6: LLMType6Content, + TYPE7: LLMType7Content, + TYPE8: LLMType8Content, + TYPE9: LLMType9Content, } class LLMSlideModel(BaseModel): - type: SlideType + type: int content: ( LLMType1Content | LLMType2Content - | LLMType3Content | LLMType4Content | LLMType5Content | LLMType6Content @@ -225,7 +187,4 @@ class LLMSlideModel(BaseModel): class LLMPresentationModel(BaseModel): - title: str - n_slides: int - titles: list[str] slides: list[LLMSlideModel] diff --git a/servers/fastapi/ppt_generator/models/llm_models_with_validations.py b/servers/fastapi/ppt_generator/models/llm_models_with_validations.py new file mode 100644 index 00000000..685d2c21 --- /dev/null +++ b/servers/fastapi/ppt_generator/models/llm_models_with_validations.py @@ -0,0 +1,295 @@ +from typing import List, Mapping +from pydantic import Field + +from graph_processor.models import GraphModel +from ppt_generator.models.other_models import ( + TYPE1, + TYPE2, + TYPE3, + TYPE4, + TYPE5, + TYPE6, + TYPE7, + TYPE8, + TYPE9, +) +from ppt_generator.models.llm_models import ( + LLMHeadingModel, + LLMHeadingModelWithImagePrompt, + LLMHeadingModelWithIconQuery, + LLMSlideContentModel, + LLMType1Content, + LLMType2Content, + LLMType3Content, + LLMType4Content, + LLMType5Content, + LLMType6Content, + LLMType7Content, + LLMType8Content, + LLMType9Content, + LLMSlideModel, + LLMPresentationModel, +) + + +class LLMHeadingModelWithValidation(LLMHeadingModel): + heading: str = Field( + description="List item heading to show in slide body", + min_length=10, + max_length=30, + ) + description: str = Field( + description="Description of list item in less than 20 words.", + min_length=80, + max_length=150, + ) + + +class LLMHeadingModelWithImagePromptWithValidation(LLMHeadingModelWithImagePrompt): + image_prompt: str = Field( + description="Prompt used to generate image for this item", + min_length=10, + max_length=50, + ) + + +class LLMHeadingModelWithIconQueryWithValidation(LLMHeadingModelWithIconQuery): + icon_query: str = Field( + description="Icon query to generate icon for this item", + min_length=10, + max_length=50, + ) + + +class LLMType1ContentWithValidation(LLMType1Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + body: str = Field( + description="Slide content summary in less than 30 words.", + min_length=100, + max_length=200, + ) + image_prompt: str = Field( + description="Prompt used to generate image for this slide.", + min_length=10, + max_length=50, + ) + + @classmethod + def get_notes(cls): + return "" + + +class LLMType2ContentWithValidation(LLMType2Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + body: List[LLMHeadingModelWithValidation] = Field( + description="List items to show in slide's body", + min_length=1, + max_length=4, + ) + + @classmethod + def get_notes(cls): + return """ + - The **Body** should include **1 to 4 HeadingModels**. + - Each **Heading** must consist of **1 to 3 words**. + - Each item **Description** can be upto 10 words. + """ + + +class LLMType3ContentWithValidation(LLMType3Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + body: List[LLMHeadingModelWithValidation] = Field( + description="List items to show in slide's body", + min_length=3, + max_length=3, + ) + image_prompt: str = Field( + description="Prompt used to generate image for this slide", + min_length=10, + max_length=50, + ) + + @classmethod + def get_notes(cls): + return """ + - The **Body** should include **3 HeadingModels**. + - Each **Heading** must consist of **1 to 3 words**. + - Each item **Description** can be upto 10 words. + """ + + +class LLMType4ContentWithValidation(LLMType4Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + body: List[LLMHeadingModelWithImagePromptWithValidation] = Field( + description="List items to show in slide's body", + min_length=1, + max_length=3, + ) + + @classmethod + def get_notes(cls): + return """ + - The **Body** should include **1 to 3 HeadingModels**. + - Each **Heading** must consist of **1 to 3 words**. + - Each item **Description** can be upto 10 words. + """ + + +class LLMType5ContentWithValidation(LLMType5Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + body: str = Field( + description="Slide content summary in less than 30 words.", + min_length=100, + max_length=250, + ) + graph: GraphModel = Field(description="Graph to show in slide") + + @classmethod + def get_notes(self): + return "" + + +class LLMType6ContentWithValidation(LLMType6Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + description: str = Field( + description="Slide content summary in less than 20 words.", + min_length=80, + max_length=150, + ) + body: List[LLMHeadingModelWithValidation] = Field( + description="List items to show in slide's body", + min_length=1, + max_length=3, + ) + + @classmethod + def get_notes(cls): + return """ + - The **Body** should include **1 to 3 HeadingModels**. + - Each **Heading** must consist of **1 to 3 words**. + - Each item **Description** can be upto 10 words. + """ + + +class LLMType7ContentWithValidation(LLMType7Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + body: List[LLMHeadingModelWithIconQueryWithValidation] = Field( + description="List items to show in slide's body", + min_length=1, + max_length=4, + ) + + @classmethod + def get_notes(cls): + return """ + - The **Body** should include **1 to 4 HeadingModels**. + - Each **Heading** must consist of **1 to 3 words**. + - Each item **Description** can be upto 10 words. + """ + + +class LLMType8ContentWithValidation(LLMType8Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + description: str = Field( + description="Slide content summary in less than 20 words.", + min_length=80, + max_length=150, + ) + body: List[LLMHeadingModelWithImagePromptWithValidation] = Field( + description="List items to show in slide's body", + min_length=1, + max_length=3, + ) + + @classmethod + def get_notes(cls): + return """ + - The **Body** should include **1 to 3 HeadingModels**. + - Each **Heading** must consist of **1 to 3 words**. + - Each item **Description** can be upto 10 words. + """ + + +class LLMType9ContentWithValidation(LLMType9Content): + title: str = Field( + description="Title of the slide", + min_length=10, + max_length=50, + ) + body: List[LLMHeadingModelWithValidation] = Field( + description="List items to show in slide's body", + min_length=1, + max_length=3, + ) + graph: GraphModel = Field(description="Graph to show in slide") + + @classmethod + def get_notes(cls): + return """ + - The **Body** should include **1 to 3 HeadingModels**. + - Each **Heading** must consist of **1 to 3 words**. + - Each item **Description** can be upto 10 words. + """ + + +LLM_CONTENT_TYPE_WITH_VALIDATION_MAPPING: Mapping[int, LLMSlideContentModel] = { + TYPE1: LLMType1ContentWithValidation, + TYPE2: LLMType2ContentWithValidation, + TYPE3: LLMType3ContentWithValidation, + TYPE4: LLMType4ContentWithValidation, + TYPE5: LLMType5ContentWithValidation, + TYPE6: LLMType6ContentWithValidation, + TYPE7: LLMType7ContentWithValidation, + TYPE8: LLMType8ContentWithValidation, + TYPE9: LLMType9ContentWithValidation, +} + + +class LLMSlideModelWithValidation(LLMSlideModel): + type: int + content: ( + LLMType1ContentWithValidation + | LLMType2ContentWithValidation + | LLMType4ContentWithValidation + | LLMType5ContentWithValidation + | LLMType6ContentWithValidation + | LLMType7ContentWithValidation + | LLMType8ContentWithValidation + | LLMType9ContentWithValidation + ) + + +class LLMPresentationModelWithValidation(LLMPresentationModel): + slides: list[LLMSlideModelWithValidation] diff --git a/servers/fastapi/ppt_generator/models/other_models.py b/servers/fastapi/ppt_generator/models/other_models.py index 4cd625ef..4a6dbb50 100644 --- a/servers/fastapi/ppt_generator/models/other_models.py +++ b/servers/fastapi/ppt_generator/models/other_models.py @@ -1,33 +1,24 @@ -from enum import Enum from pydantic import BaseModel, Field - -# """ # 1. contains title, description and an image. +TYPE1 = 1 # 2. contains title and list of items. +TYPE2 = 2 # 3. contains title, list of items and an image. +TYPE3 = 3 # 4. contains title and list of items and multiple images. +TYPE4 = 4 # 5. contains title, description and a graph. +TYPE5 = 5 # 6. contains title, description and list of items. +TYPE6 = 6 # 7. contains title, list of items and icons. +TYPE7 = 7 # 8. contains title, description, list of items and icons. +TYPE8 = 8 # 9. contains title, list of items and a graph. -# """ - - -class SlideType(Enum): - type1 = 1 - type2 = 2 - type3 = 3 - type4 = 4 - type5 = 5 - type6 = 6 - type7 = 7 - type8 = 8 - type9 = 9 +TYPE9 = 9 class SlideTypeModel(BaseModel): - slide_type: int = Field( - default=1, gte=1, lte=9, description="Slide type from 1 to 9" - ) + slide_type: int = Field(gte=1, lte=9, description="Slide type from 1 to 9") diff --git a/servers/fastapi/ppt_generator/models/query_and_prompt_models.py b/servers/fastapi/ppt_generator/models/query_and_prompt_models.py index 80a91893..0c5a9f23 100644 --- a/servers/fastapi/ppt_generator/models/query_and_prompt_models.py +++ b/servers/fastapi/ppt_generator/models/query_and_prompt_models.py @@ -3,8 +3,6 @@ from typing import Optional from pydantic import BaseModel -from ppt_generator.models.content_type_models import IconQueryCollectionModel - class ImageAspectRatio(Enum): r_1_1 = "1:1" @@ -39,4 +37,4 @@ class IconQueryCollectionWithData(BaseModel): category: IconCategoryEnum = IconCategoryEnum.solid index: int theme: Optional[dict] = None - icon_query: IconQueryCollectionModel + icon_query: str diff --git a/servers/fastapi/ppt_generator/models/slide_model.py b/servers/fastapi/ppt_generator/models/slide_model.py index 204700a5..c475563f 100644 --- a/servers/fastapi/ppt_generator/models/slide_model.py +++ b/servers/fastapi/ppt_generator/models/slide_model.py @@ -2,7 +2,6 @@ import uuid from typing import List, Optional from pydantic import BaseModel -from ppt_generator.models.other_models import SlideType from ppt_generator.models.content_type_models import ( CONTENT_TYPE_MAPPING, Type1Content, @@ -20,7 +19,7 @@ from ppt_generator.models.content_type_models import ( class SlideModel(BaseModel): id: Optional[str] = None index: int - type: SlideType + type: int design_index: Optional[int] = None images: Optional[List[str]] = None icons: Optional[List[str]] = None diff --git a/servers/fastapi/ppt_generator/slide_generator.py b/servers/fastapi/ppt_generator/slide_generator.py index 1a7d33f8..19e52af5 100644 --- a/servers/fastapi/ppt_generator/slide_generator.py +++ b/servers/fastapi/ppt_generator/slide_generator.py @@ -1,19 +1,60 @@ from typing import Optional -import os -from langchain_google_genai import ChatGoogleGenerativeAI +from api.utils.utils import get_large_model, get_small_model +from ppt_config_generator.models import SlideMarkdownModel from ppt_generator.fix_validation_errors import get_validated_response -from ppt_generator.models.content_type_models import ( - CONTENT_TYPE_MAPPING, -) -from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate -from ppt_generator.models.other_models import SlideType, SlideTypeModel +from ppt_generator.models.llm_models import ( + LLM_CONTENT_TYPE_MAPPING, + LLMSlideContentModel, +) +from ppt_generator.models.llm_models_with_validations import ( + LLM_CONTENT_TYPE_WITH_VALIDATION_MAPPING, +) +from ppt_generator.models.other_models import SlideTypeModel from ppt_generator.models.slide_model import SlideModel -prompt_template_from_slide = ChatPromptTemplate.from_messages( +prompt_template_to_generate_slide_content = ChatPromptTemplate.from_messages( + [ + ( + "system", + """ + Generate structured slide based on provided title and outline, follow mentioned steps and notes and provide structured output. + + + # Steps + 1. Analyze the outline and title. + 2. Generate structured slide based on the outline and title. + 3. Generate image prompts and icon queries if mentioned in schema. + 4. Generate graph if mentioned in schema. + + # Notes + - Slide body should not use words like "This slide", "This presentation". + - Rephrase the slide body to make it flow naturally. + - Do not use markdown formatting in slide body. + - **Icon query** must be a generic single word noun. + - **Image prompt** should be a 2-3 words phrase. + - Try to make paragraphs as short as possible. + {notes} + """, + ), + ( + "user", + """ + ## Slide Title + {title} + + ## Slide Outline + {outline} + """, + ), + ] +) + + +prompt_template_to_edit_slide_content = ChatPromptTemplate.from_messages( [ ( "system", @@ -46,7 +87,7 @@ prompt_template_from_slide = ChatPromptTemplate.from_messages( ) -prompt_template_from_slide_type = ChatPromptTemplate.from_messages( +prompt_template_to_select_slide_type = ChatPromptTemplate.from_messages( [ ( "system", @@ -63,8 +104,6 @@ prompt_template_from_slide_type = ChatPromptTemplate.from_messages( - **7**: contains title and list of items with icons. - **8**: contains title, description and list of items with icons. - **9**: contains title, list of items and a graph. - - **10**: contains title, list of inforgraphic charts with supporting information. - - **11**: contains title, a single inforgraphic chart and description. # Notes - Do not select different slide type than current unless absolutely necessary as per user prompt. @@ -84,25 +123,44 @@ prompt_template_from_slide_type = ChatPromptTemplate.from_messages( ) +async def get_slide_content_from_type_and_outline( + slide_type: int, outline: SlideMarkdownModel +) -> LLMSlideContentModel: + content_type_model_type = LLM_CONTENT_TYPE_WITH_VALIDATION_MAPPING[slide_type] + validation_model = LLM_CONTENT_TYPE_MAPPING[slide_type] + model = get_small_model().with_structured_output( + content_type_model_type.model_json_schema() + ) + chain = prompt_template_to_generate_slide_content | model + + return await get_validated_response( + chain, + { + "title": outline.title, + "outline": outline.body, + "notes": content_type_model_type.get_notes(), + }, + content_type_model_type, + validation_model, + ) + + async def get_edited_slide_content_model( prompt: str, - slide_type: SlideType, + slide_type: int, slide: SlideModel, theme: Optional[dict] = None, language: Optional[str] = None, ): - model = ( - ChatOpenAI(model="gpt-4.1-mini") - if os.getenv("LLM") == "openai" - else ChatGoogleGenerativeAI(model="gemini-2.0-flash") - ) + model = get_large_model() - content_type_model_type = CONTENT_TYPE_MAPPING[slide_type] - chain = prompt_template_from_slide | model.with_structured_output( + content_type_model_type = LLM_CONTENT_TYPE_WITH_VALIDATION_MAPPING[slide_type] + validation_model = LLM_CONTENT_TYPE_MAPPING[slide_type] + chain = prompt_template_to_edit_slide_content | model.with_structured_output( content_type_model_type.model_json_schema() ) - slide_data = slide.content.model_dump_json() - return await get_validated_response( + slide_data = slide.content.to_llm_content().model_dump_json() + edited_content = await get_validated_response( chain, { "prompt": prompt, @@ -112,24 +170,23 @@ async def get_edited_slide_content_model( "notes": "", }, content_type_model_type, + validation_model, ) + return edited_content.to_content() + async def get_slide_type_from_prompt( prompt: str, slide: SlideModel, ) -> SlideTypeModel: - model = ( - ChatOpenAI(model="gpt-4.1-mini") - if os.getenv("LLM") == "openai" - else ChatGoogleGenerativeAI(model="gemini-2.0-flash") - ) + model = get_small_model() - chain = prompt_template_from_slide_type | model.with_structured_output( + chain = prompt_template_to_select_slide_type | model.with_structured_output( SlideTypeModel.model_json_schema() ) - slide_data = slide.content.model_dump_json() + slide_data = slide.content.to_llm_content().model_dump_json() return await get_validated_response( chain, { diff --git a/servers/fastapi/ppt_generator/slide_model_utils.py b/servers/fastapi/ppt_generator/slide_model_utils.py index 2ef20b53..134e8597 100644 --- a/servers/fastapi/ppt_generator/slide_model_utils.py +++ b/servers/fastapi/ppt_generator/slide_model_utils.py @@ -1,31 +1,40 @@ from typing import List, Optional -from ppt_generator.models.other_models import SlideType +from ppt_generator.models.other_models import ( + TYPE1, + TYPE2, + TYPE3, + TYPE4, + TYPE5, + TYPE6, + TYPE7, + TYPE8, + TYPE9, +) from ppt_generator.models.query_and_prompt_models import ( IconCategoryEnum, - IconFrameEnum, IconQueryCollectionWithData, ImageAspectRatio, ImagePromptWithThemeAndAspectRatio, ) from ppt_generator.models.slide_model import SlideModel -SLIDE_WITHOUT_IMAGE = [ - SlideType.type2, - SlideType.type5, - SlideType.type6, - SlideType.type7, - SlideType.type8, - SlideType.type9, +SLIDES_WITHOUT_IMAGES = [ + TYPE2, + TYPE5, + TYPE6, + TYPE7, + TYPE8, + TYPE9, ] -SLIDE_WITHOUT_ICON = [ - SlideType.type1, - SlideType.type2, - SlideType.type3, - SlideType.type4, - SlideType.type5, - SlideType.type6, - SlideType.type9, +SLIDES_WITHOUT_ICONS = [ + TYPE1, + TYPE2, + TYPE3, + TYPE4, + TYPE5, + TYPE6, + TYPE9, ] @@ -49,15 +58,15 @@ class SlideModelUtils: def get_image_prompts(self) -> List[ImagePromptWithThemeAndAspectRatio]: theme_prompt = THEME_PROMPTS.get(self.theme["name"], "") if self.theme else "" - if self.type in SLIDE_WITHOUT_IMAGE: + if self.type in SLIDES_WITHOUT_IMAGES: return [] aspect_ratio = ImageAspectRatio.r_1_1 - if self.type is SlideType.type3: + if self.type is TYPE3: aspect_ratio = ImageAspectRatio.r_2_3 - elif self.type is SlideType.type4: + elif self.type is TYPE4: count = len(self.content.body) aspect_ratio = ( ImageAspectRatio.r_5_4 if count == 3 else ImageAspectRatio.r_21_9 @@ -73,7 +82,7 @@ class SlideModelUtils: ] def get_icon_queries(self) -> List[IconQueryCollectionWithData]: - if self.type in SLIDE_WITHOUT_ICON: + if self.type in SLIDES_WITHOUT_ICONS: return [] category = IconCategoryEnum.solid diff --git a/servers/fastapi/pyproject.toml b/servers/fastapi/pyproject.toml deleted file mode 100644 index c61b6e1f..00000000 --- a/servers/fastapi/pyproject.toml +++ /dev/null @@ -1,31 +0,0 @@ -[tool.poetry] -name = "presenton-fastapi-server" -version = "0.1.0" -description = "" -authors = ["Your Name "] -readme = "README.md" -package-mode = false - -[tool.poetry.dependencies] -python = "^3.11" -fastapi = { extras = ["standard"], version = "^0.115.12" } -langchain = "^0.3.25" -sqlmodel = "^0.0.24" -python-pptx = "^1.0.2" -python-docx = "^1.1.2" -langchain-openai = "^0.3.16" -langchain-google-genai = "^2.1.4" -langchain-community = "^0.3.23" -pdfplumber = "^0.11.6" -fastembed = "^0.6.1" - - -[[tool.poetry.source]] -name = "pytorch-cpu" -url = "https://download.pytorch.org/whl/cpu" -priority = "explicit" - - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/servers/fastapi/requirements.txt b/servers/fastapi/requirements.txt new file mode 100644 index 00000000..113c5fbf --- /dev/null +++ b/servers/fastapi/requirements.txt @@ -0,0 +1,121 @@ +aiohappyeyeballs==2.6.1 +aiohttp==3.11.18 +aiosignal==1.3.2 +annotated-types==0.7.0 +anyio==4.9.0 +async-timeout==5.0.1 +attrs==25.3.0 +cachetools==5.5.2 +certifi==2025.4.26 +cffi==1.17.1 +charset-normalizer==3.4.2 +click==8.1.8 +colorama==0.4.6 +coloredlogs==15.0.1 +cryptography==44.0.3 +dataclasses-json==0.6.7 +distro==1.9.0 +dnspython==2.7.0 +email_validator==2.2.0 +fastapi==0.115.12 +fastapi-cli==0.0.7 +fastembed==0.7.0 +filelock==3.18.0 +filetype==1.2.0 +flatbuffers==25.2.10 +frozenlist==1.6.0 +fsspec==2025.3.2 +google-ai-generativelanguage==0.6.18 +google-api-core==2.24.2 +google-auth==2.40.1 +googleapis-common-protos==1.70.0 +greenlet==3.2.2 +grpcio==1.72.0rc1 +grpcio-status==1.72.0rc1 +h11==0.16.0 +httpcore==1.0.9 +httptools==0.6.4 +httpx==0.28.1 +httpx-sse==0.4.0 +huggingface-hub==0.31.2 +humanfriendly==10.0 +idna==3.10 +Jinja2==3.1.6 +jiter==0.9.0 +jsonpatch==1.33 +jsonpointer==3.0.0 +langchain==0.3.25 +langchain-community==0.3.24 +langchain-core==0.3.65 +langchain-google-genai==2.1.4 +langchain-ollama==0.3.3 +langchain-openai==0.3.16 +langchain-text-splitters==0.3.8 +langsmith==0.3.45 +loguru==0.7.3 +lxml==5.4.0 +markdown-it-py==3.0.0 +MarkupSafe==3.0.2 +marshmallow==3.26.1 +mdurl==0.1.2 +mmh3==5.1.0 +mpmath==1.3.0 +multidict==6.4.3 +mypy_extensions==1.1.0 +numpy==2.2.5 +ollama==0.5.1 +onnxruntime==1.22.0 +openai==1.78.1 +orjson==3.10.18 +packaging==24.2 +pdfminer.six==20250327 +pdfplumber==0.11.6 +pillow==11.2.1 +propcache==0.3.1 +proto-plus==1.26.1 +protobuf==6.31.0 +py_rust_stemmers==0.1.5 +pyasn1==0.6.1 +pyasn1_modules==0.4.2 +pycparser==2.22 +pydantic==2.11.4 +pydantic-settings==2.9.1 +pydantic_core==2.33.2 +Pygments==2.19.1 +pypdfium2==4.30.1 +pyreadline3==3.5.4 +python-docx==1.1.2 +python-dotenv==1.1.0 +python-multipart==0.0.20 +python-pptx==1.0.2 +PyYAML==6.0.2 +redis==6.2.0 +regex==2024.11.6 +requests==2.32.3 +requests-toolbelt==1.0.0 +rich==14.0.0 +rich-toolkit==0.14.6 +rsa==4.9.1 +shellingham==1.5.4 +sniffio==1.3.1 +SQLAlchemy==2.0.41 +sqlmodel==0.0.24 +starlette==0.46.2 +sympy==1.14.0 +tenacity==9.1.2 +tiktoken==0.9.0 +tokenizers==0.21.1 +tqdm==4.67.1 +typer==0.15.4 +typing-inspect==0.9.0 +typing-inspection==0.4.0 +typing_extensions==4.13.2 +urllib3==2.4.0 +uvicorn==0.34.2 +uvloop==0.21.0 +watchfiles==1.0.5 +websockets==15.0.1 +win32_setctime==1.2.0 +XlsxWriter==3.2.3 +yarl==1.20.0 +zstandard==0.23.0 diff --git a/servers/fastapi/server.py b/servers/fastapi/server.py index 3935ca6e..40db9df9 100644 --- a/servers/fastapi/server.py +++ b/servers/fastapi/server.py @@ -14,4 +14,4 @@ if __name__ == "__main__": ) args = parser.parse_args() - uvicorn.run("api.main:app", host="127.0.0.1", port=args.port, log_level="info") + uvicorn.run("api.main:app", host="0.0.0.0", port=args.port, log_level="info") diff --git a/servers/fastapi/server.spec b/servers/fastapi/server.spec deleted file mode 100644 index 04c78fcc..00000000 --- a/servers/fastapi/server.spec +++ /dev/null @@ -1,44 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- - - -a = Analysis( - ['server.py'], - pathex=[], - binaries=[], - datas=[('assets', 'assets')], - hiddenimports=[], - hookspath=[], - hooksconfig={}, - runtime_hooks=[], - excludes=[], - noarchive=False, - optimize=0, -) -pyz = PYZ(a.pure) - -exe = EXE( - pyz, - a.scripts, - [], - exclude_binaries=True, - name='fastapi', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=True, - disable_windowed_traceback=False, - argv_emulation=False, - target_arch=None, - codesign_identity=None, - entitlements_file=None, -) -coll = COLLECT( - exe, - a.binaries, - a.datas, - strip=False, - upx=True, - upx_exclude=[], - name='fastapi', -) diff --git a/servers/fastapi/server_autoreload.py b/servers/fastapi/server_autoreload.py index b0c4e49b..4d5c00de 100644 --- a/servers/fastapi/server_autoreload.py +++ b/servers/fastapi/server_autoreload.py @@ -10,5 +10,5 @@ if __name__ == "__main__": args = parser.parse_args() uvicorn.run( - "api.main:app", host="127.0.0.1", port=args.port, log_level="info", reload=True + "api.main:app", host="0.0.0.0", port=args.port, log_level="info", reload=True ) diff --git a/servers/fastapi/server_test.py b/servers/fastapi/server_test.py index f2446056..4b547a5c 100644 --- a/servers/fastapi/server_test.py +++ b/servers/fastapi/server_test.py @@ -5,5 +5,5 @@ load_dotenv() if __name__ == "__main__": uvicorn.run( - "api.main:app", host="127.0.0.1", port=8000, log_level="info", reload=True + "api.main:app", host="0.0.0.0", port=8000, log_level="info", reload=True ) diff --git a/servers/fastapi/test.py b/servers/fastapi/test.py index 61d6c768..17064913 100644 --- a/servers/fastapi/test.py +++ b/servers/fastapi/test.py @@ -1,3 +1,6 @@ -from tests.test_generate_image import test_generate_image +import os +from tests.test_ollama import test_ollama -test_generate_image() +os.environ["LLM"] = "llama3.1:8b" + +test_ollama() diff --git a/servers/fastapi/tests/test_ollama.py b/servers/fastapi/tests/test_ollama.py new file mode 100644 index 00000000..ff764e01 --- /dev/null +++ b/servers/fastapi/tests/test_ollama.py @@ -0,0 +1,62 @@ +import asyncio +import json +from api.utils.utils import download_file +from image_processor.images_finder import get_image_from_pexels +from ppt_config_generator.structure_generator import generate_presentation_structure +from ppt_config_generator.models import ( + PresentationStructureModel, + PresentationMarkdownModel, + SlideMarkdownModel, +) +from ppt_config_generator.ppt_outlines_generator import generate_ppt_content +from ppt_generator.generator import generate_presentation_ollama +from ppt_generator.models.llm_models import LLMPresentationModel +from ppt_generator.slide_generator import get_slide_content_from_type_and_outline + + +def test_ollama(): + # # Generate presentation outline + # presentation_outline = asyncio.run( + # generate_ppt_content( + # prompt="create presentation about moon", + # n_slides=5, + # ) + # ) + + # # Save presentation outline to file + # with open("tests/tmp/presentation_outline.json", "w") as f: + # json.dump(presentation_outline.model_dump(mode="json"), f) + + # # Load presentation outline from file + # with open("tests/tmp/presentation_outline.json", "r") as f: + # presentation_outline = PresentationMarkdownModel.model_validate_json(f.read()) + + # # Generate presentation config + # presentation_config = asyncio.run(generate_presentation_config(presentation_outline)) + + # # Save presentation config to file + # with open("tests/tmp/presentation_config.json", "w") as f: + # json.dump(presentation_config.model_dump(mode="json"), f) + + # # Load presentation config from file + # with open("tests/tmp/presentation_config.json", "r") as f: + # presentation_config = PresentationStructureModel.model_validate_json(f.read()) + + # # Generate presentation + # presentation_output = asyncio.run( + # generate_presentation_ollama(presentation_outline) + # ) + + # # Save presentation output to file + # with open("tests/tmp/presentation_output.json", "w") as f: + # json.dump(presentation_output.model_dump(mode="json"), f) + + # # Generate slide content + # slide_content = asyncio.run( + # get_slide_content_from_type_and_outline(9, presentation_outline.slides[3]) + # ) + + # # Save slide content to file + # with open("tests/tmp/slide_content.json", "w") as f: + # json.dump(slide_content.model_dump(mode="json"), f) + pass \ No newline at end of file diff --git a/servers/fastapi/tests/test_pdf_to_image.py b/servers/fastapi/tests/test_pdf_to_image.py index 07abde47..ec9dbcb2 100644 --- a/servers/fastapi/tests/test_pdf_to_image.py +++ b/servers/fastapi/tests/test_pdf_to_image.py @@ -1,9 +1,9 @@ from image_processor.utils import get_page_images_from_pdf -from api.services.instances import temp_file_service +from api.services.instances import TEMP_FILE_SERVICE def test_pdf_to_image(): pdf_path = "tests/assets/impact_of_llms.pdf" - temp_dir = temp_file_service.create_temp_dir() + temp_dir = TEMP_FILE_SERVICE.create_temp_dir() print(temp_dir) get_page_images_from_pdf(pdf_path, temp_dir) diff --git a/servers/nextjs/app/(presentation-generator)/components/CustomThemeSettings.tsx b/servers/nextjs/app/(presentation-generator)/components/CustomThemeSettings.tsx index 85ebcfbf..02cd1e66 100644 --- a/servers/nextjs/app/(presentation-generator)/components/CustomThemeSettings.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/CustomThemeSettings.tsx @@ -114,6 +114,7 @@ const CustomThemeSettings = ({ draftColors.slideDescription ); root.style.setProperty("--custom-slide-box", draftColors.slideBox); + root.style.setProperty("--custom-icon-bg", draftColors.iconBg); // Save to file and API await Promise.all([ @@ -173,6 +174,7 @@ const CustomThemeSettings = ({ { key: "slideHeading", label: "Heading Color", icon: "🔤" }, { key: "slideDescription", label: "Description Color", icon: "📄" }, { key: "slideBox", label: "Box Color", icon: "📦" }, + { key: "iconBg", label: "Icon Background Color", icon: "📦" }, ]; return ( diff --git a/servers/nextjs/app/(presentation-generator)/components/IconsEditor.tsx b/servers/nextjs/app/(presentation-generator)/components/IconsEditor.tsx index 5f6d30a0..1b8ecf12 100644 --- a/servers/nextjs/app/(presentation-generator)/components/IconsEditor.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/IconsEditor.tsx @@ -16,6 +16,7 @@ import { usePathname, useSearchParams } from "next/navigation"; import { Skeleton } from "@/components/ui/skeleton"; import { Button } from "@/components/ui/button"; import { updateSlideIcon } from "@/store/slices/presentationGeneration"; +import { getStaticFileUrl } from "../utils/others"; interface IconsEditorProps { icon: string; @@ -112,7 +113,7 @@ const IconsEditor = ({ > {icon ? ( slide icon {`Icon diff --git a/servers/nextjs/app/(presentation-generator)/components/ImageEditor.tsx b/servers/nextjs/app/(presentation-generator)/components/ImageEditor.tsx index 87b7c643..de66031f 100644 --- a/servers/nextjs/app/(presentation-generator)/components/ImageEditor.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/ImageEditor.tsx @@ -20,13 +20,13 @@ import { cn } from "@/lib/utils"; import { useDispatch, useSelector } from "react-redux"; import { PresentationGenerationApi } from "../services/api/presentation-generation"; import { RootState } from "@/store/store"; -import { usePathname, useSearchParams } from "next/navigation"; +import { useSearchParams } from "next/navigation"; import { Skeleton } from "@/components/ui/skeleton"; import { updateSlideImage, updateSlideProperties, } from "@/store/slices/presentationGeneration"; -import { ThemeImagePrompt } from "../utils/others"; +import { getStaticFileUrl, ThemeImagePrompt } from "../utils/others"; import { Popover, @@ -34,8 +34,7 @@ import { PopoverTrigger, } from "@/components/ui/popover"; import ToolTip from "@/components/ToolTip"; -import { getEnv } from "@/utils/constant"; -import { clearLogs, logOperation } from "../utils/log"; + interface ImageEditorProps { initialImage: string | null; @@ -97,7 +96,6 @@ const ImageEditor = ({ useEffect(() => { setImage(initialImage); setPreviewImages([initialImage]); - }, [initialImage]); // Close toolbar when clicking outside @@ -112,7 +110,7 @@ const ImageEditor = ({ ) { setIsToolbarOpen(false); if (isFocusPointMode) { - logOperation(`Saving focus point for slide ${slideIndex}, element ${elementId}: x=${focusPoint.x}, y=${focusPoint.y}`); + // saveFocusPoint(); // Save focus point before closing saveImageProperties(objectFit, focusPoint); } setIsFocusPointMode(false); @@ -127,19 +125,16 @@ const ImageEditor = ({ const handleImageClick = () => { if (!isFocusPointMode) { - logOperation(`Opening toolbar for slide ${slideIndex}, element ${elementId}`); setIsToolbarOpen(true); } }; const handleOpenEditor = () => { - logOperation(`Opening image editor for slide ${slideIndex}, element ${elementId}`); setIsToolbarOpen(false); setIsEditorOpen(true); }; const handleImageChange = (newImage: string) => { - logOperation(`Changing image for slide ${slideIndex}, element ${elementId}`); setImage(newImage); dispatch( updateSlideImage({ @@ -164,28 +159,31 @@ const ImageEditor = ({ Math.min(100, ((e.clientY - rect.top) / rect.height) * 100) ); - logOperation(`Setting focus point for slide ${slideIndex}, element ${elementId}: x=${x}, y=${y}`); setFocusPoint({ x, y }); saveImageProperties(objectFit, { x, y }); + // Apply the focus point in real-time if (imageRef.current) { imageRef.current.style.objectPosition = `${x}% ${y}%`; } }; const toggleFocusPointMode = () => { - logOperation(`Toggling focus point mode for slide ${slideIndex}, element ${elementId}: ${!isFocusPointMode}`); + if (isFocusPointMode) { + // If turning off focus point mode, save the current focus point + // saveFocusPoint(); + } setIsFocusPointMode(!isFocusPointMode); }; const handleFitChange = (fit: "cover" | "contain" | "fill") => { - logOperation(`Changing image fit for slide ${slideIndex}, element ${elementId}: ${fit}`); setObjectFit(fit); if (imageRef.current) { imageRef.current.style.objectFit = fit; } + // Save the fit change to your state saveImageProperties(fit, focusPoint); }; @@ -193,7 +191,6 @@ const ImageEditor = ({ fit: "cover" | "contain" | "fill", focusPoint: { x: number; y: number } ) => { - logOperation(`Saving image properties for slide ${slideIndex}, element ${elementId}: fit=${fit}, focusPoint=(${focusPoint.x},${focusPoint.y})`); const propertiesData = { initialObjectFit: fit, initialFocusPoint: focusPoint, @@ -210,7 +207,6 @@ const ImageEditor = ({ const handleGenerateImage = async () => { try { - logOperation(`Generating image for slide ${slideIndex}, element ${elementId} with prompt: ${prompt}`); setIsGenerating(true); setError(null); @@ -225,34 +221,33 @@ const ImageEditor = ({ }, }); - logOperation(`Image generation successful for slide ${slideIndex}, element ${elementId}`); setPreviewImages(response.paths); } catch (err) { - const errorMessage = "Failed to generate image. Please try again."; - logOperation(`Image generation failed for slide ${slideIndex}, element ${elementId}: ${err}`); - setError(errorMessage); + setError("Failed to generate image. Please try again."); } finally { setIsGenerating(false); } }; - const handleFileUpload = async (event: React.ChangeEvent) => { + const handleFileUpload = async ( + event: React.ChangeEvent + ) => { const presentation_id = searchParams.get("id"); const file = event.target.files?.[0]; if (!file) return; - logOperation(`Attempting to upload file for slide ${slideIndex}, element ${elementId}: ${file.name}`); - + // Check file size (e.g., 5MB limit) if (file.size > 5 * 1024 * 1024) { const error_message = "File size should be less than 5MB"; - logOperation(`File upload failed for slide ${slideIndex}, element ${elementId}: File too large`); + setUploadError(error_message); return; } + // Check file type if (!file.type.startsWith("image/")) { const error_message = "Please upload an image file"; - logOperation(`File upload failed for slide ${slideIndex}, element ${elementId}: Invalid file type`); + setUploadError(error_message); return; } @@ -261,15 +256,25 @@ const ImageEditor = ({ setIsUploading(true); setUploadError(null); - const buffer = await file.arrayBuffer(); - // @ts-ignore - const relativePath = await window.electron.uploadImage(Buffer.from(buffer)); + const formData = new FormData(); + formData.append('file', file); - logOperation(`File upload successful for slide ${slideIndex}, element ${elementId}: ${relativePath}`); - setUploadedImageUrl(relativePath); + const response = await fetch('/api/upload-image', { + method: 'POST', + body: formData, + }); + + const result = await response.json(); + + if (!response.ok) { + throw new Error(result.error || 'Upload failed'); + } + + // Update state with the returned path + setUploadedImageUrl(result.filePath); } catch (err) { const error_message = "Failed to upload image. Please try again."; - logOperation(`File upload failed for slide ${slideIndex}, element ${elementId}: ${err}`); + setUploadError(error_message); console.error("Upload error:", err); } finally { @@ -280,10 +285,8 @@ const ImageEditor = ({ // Helper function to determine image URL const getImageUrl = (src: string | null) => { if (!src) return ""; - return src.startsWith("user") ? `file://${src}` : `file://${src}`; + return getStaticFileUrl(src) || ""; }; - const urls = getEnv(); - const BASE_URL = urls.BASE_URL; return ( <> @@ -552,7 +555,7 @@ const ImageEditor = ({ {`Preview Uploaded preview diff --git a/servers/nextjs/app/(presentation-generator)/components/MarkdownEditor.tsx b/servers/nextjs/app/(presentation-generator)/components/MarkdownEditor.tsx new file mode 100644 index 00000000..545aa09b --- /dev/null +++ b/servers/nextjs/app/(presentation-generator)/components/MarkdownEditor.tsx @@ -0,0 +1,31 @@ +import { useEditor, EditorContent } from "@tiptap/react" +import StarterKit from "@tiptap/starter-kit" +import { Markdown } from "tiptap-markdown" + +export default function MarkdownEditor({ content, onChange }: { content: string; onChange: (content: string) => void }) { + const editor = useEditor({ + extensions: [StarterKit, Markdown], + content: content, + editorProps: { + attributes: { + class: "outline-none transition-all duration-200", + }, + }, + onUpdate: ({ editor }) => { + const markdown = editor.storage.markdown.getMarkdown(); + onChange(markdown); + }, + immediatelyRender: false, + }); + + return ( +

+ ); +} \ No newline at end of file diff --git a/servers/nextjs/app/(presentation-generator)/components/UserAccount.tsx b/servers/nextjs/app/(presentation-generator)/components/UserAccount.tsx index 5e7664db..9d213c1a 100644 --- a/servers/nextjs/app/(presentation-generator)/components/UserAccount.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/UserAccount.tsx @@ -1,61 +1,41 @@ "use client"; -import { ChevronDown, LayoutDashboard, Settings, User } from "lucide-react"; -import { AvatarFallback } from "@/components/ui/avatar"; -import { Avatar } from "@/components/ui/avatar"; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from "@/components/ui/popover"; +import { LayoutDashboard, Settings } from "lucide-react"; import React from "react"; import Link from "next/link"; +import { RootState } from "@/store/store"; +import { useSelector } from "react-redux"; const UserAccount = () => { - return ( - - - - - state.userConfig.can_change_keys); + + return ( +
+ - - - + + + Dashboard + + + {canChangeKeys && ( + + + + Settings + + + )} +
); }; diff --git a/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type1Mini.tsx b/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type1Mini.tsx index dab8c229..8b0afccb 100644 --- a/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type1Mini.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type1Mini.tsx @@ -1,4 +1,5 @@ import { PresentationGenerationApi } from "../../services/api/presentation-generation"; +import { getStaticFileUrl } from "../../utils/others"; import MiniTypeWriter from "./MiniTypeWriter"; interface Type1MiniProps { @@ -8,7 +9,7 @@ interface Type1MiniProps { } const Type1Mini = ({ title, description, image }: Type1MiniProps) => { - const updatedImage = image.startsWith("user") ? `file://${image}` : `file://${image}`; + const updatedImage = getStaticFileUrl(image); return (
diff --git a/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type4Mini.tsx b/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type4Mini.tsx index 4eed0210..7a70eb69 100644 --- a/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type4Mini.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type4Mini.tsx @@ -1,3 +1,4 @@ +import { getStaticFileUrl } from "../../utils/others"; import MiniTypeWriter from "./MiniTypeWriter"; interface Type4MiniProps { @@ -12,9 +13,9 @@ interface Type4MiniProps { const Type4Mini = ({ title, body, images }: Type4MiniProps) => { const updatedImages = images.map((image) => { if (image.startsWith("user")) { - return `file://${image}`; + return getStaticFileUrl(image); } - return `file://${image}`; + return getStaticFileUrl(image); }); const getGridCols = (length: number) => { switch (length) { diff --git a/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type7Mini.tsx b/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type7Mini.tsx index 85388eed..df17d0af 100644 --- a/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type7Mini.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type7Mini.tsx @@ -2,6 +2,7 @@ import { useSelector } from "react-redux"; import { PresentationGenerationApi } from "../../services/api/presentation-generation"; import { RootState } from "@/store/store"; import MiniTypeWriter from "./MiniTypeWriter"; +import { getStaticFileUrl } from "../../utils/others"; interface Type7MiniProps { title: string; @@ -16,10 +17,8 @@ const Type7Mini = ({ title, body, icons }: Type7MiniProps) => { const { currentColors } = useSelector((state: RootState) => state.theme); const isGridLayout = body.length === 4; const updatedIcons = icons.map((icon) => { - if (icon.startsWith("user")) { - return `file://${icon}`; - } - return icon; + + return getStaticFileUrl(icon); }); return ( diff --git a/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type8Mini.tsx b/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type8Mini.tsx index 60e2001a..88812031 100644 --- a/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type8Mini.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/mini-slides/Type8Mini.tsx @@ -2,6 +2,7 @@ import { useSelector } from "react-redux"; import { RootState } from "@/store/store"; import { PresentationGenerationApi } from "../../services/api/presentation-generation"; import MiniTypeWriter from "./MiniTypeWriter"; +import { getStaticFileUrl } from "../../utils/others"; interface Type8MiniProps { title: string; @@ -16,10 +17,7 @@ interface Type8MiniProps { const Type8Mini = ({ title, description, body, icons }: Type8MiniProps) => { const { currentColors } = useSelector((state: RootState) => state.theme); const updatedIcons = icons.map((icon) => { - if (icon.startsWith("user")) { - return `file://${icon}`; - } - return icon; + return getStaticFileUrl(icon); }); return ( diff --git a/servers/nextjs/app/(presentation-generator)/components/slide_layouts/SlideFooter.tsx b/servers/nextjs/app/(presentation-generator)/components/slide_layouts/SlideFooter.tsx index f4f574a3..e27c6895 100644 --- a/servers/nextjs/app/(presentation-generator)/components/slide_layouts/SlideFooter.tsx +++ b/servers/nextjs/app/(presentation-generator)/components/slide_layouts/SlideFooter.tsx @@ -21,7 +21,7 @@ import { Camera, Loader2, Plus } from "lucide-react"; import { toast } from "@/hooks/use-toast"; import { useSelector } from "react-redux"; import { RootState } from "@/store/store"; -import { isDarkColor } from "../../utils/others"; +import { getStaticFileUrl, isDarkColor } from "../../utils/others"; import { defaultFooterProperties, useFooterContext } from "../../context/footerContext"; import { FooterProperties } from "../../services/footerService"; @@ -219,7 +219,7 @@ const SlideFooter: React.FC = () => { const getLocalImageUrl = (filePath: string) => { if (!filePath) return ""; if (filePath.startsWith('data:image')) return filePath; - return `file://${filePath}`; + return getStaticFileUrl(filePath); }; const handleEditor = () => { diff --git a/servers/nextjs/app/(presentation-generator)/context/footerContext.tsx b/servers/nextjs/app/(presentation-generator)/context/footerContext.tsx index 3f89a784..08447af4 100644 --- a/servers/nextjs/app/(presentation-generator)/context/footerContext.tsx +++ b/servers/nextjs/app/(presentation-generator)/context/footerContext.tsx @@ -5,7 +5,6 @@ import { FooterProperties, useFooterService, } from "../services/footerService"; -import { clearLogs, logOperation } from "../utils/log"; // Default footer properties export const defaultFooterProperties: FooterProperties = { @@ -58,16 +57,11 @@ export const FooterProvider: React.FC<{ children: React.ReactNode }> = ({ useEffect(() => { const loadFooterProperties = async () => { try { - logOperation('Loading footer properties'); const properties = await footerService.getFooterProperties(); if (properties) { - logOperation('Footer properties loaded successfully'); setFooterProperties(properties); - } else { - logOperation('No footer properties found, using defaults'); } } catch (error) { - logOperation(`Error loading footer properties: ${error}`); console.error("Failed to load footer properties:", error); } }; @@ -77,32 +71,22 @@ export const FooterProvider: React.FC<{ children: React.ReactNode }> = ({ const resetFooterProperties = async () => { try { - logOperation('Resetting footer properties to defaults'); const success = await footerService.resetFooterProperties(defaultFooterProperties); if (success) { - logOperation('Footer properties reset successfully'); setFooterProperties(defaultFooterProperties); - } else { - logOperation('Failed to reset footer properties'); } } catch (error) { - logOperation(`Error resetting footer properties: ${error}`); console.error("Failed to reset footer properties:", error); } }; const saveFooterProperties = async (newProperties: FooterProperties) => { try { - logOperation('Saving new footer properties'); const success = await footerService.saveFooterProperties(newProperties); if (success) { - logOperation('Footer properties saved successfully'); setFooterProperties(newProperties); - } else { - logOperation('Failed to save footer properties'); } } catch (error) { - logOperation(`Error saving footer properties: ${error}`); console.error("Failed to save footer properties:", error); } }; diff --git a/servers/nextjs/app/(presentation-generator)/create/components/CreatePage.tsx b/servers/nextjs/app/(presentation-generator)/create/components/CreatePage.tsx index 682ba822..147f4c81 100644 --- a/servers/nextjs/app/(presentation-generator)/create/components/CreatePage.tsx +++ b/servers/nextjs/app/(presentation-generator)/create/components/CreatePage.tsx @@ -23,16 +23,15 @@ import { PresentationGenerationApi } from "../../services/api/presentation-gener import { useToast } from "@/hooks/use-toast"; import { setPresentationData, - setTitles, + setOutlines, } from "@/store/slices/presentationGeneration"; import { OverlayLoader } from "@/components/ui/overlay-loader"; import Wrapper from "@/components/Wrapper"; -import { clearLogs, logOperation } from "../../utils/log"; const CreatePage = () => { const dispatch = useDispatch(); const router = useRouter(); - const { presentation_id, images, titles } = useSelector( + const { presentation_id, images, outlines } = useSelector( (state: RootState) => state.presentationGeneration ); const { @@ -54,10 +53,10 @@ const CreatePage = () => { const [initialSlideCount, setInitialSlideCount] = useState(0); useEffect(() => { - if (titles && initialSlideCount === 0) { - setInitialSlideCount(titles.length); + if (outlines && initialSlideCount === 0) { + setInitialSlideCount(outlines.length); } - }, [titles]); + }, [outlines]); const sensors = useSensors( useSensor(PointerSensor), @@ -69,24 +68,24 @@ const CreatePage = () => { const handleDragEnd = (event: any) => { const { active, over } = event; - if (!active || !over || !titles) return; + if (!active || !over || !outlines) return; if (active.id !== over.id) { - logOperation(`Reordering slides: ${active.id} -> ${over.id}`); // Find the indices of the dragged and target items - const oldIndex = titles.findIndex((item) => item === active.id); - const newIndex = titles.findIndex((item) => item === over.id); + const oldIndex = outlines.findIndex((item) => item.title === active.id); + const newIndex = outlines.findIndex((item) => item.title === over.id); + + // Create new array with reordered items and updated indices // Reorder the array - const reorderedArray = arrayMove(titles, oldIndex, newIndex); + const reorderedArray = arrayMove(outlines, oldIndex, newIndex); // Update the store with new order - dispatch(setTitles(reorderedArray)); + dispatch(setOutlines(reorderedArray)); } }; const handleSubmit = async () => { - logOperation('Starting presentation generation'); // Generate data setLoadingState({ message: "Generating data...", @@ -95,6 +94,8 @@ const CreatePage = () => { duration: 10, }); try { + + const response = await PresentationGenerationApi.generateData({ presentation_id: presentation_id, theme: { @@ -103,18 +104,18 @@ const CreatePage = () => { }, watermark: false, images: images, - titles: titles, + outlines: outlines, + }); if (response) { - logOperation('Presentation data generated successfully'); dispatch(setPresentationData(response)); + router.push( `/presentation?id=${presentation_id}&session=${response.session}` ); } } catch (error) { - logOperation(`Error in presentation generation: ${error}`); console.error("error in data generation", error); toast({ title: "Error Adding Charts", @@ -132,8 +133,7 @@ const CreatePage = () => { }; const handleAddSlide = () => { - if (!titles) { - logOperation('Error: Cannot add slide - titles not available'); + if (!outlines) { toast({ title: "Error", description: "Cannot add slide at this time", @@ -142,8 +142,7 @@ const CreatePage = () => { return; } - if (titles.length >= initialSlideCount) { - logOperation('Error: Cannot add more slides - reached maximum limit'); + if (outlines.length >= initialSlideCount) { toast({ title: "Cannot add more slides", description: @@ -153,9 +152,9 @@ const CreatePage = () => { return; } - logOperation('Adding new slide to presentation'); - const newTitleWithCharts = [...titles, "New Slide"]; - dispatch(setTitles(newTitleWithCharts)); + const newTitleWithCharts = [...outlines, { title: "New Slide", body: "" }]; + + dispatch(setOutlines(newTitleWithCharts)); }; if (!presentation_id) { @@ -183,19 +182,19 @@ const CreatePage = () => { onDragEnd={handleDragEnd} > ({ id: item })) || []} + items={outlines?.map((item) => ({ id: item.title })) || []} strategy={verticalListSortingStrategy} > - {titles?.map((item, index) => ( - + {outlines?.map((item, index) => ( + ))} - */} + -

+

Font Used: - + {getFontLink(currentColors.fontFamily).name || ''}

); - const MenuItems = () => ( + const MenuItems = ({ mobile }: { mobile: boolean }) => (
{/* Present Button */} - +
{/* Mobile Export Section */}
- +
); @@ -323,13 +303,12 @@ const Header = ({ duration={40} /> - + Presentation logo @@ -363,7 +342,7 @@ const Header = ({ presentationId={presentation_id} /> - + @@ -396,12 +375,23 @@ const Header = ({ Custom Theme - + + {/* Download Modal */} + setShowDownloadModal(false)} + title="File Downloaded" + > +
+

Your file is saved at:

+

{downloadPath}

+
+
); }; diff --git a/servers/nextjs/app/(presentation-generator)/presentation/components/PresentationPage.tsx b/servers/nextjs/app/(presentation-generator)/presentation/components/PresentationPage.tsx index a7747b0e..30e0e31d 100644 --- a/servers/nextjs/app/(presentation-generator)/presentation/components/PresentationPage.tsx +++ b/servers/nextjs/app/(presentation-generator)/presentation/components/PresentationPage.tsx @@ -27,11 +27,7 @@ import { jsonrepair } from "jsonrepair"; import { Button } from "@/components/ui/button"; import { AlertCircle } from "lucide-react"; import Help from "./Help"; -import { getEnv } from "@/utils/constant"; -import { clearLogs, logOperation } from "../../utils/log"; -const urls = getEnv(); -const BASE_URL = urls.BASE_URL; // Custom debounce function function useDebounce void>( @@ -55,8 +51,6 @@ function useDebounce void>( } const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { - const urls = getEnv(); - const BASE_URL = urls.BASE_URL; const dispatch = useDispatch(); const [loading, setLoading] = useState(true); const [selectedSlide, setSelectedSlide] = useState(0); @@ -88,17 +82,14 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { const autoSave = useCallback( (data: { presentation_id: string; slides: any[] }) => { setAutoSaveLoading(true); - logOperation('Auto-saving presentation changes'); // Fire and forget - no await PresentationGenerationApi.updatePresentationContent(data) - .then(() => { - logOperation('Auto-save completed successfully'); - }) + .then(() => { }) .catch((error) => { - logOperation(`Auto-save error: ${error}`); console.error("Error AAYO", error); }) .finally(() => { + setAutoSaveLoading(false); }); }, @@ -132,19 +123,18 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { // Function to fetch the slides useEffect(() => { + let evtSource: EventSource; let accumulatedChunks = ""; const fetchSlides = async () => { - logOperation('Starting slide streaming'); dispatch(setStreaming(true)); evtSource = new EventSource( - `${BASE_URL}/ppt/generate/stream?presentation_id=${presentation_id}&session=${session}` + `/api/v1/ppt/generate/stream?presentation_id=${presentation_id}&session=${session}` ); evtSource.onopen = () => { - logOperation('Stream connection opened'); setColorsVariables(currentColors, currentTheme); }; @@ -158,6 +148,7 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { const repairedJson = jsonrepair(accumulatedChunks); const partialData = JSON.parse(repairedJson); if (partialData.slides) { + // Check if the length of slides has changed if ( partialData.slides.length !== previousSlidesLength.current && partialData.slides.length > 1 @@ -169,16 +160,17 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { slides: partialData.slides, }) ); - previousSlidesLength.current = partialData.slides.length + 1; + previousSlidesLength.current = partialData.slides.length + 1; // Update the previous length setLoading(false); } } } catch (error) { + // console.error('error while repairing json', error) // It's okay if this fails, it just means the JSON isn't complete yet } } else if (data.type === "complete") { try { - logOperation('Stream completed successfully'); + dispatch(setPresentationData(data.presentation)); dispatch(setStreaming(false)); if (data.presentation.theme) { @@ -201,13 +193,11 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { newUrl.searchParams.delete("session"); window.history.replaceState({}, "", newUrl.toString()); } catch (error) { - logOperation(`Error processing stream completion: ${error}`); evtSource.close(); console.error("Error parsing accumulated chunks:", error); } accumulatedChunks = ""; } else if (data.type === "closing") { - logOperation('Stream closing normally'); dispatch(setPresentationData(data.presentation)); if (data.presentation.theme) { dispatch( @@ -231,7 +221,6 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { } }); evtSource.onerror = (error) => { - logOperation(`Stream error: ${error}`); console.error("EventSource failed:", error); setLoading(false); @@ -268,10 +257,8 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { // Function to fetch the user slides const fetchUserSlides = async () => { try { - logOperation('Fetching user slides'); const data = await DashboardApi.getPresentation(presentation_id); if (data) { - logOperation('User slides fetched successfully'); if (data.presentation.theme) { dispatch( setThemeColors({ @@ -288,7 +275,6 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { setLoading(false); } } catch (error) { - logOperation(`Error fetching user slides: ${error}`); setError(true); toast({ title: "Error", @@ -325,7 +311,6 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { // Function to handle slide change for presentation mode const handleSlideChange = (newSlide: number) => { if (newSlide >= 0 && newSlide < presentationData?.slides.length!) { - logOperation(`Changing to slide ${newSlide}`); setSelectedSlide(newSlide); router.push( `/presentation?id=${presentation_id}&mode=present&slide=${newSlide}`, @@ -335,7 +320,6 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { }; const handleDeleteSlide = async (index: number) => { - logOperation(`Deleting slide at index ${index}`); dispatch(deletePresentationSlide(index)); const response = PresentationGenerationApi.deleteSlide( presentation_id, diff --git a/servers/nextjs/app/(presentation-generator)/presentation/components/SidePanel.tsx b/servers/nextjs/app/(presentation-generator)/presentation/components/SidePanel.tsx index 18f6e888..cddd299b 100644 --- a/servers/nextjs/app/(presentation-generator)/presentation/components/SidePanel.tsx +++ b/servers/nextjs/app/(presentation-generator)/presentation/components/SidePanel.tsx @@ -218,7 +218,7 @@ const SidePanel = ({ style={{ backgroundColor: currentColors.slideBg, }} - className="min-w-[300px] max-w-[300px] h-[calc(100vh-150px)] rounded-[20px] hide-scrollbar overflow-hidden slide-theme shadow-xl" + className="min-w-[300px] max-w-[300px] h-[calc(100vh-120px)] rounded-[20px] hide-scrollbar overflow-hidden slide-theme shadow-xl" >
{ - logOperation(`Adding new slide of type ${type} after slide ${index}`); const newSlide: Slide = getEmptySlideContent( type, index + 1, @@ -106,7 +101,6 @@ const SlideContent = ({ presentationData.slides.length > 1 && isStreaming ) { - const slideElement = document.getElementById(`slide-${index}`); if (slideElement) { slideElement.scrollIntoView({ diff --git a/servers/nextjs/app/(presentation-generator)/services/api/presentation-generation.ts b/servers/nextjs/app/(presentation-generator)/services/api/presentation-generation.ts index b4246524..7ca557b2 100644 --- a/servers/nextjs/app/(presentation-generator)/services/api/presentation-generation.ts +++ b/servers/nextjs/app/(presentation-generator)/services/api/presentation-generation.ts @@ -1,20 +1,12 @@ -import { getEnv } from "@/utils/constant"; import { getHeader, getHeaderForFormData } from "./header"; import { IconSearch, ImageGenerate, ImageSearch } from "./params"; -import { clearLogs, logOperation } from "../../utils/log"; -const urls = getEnv(); -const BASE_URL = urls.BASE_URL; export class PresentationGenerationApi { - // static BASE_URL="https://api.presenton.ai"; - // static BASE_URL="https://presentation-generator-fragrant-mountain-1643.fly.dev"; - // static BASE_URL = "http://localhost:48388"; static async getChapterDetails() { try { - logOperation('Fetching chapter details'); const response = await fetch( - `${BASE_URL}/ppt/chapter-details`, + `/api/v1/ppt/chapter-details`, { method: "GET", headers: getHeader(), @@ -23,18 +15,15 @@ export class PresentationGenerationApi { ); if (response.status === 200) { const data = await response.json(); - logOperation('Successfully fetched chapter details'); return data; } } catch (error) { - logOperation(`Error fetching chapter details: ${error}`); console.error("Error getting chapter details:", error); throw error; } } static async uploadDoc(documents: File[], images: File[]) { - logOperation(`Uploading documents: ${documents.length} files, images: ${images.length} files`); const formData = new FormData(); documents.forEach((document) => { @@ -47,7 +36,7 @@ export class PresentationGenerationApi { try { const response = await fetch( - `${BASE_URL}/ppt/files/upload`, + `/api/v1/ppt/files/upload`, { method: "POST", headers: getHeaderForFormData(), @@ -58,27 +47,23 @@ export class PresentationGenerationApi { ); if (!response.ok) { - logOperation(`Upload failed with status: ${response.status}`); throw new Error(`Upload failed: ${response.statusText}`); } const data = await response.json(); - logOperation('Successfully uploaded documents and images'); return data; } catch (error) { - logOperation(`Upload error: ${error}`); console.error("Upload error:", error); throw error; } } - + static async decomposeDocuments(documentKeys: string[], imageKeys: string[]) { - logOperation(`Decomposing documents: ${documentKeys.length} files, images: ${imageKeys.length} files`); try { const response = await fetch( - `${BASE_URL}/ppt/files/decompose`, + `/api/v1/ppt/files/decompose`, { method: "POST", headers: getHeader(), @@ -91,14 +76,12 @@ export class PresentationGenerationApi { ); if (response.status === 200) { const data = await response.json(); - logOperation('Successfully decomposed documents'); + return data; } else { - logOperation(`Failed to decompose files: ${response.statusText}`); throw new Error(`Failed to decompose files: ${response.statusText}`); } } catch (error) { - logOperation(`Error in Decompose Files: ${error}`); console.error("Error in Decompose Files", error); throw error; } @@ -110,7 +93,7 @@ export class PresentationGenerationApi { }) { try { const response = await fetch( - `${BASE_URL}/ppt/titles/generate`, + `/api/v1/ppt/outlines/generate`, { method: "POST", headers: getHeader(), @@ -135,10 +118,9 @@ export class PresentationGenerationApi { } static async generatePresentation(presentationData: any) { - logOperation('Generating presentation'); try { const response = await fetch( - `${BASE_URL}/ppt/generate`, + `/api/v1/ppt/generate`, { method: "POST", headers: getHeader(), @@ -148,14 +130,14 @@ export class PresentationGenerationApi { ); if (response.status === 200) { const data = await response.json(); - logOperation('Successfully generated presentation'); + return data; } else { - logOperation(`Failed to generate presentation: ${response.statusText}`); - throw new Error(`Failed to generate presentation: ${response.statusText}`); + throw new Error( + `Failed to generate presentation: ${response.statusText}` + ); } } catch (error) { - logOperation(`Error in presentation generation: ${error}`); console.error("error in presentation generation", error); throw error; } @@ -165,10 +147,9 @@ export class PresentationGenerationApi { index: number, prompt: string ) { - logOperation(`Editing slide ${index} in presentation ${presentation_id}`); try { const response = await fetch( - `${BASE_URL}/ppt/edit`, + `/api/v1/ppt/edit`, { method: "POST", headers: getHeader(), @@ -183,15 +164,12 @@ export class PresentationGenerationApi { ); if (!response.ok) { - logOperation(`Failed to update slide ${index}: ${response.statusText}`); throw new Error("Failed to update slides"); } const data = await response.json(); - logOperation(`Successfully updated slide ${index}`); return data; } catch (error) { - logOperation(`Error in slide update: ${error}`); console.error("error in slide update", error); throw error; } @@ -200,7 +178,7 @@ export class PresentationGenerationApi { static async updatePresentationContent(body: any) { try { const response = await fetch( - `${BASE_URL}/ppt/slides/update`, + `/api/v1/ppt/slides/update`, { method: "POST", headers: getHeader(), @@ -226,7 +204,7 @@ export class PresentationGenerationApi { static async generateData(presentationData: any) { try { const response = await fetch( - `${BASE_URL}/ppt/generate/data`, + `/api/v1/ppt/generate/data`, { method: "POST", headers: getHeader(), @@ -250,7 +228,7 @@ export class PresentationGenerationApi { static async imageSearch(imageSearch: ImageSearch) { try { const response = await fetch( - `${BASE_URL}/ppt/image/search`, + `/api/v1/ppt/image/search`, { method: "POST", headers: getHeader(), @@ -270,10 +248,9 @@ export class PresentationGenerationApi { } } static async generateImage(imageGenerate: ImageGenerate) { - logOperation(`Generating image with prompt: ${imageGenerate.prompt.image_prompt}`); try { const response = await fetch( - `${BASE_URL}/ppt/image/generate`, + `/api/v1/ppt/image/generate`, { method: "POST", headers: getHeader(), @@ -283,14 +260,12 @@ export class PresentationGenerationApi { ); if (response.ok) { const data = await response.json(); - logOperation('Successfully generated image'); + return data; } else { - logOperation(`Failed to generate images: ${response.statusText}`); throw new Error(`Failed to generate images: ${response.statusText}`); } } catch (error) { - logOperation(`Error in image generation: ${error}`); console.error("error in image generation", error); throw error; } @@ -298,7 +273,7 @@ export class PresentationGenerationApi { static async searchIcons(iconSearch: IconSearch) { try { const response = await fetch( - `${BASE_URL}/ppt/icon/search`, + `/api/v1/ppt/icon/search`, { method: "POST", headers: getHeader(), @@ -322,7 +297,7 @@ export class PresentationGenerationApi { static async updateDocuments(body: any) { try { const response = await fetch( - `${BASE_URL}/ppt/document/update`, + `/api/v1/ppt/document/update`, { method: "POST", headers: getHeaderForFormData(), @@ -344,10 +319,9 @@ export class PresentationGenerationApi { // EXPORT PRESENTATION static async exportAsPPTX(presentationData: any) { - logOperation('Exporting presentation as PPTX'); try { const response = await fetch( - `${BASE_URL}/ppt/presentation/export_as_pptx`, + `/api/v1/ppt/presentation/export_as_pptx`, { method: "POST", headers: getHeader(), @@ -356,27 +330,19 @@ export class PresentationGenerationApi { } ); if (response.ok) { - const data = await response.json(); - logOperation('Successfully exported presentation as PPTX'); - return { - ...data, - url: `${BASE_URL}${data.url}`, - }; + return await response.json(); } else { - logOperation(`Failed to export as pptx: ${response.statusText}`); throw new Error(`Failed to export as pptx: ${response.statusText}`); } } catch (error) { - logOperation(`Error in pptx export: ${error}`); console.error("error in pptx export", error); throw error; } } static async exportAsPDF(presentationData: any) { - logOperation('Exporting presentation as PDF'); try { const response = await fetch( - `${BASE_URL}/ppt/presentation/export_as_pdf`, + `/api/v1/ppt/presentation/export_as_pdf`, { method: "POST", headers: getHeader(), @@ -385,23 +351,20 @@ export class PresentationGenerationApi { ); if (response.ok) { const data = await response.json(); - logOperation('Successfully exported presentation as PDF'); + return data; } else { - logOperation(`Failed to export as pdf: ${response.statusText}`); throw new Error(`Failed to export as pdf: ${response.statusText}`); } } catch (error) { - logOperation(`Error in pdf export: ${error}`); console.error("error in pdf export", error); throw error; } } static async deleteSlide(presentation_id: string, slide_id: string) { - logOperation(`Deleting slide ${slide_id} from presentation ${presentation_id}`); try { const response = await fetch( - `${BASE_URL}/ppt/slide/delete?presentation_id=${presentation_id}&slide_id=${slide_id}`, + `/api/v1/ppt/slide/delete?presentation_id=${presentation_id}&slide_id=${slide_id}`, { method: "DELETE", headers: getHeader(), @@ -409,24 +372,20 @@ export class PresentationGenerationApi { } ); if (response.status === 204) { - logOperation(`Successfully deleted slide ${slide_id}`); return true; } else { - logOperation(`Failed to delete slide: ${response.statusText}`); throw new Error(`Failed to delete slide: ${response.statusText}`); } } catch (error) { - logOperation(`Error in slide deletion: ${error}`); console.error("error in slide deletion", error); throw error; } } // SET THEME COLORS static async setThemeColors(presentation_id: string, theme: any) { - logOperation(`Setting theme colors for presentation ${presentation_id}`); try { const response = await fetch( - `${BASE_URL}/ppt/presentation/theme`, + `/api/v1/ppt/presentation/theme`, { method: "POST", headers: getHeader(), @@ -434,7 +393,7 @@ export class PresentationGenerationApi { presentation_id, theme, }), - + } ); if (response.ok) { @@ -456,18 +415,18 @@ export class PresentationGenerationApi { documents, images, language, - + }: { prompt: string; n_slides: number | null; documents?: string[]; images?: string[]; language: string | null; - + }) { try { const response = await fetch( - `${BASE_URL}/ppt/create`, + `/api/v1/ppt/create`, { method: "POST", headers: getHeader(), @@ -477,7 +436,7 @@ export class PresentationGenerationApi { language, documents, images, - + }), cache: "no-cache", } diff --git a/servers/nextjs/app/(presentation-generator)/services/footerService.ts b/servers/nextjs/app/(presentation-generator)/services/footerService.ts index e357e922..e88edbef 100644 --- a/servers/nextjs/app/(presentation-generator)/services/footerService.ts +++ b/servers/nextjs/app/(presentation-generator)/services/footerService.ts @@ -29,9 +29,12 @@ export const useFooterService = () => { const getFooterProperties = useCallback( async (): Promise => { try { - // @ts-ignore - const result = await window.electron.getFooter(); - return result.properties; + const response = await fetch('/api/footer'); + if (!response.ok) { + throw new Error('Failed to fetch footer properties'); + } + const data = await response.json(); + return data.properties; } catch (error) { console.error("Error retrieving footer properties:", error); return null; @@ -44,8 +47,19 @@ export const useFooterService = () => { const saveFooterProperties = useCallback( async (properties: FooterProperties): Promise => { try { - // @ts-ignore - const result = await window.electron.setFooter(properties); + const response = await fetch('/api/footer', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ properties }), + }); + + if (!response.ok) { + throw new Error('Failed to save footer properties'); + } + + const result = await response.json(); return result.success; } catch (error) { console.error("Error saving footer properties:", error); diff --git a/app/services/settings-store.ts b/servers/nextjs/app/(presentation-generator)/services/setting-store.ts similarity index 68% rename from app/services/settings-store.ts rename to servers/nextjs/app/(presentation-generator)/services/setting-store.ts index dc920237..34ad3eb9 100644 --- a/app/services/settings-store.ts +++ b/servers/nextjs/app/(presentation-generator)/services/setting-store.ts @@ -1,22 +1,26 @@ import path from 'path'; import fs from 'fs'; -import { userDataDir } from '../utils/constants'; - class SettingsStore { - private settingsPath: string; + private settingsPath: string | undefined; private settings: { [key: string]: any }; constructor() { - this.settingsPath = path.join(userDataDir, 'settings.json'); this.settings = {}; this.loadSettings(); } + private getSettingsPath() { + if (this.settingsPath) return this.settingsPath; + this.settingsPath = path.join(process.env.APP_DATA_DIRECTORY!, 'settings.json'); + return this.settingsPath; + } + private loadSettings() { try { - if (fs.existsSync(this.settingsPath)) { - const data = fs.readFileSync(this.settingsPath, 'utf-8'); + const settingsPath = this.getSettingsPath(); + if (fs.existsSync(settingsPath)) { + const data = fs.readFileSync(settingsPath, 'utf-8'); this.settings = JSON.parse(data); } else { @@ -32,7 +36,8 @@ class SettingsStore { private saveSettings() { try { - fs.writeFileSync(this.settingsPath, JSON.stringify(this.settings, null, 2)); + const settingsPath = this.getSettingsPath(); + fs.writeFileSync(settingsPath, JSON.stringify(this.settings, null, 2)); } catch (error) { console.error('Error saving settings:', error); @@ -40,6 +45,7 @@ class SettingsStore { } } + get(key: string, defaultValue: any = null): any { const value = this.settings[key]; diff --git a/servers/nextjs/app/(presentation-generator)/services/themeService.ts b/servers/nextjs/app/(presentation-generator)/services/themeService.ts index aae9a124..23533987 100644 --- a/servers/nextjs/app/(presentation-generator)/services/themeService.ts +++ b/servers/nextjs/app/(presentation-generator)/services/themeService.ts @@ -20,9 +20,12 @@ export const useThemeService = () => { colors: ThemeColors; } | null> => { try { - // @ts-ignore - const result = await window.electron.getTheme(); - return result.theme; + const response = await fetch('/api/theme'); + if (!response.ok) { + throw new Error('Failed to fetch theme'); + } + const data = await response.json(); + return data.theme; } catch (error) { console.error("Error retrieving theme:", error); return null; @@ -35,8 +38,19 @@ export const useThemeService = () => { colors: ThemeColors; }): Promise => { try { - // @ts-ignore - const result = await window.electron.setTheme(themeData); + const response = await fetch('/api/theme', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ themeData }), + }); + + if (!response.ok) { + throw new Error('Failed to save theme'); + } + + const result = await response.json(); return result.success; } catch (error) { console.error("Error saving theme:", error); diff --git a/servers/nextjs/app/(presentation-generator)/theme/ThemePage.tsx b/servers/nextjs/app/(presentation-generator)/theme/ThemePage.tsx index c95faafb..4fa6a039 100644 --- a/servers/nextjs/app/(presentation-generator)/theme/ThemePage.tsx +++ b/servers/nextjs/app/(presentation-generator)/theme/ThemePage.tsx @@ -8,8 +8,8 @@ import { useDispatch } from "react-redux"; import { useRouter } from "next/navigation"; import { ThemeType } from "../upload/type"; import { Button } from "@/components/ui/button"; + import { toast } from "@/hooks/use-toast"; -import { clearLogs, logOperation } from "../utils/log"; interface ThemeCardProps { name: string; @@ -114,20 +114,18 @@ const ThemePage = () => { const router = useRouter(); const [selectedTheme, setSelectedTheme] = useState(null); const handleThemeClick = async (theme: ThemeColors, type: string) => { - logOperation(`Theme selected: ${type}`); setSelectedTheme(type as ThemeType); }; const handleSubmit = () => { if (!selectedTheme) { - logOperation('Error: No theme selected'); toast({ title: "Please select a theme", variant: "destructive", }); return; } - logOperation(`Proceeding with theme: ${selectedTheme}`); dispatch(setTheme(selectedTheme as ThemeType)); + router.push("/create"); }; diff --git a/servers/nextjs/app/(presentation-generator)/upload/components/UploadPage.tsx b/servers/nextjs/app/(presentation-generator)/upload/components/UploadPage.tsx index 95be5661..99face52 100644 --- a/servers/nextjs/app/(presentation-generator)/upload/components/UploadPage.tsx +++ b/servers/nextjs/app/(presentation-generator)/upload/components/UploadPage.tsx @@ -17,7 +17,7 @@ import { useDispatch } from "react-redux"; import { setError, setPresentationId, - setTitles, + setOutlines, } from "@/store/slices/presentationGeneration"; import { ConfigurationSelects } from "./ConfigurationSelects"; import { PromptInput } from "./PromptInput"; @@ -30,7 +30,6 @@ import { PresentationGenerationApi } from "../../services/api/presentation-gener import { OverlayLoader } from "@/components/ui/overlay-loader"; import Wrapper from "@/components/Wrapper"; import { setPptGenUploadState } from "@/store/slices/presentationGenUpload"; -import { clearLogs, logOperation } from "../../utils/log"; // Types for loading state interface LoadingState { @@ -64,8 +63,6 @@ const UploadPage = () => { const dispatch = useDispatch(); const { toast } = useToast(); - - // State management const [documents, setDocuments] = useState([]); const [images, setImages] = useState([]); @@ -141,15 +138,7 @@ const UploadPage = () => { if (!validateConfiguration()) return; try { - // Clear previous logs before starting new presentation - clearLogs(); - logOperation(`----New Presentation Generation----`); - const hasUploadedAssets = documents.length > 0 || images.length > 0; - // Log the configuration - logOperation(`Config: ${JSON.stringify(config)}`); - // Log the files updated - logOperation(`Files updated: ${documents.length} documents, ${images.length} images`); if (hasUploadedAssets) { await handleDocumentProcessing(); @@ -165,7 +154,6 @@ const UploadPage = () => { * Handles document processing */ const handleDocumentProcessing = async () => { - logOperation('Starting document processing'); setLoadingState({ isLoading: true, message: "Processing documents...", @@ -178,7 +166,6 @@ const UploadPage = () => { let imageKeys = []; if (documents.length > 0 || images.length > 0) { - logOperation(`Uploading ${documents.length} documents and ${images.length} images`); const uploadResponse = await PresentationGenerationApi.uploadDoc(documents, images); documentKeys = uploadResponse["documents"]; imageKeys = uploadResponse["images"]; @@ -187,16 +174,15 @@ const UploadPage = () => { const promises: Promise[] = []; if (documents.length > 0 || images.length > 0) { - logOperation('Decomposing documents'); promises.push( PresentationGenerationApi.decomposeDocuments(documentKeys, imageKeys) ); } const responses = await Promise.all(promises); + const processedData = processApiResponses(responses); - logOperation('Document processing completed'); dispatch(setPptGenUploadState(processedData)); router.push("/documents-preview"); }; @@ -231,7 +217,6 @@ const UploadPage = () => { * Handles direct presentation generation without documents */ const handleDirectPresentationGeneration = async () => { - logOperation('Starting direct presentation generation'); setLoadingState({ isLoading: true, message: "Generating outlines...", @@ -244,26 +229,32 @@ const UploadPage = () => { n_slides: config?.slides ? parseInt(config.slides) : null, documents: [], images: [], + language: config?.language ?? "", + }); try { - logOperation('Generating presentation titles'); - const titlePromise = await PresentationGenerationApi.titleGeneration({ + const presentationWithOutlines = await PresentationGenerationApi.titleGeneration({ presentation_id: createResponse.id, }); - dispatch(setPresentationId(titlePromise.id)); - dispatch(setTitles(titlePromise.titles)); - logOperation('Presentation generation completed successfully'); + dispatch(setPresentationId(presentationWithOutlines.id)); + dispatch(setOutlines(presentationWithOutlines.outlines)); router.push("/theme"); } catch (error) { console.error("Error in title generation:", error); - logOperation(`Error in title generation: ${error}`); toast({ title: "Error in title generation.", description: "Please try again.", variant: "destructive", }); + setLoadingState({ + isLoading: false, + message: "", + showProgress: false, + duration: 0, + }); + } }; @@ -272,7 +263,6 @@ const UploadPage = () => { */ const handleGenerationError = (error: any) => { console.error("Error in presentation generation:", error); - logOperation(`Presentation generation error: ${error}`); dispatch(setError("Failed to generate presentation")); setLoadingState({ isLoading: false, diff --git a/servers/nextjs/app/(presentation-generator)/upload/page.tsx b/servers/nextjs/app/(presentation-generator)/upload/page.tsx index 5107b0da..5260ccbf 100644 --- a/servers/nextjs/app/(presentation-generator)/upload/page.tsx +++ b/servers/nextjs/app/(presentation-generator)/upload/page.tsx @@ -44,7 +44,7 @@ const page = () => {
-
+

Create Presentation

{/*

We will generate a presentation for you

*/}
diff --git a/servers/nextjs/app/(presentation-generator)/utils/log.ts b/servers/nextjs/app/(presentation-generator)/utils/log.ts deleted file mode 100644 index 553e2564..00000000 --- a/servers/nextjs/app/(presentation-generator)/utils/log.ts +++ /dev/null @@ -1,11 +0,0 @@ - // Add logging function -export const logOperation = (message: string) => { - // @ts-ignore - window.electron.writeNextjsLog(message) -}; - - // Add clear logs function -export const clearLogs = () => { - // @ts-ignore - window.electron.clearNextjsLogs(); -}; \ No newline at end of file diff --git a/servers/nextjs/app/(presentation-generator)/utils/others.ts b/servers/nextjs/app/(presentation-generator)/utils/others.ts index 26bc50ac..156a6a6b 100644 --- a/servers/nextjs/app/(presentation-generator)/utils/others.ts +++ b/servers/nextjs/app/(presentation-generator)/utils/others.ts @@ -1,3 +1,5 @@ +import path from "path"; + export const getIconFromFile = (file: string): string => { const file_ext = file.split(".").pop()?.toLowerCase() ?? ""; if (file_ext == "pdf") { @@ -51,7 +53,7 @@ export function removeUUID(fileName: string) { export function generateRandomId(): string { - const length = 36; + const length = 36; const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'; let id = ''; for (let i = 0; i < length; i++) { @@ -63,26 +65,26 @@ export function generateRandomId(): string { export const getFontLink = (fontName: string) => { if (!fontName) { - return {link: '', name: ''}; + return { link: '', name: '' }; } - - if ( fontName.includes('instrument')) { - return{link: 'https://fonts.google.com/specimen/Instrument+Sans', name: 'Instrument Sans'} + + if (fontName.includes('instrument')) { + return { link: 'https://fonts.google.com/specimen/Instrument+Sans', name: 'Instrument Sans' } } if (fontName.includes('fraunces')) { - return{link: 'https://fonts.google.com/specimen/Fraunces', name: 'Fraunces'} + return { link: 'https://fonts.google.com/specimen/Fraunces', name: 'Fraunces' } } if (fontName.includes('montserrat')) { - return{link: 'https://fonts.google.com/specimen/Montserrat', name: 'Montserrat'} + return { link: 'https://fonts.google.com/specimen/Montserrat', name: 'Montserrat' } } if (fontName.includes('inria-serif')) { - return{link: 'https://fonts.google.com/specimen/Inria+Serif', name: 'Inria Serif'} + return { link: 'https://fonts.google.com/specimen/Inria+Serif', name: 'Inria Serif' } } - if(fontName.includes('inter')) { - return{link: 'https://fonts.google.com/specimen/Inter', name: 'Inter'} + if (fontName.includes('inter')) { + return { link: 'https://fonts.google.com/specimen/Inter', name: 'Inter' } } else { - return {link: '', name: ''}; + return { link: '', name: '' }; } } @@ -214,3 +216,18 @@ export const ThemeImagePrompt = { " Inspirational and creative with a youthful and playful tone, featuring light, pastel colors including blue, pink, and purple, all blending in a vibrant gradient.", custom: "", }; + + +export function sanitizeFilename(filename: string): string { + // Remove emojis and invalid filename characters + return filename + .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '') // Remove surrogate pairs (emojis) + .replace(/[^\x00-\x7F]/g, '') // Remove non-ASCII characters (including remaining emojis) + .replace(/[\\/:*?"<>|]/g, '_'); // Replace invalid filename characters +} + +export function getStaticFileUrl(filepath: string): string { + const pathParts = filepath.split('/'); + const relevantPath = pathParts.slice(2).join('/'); + return path.join("/static", relevantPath); +} \ No newline at end of file diff --git a/servers/nextjs/app/api/can-change-keys/route.ts b/servers/nextjs/app/api/can-change-keys/route.ts new file mode 100644 index 00000000..41de1f61 --- /dev/null +++ b/servers/nextjs/app/api/can-change-keys/route.ts @@ -0,0 +1,9 @@ +import { NextResponse } from 'next/server'; + +export const dynamic = 'force-dynamic'; + +const canChangeKeys = process.env.CAN_CHANGE_KEYS !== "false"; + +export async function GET() { + return NextResponse.json({ canChange: canChangeKeys }) +} \ No newline at end of file diff --git a/servers/nextjs/app/api/export-as-pdf/route.ts b/servers/nextjs/app/api/export-as-pdf/route.ts new file mode 100644 index 00000000..4eb5fe2f --- /dev/null +++ b/servers/nextjs/app/api/export-as-pdf/route.ts @@ -0,0 +1,34 @@ +import path from 'path'; +import fs from 'fs'; +import puppeteer from 'puppeteer'; + +import { sanitizeFilename } from '@/app/(presentation-generator)/utils/others'; +import { NextResponse, NextRequest } from 'next/server'; + + +export async function POST(req: NextRequest) { + const { url, title } = await req.json(); + + const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox', '--disable-setuid-sandbox'] + }); + const page = await browser.newPage(); + await page.goto(url, { waitUntil: 'networkidle0' }); + + const pdfBuffer = await page.pdf({ + printBackground: true, + width: "1280px", + height: "720px", + margin: { top: 0, right: 0, bottom: 0, left: 0 } + }); + browser.close(); + const sanitizedTitle = sanitizeFilename(title); + const destinationPath = path.join(process.env.APP_DATA_DIRECTORY!, `${sanitizedTitle}.pdf`); + await fs.promises.writeFile(destinationPath, pdfBuffer); + + return NextResponse.json({ + success: true, + path: destinationPath + }); +} diff --git a/servers/nextjs/app/api/footer/route.ts b/servers/nextjs/app/api/footer/route.ts new file mode 100644 index 00000000..80dda2f7 --- /dev/null +++ b/servers/nextjs/app/api/footer/route.ts @@ -0,0 +1,60 @@ + +import { settingsStore } from "@/app/(presentation-generator)/services/setting-store"; +import { NextRequest, NextResponse } from "next/server"; + +const FOOTER_KEY = 'footer'; +// GET handler to retrieve properties +export async function GET(request: NextRequest) { + try { + const properties = settingsStore.get(FOOTER_KEY); + + if (!properties) { + return NextResponse.json({ properties: null }); + } + + return NextResponse.json({ properties }); + } catch (error) { + console.error('Error retrieving footer properties:', error); + return NextResponse.json( + { error: 'Failed to retrieve footer properties' }, + { status: 500 } + ); + } +} + + +// POST handler to save properties +export async function POST(request: NextRequest) { + try { + const body = await request.json(); + const { properties } = body; + + if (!properties) { + return NextResponse.json( + { error: 'Properties are required' }, + { status: 400 } + ); + } + + // Validate required properties + if (!properties.logoProperties || !properties.footerMessage) { + return NextResponse.json( + { error: 'Invalid footer properties structure' }, + { status: 400 } + ); + } + + settingsStore.set(FOOTER_KEY, properties); + + return NextResponse.json({ + success: true, + properties + }); + } catch (error) { + console.error('Error saving footer properties:', error); + return NextResponse.json( + { error: 'Failed to save footer properties' }, + { status: 500 } + ); + } +} \ No newline at end of file diff --git a/servers/nextjs/app/api/get-theme-from-name/route.ts b/servers/nextjs/app/api/get-theme-from-name/route.ts new file mode 100644 index 00000000..438fa5e9 --- /dev/null +++ b/servers/nextjs/app/api/get-theme-from-name/route.ts @@ -0,0 +1,15 @@ +import { NextRequest, NextResponse } from "next/server"; +import { defaultColors } from "@/app/(presentation-generator)/store/themeSlice"; + + +export const GET = async (request: NextRequest) => { + const { searchParams } = new URL(request.url); + const themeName = searchParams.get("theme") ?? "light"; + + const theme = { + name: themeName, + colors: defaultColors[themeName as keyof typeof defaultColors], + } + + return NextResponse.json(theme); +}; \ No newline at end of file diff --git a/servers/nextjs/app/api/read-file/route.ts b/servers/nextjs/app/api/read-file/route.ts new file mode 100644 index 00000000..23c764d3 --- /dev/null +++ b/servers/nextjs/app/api/read-file/route.ts @@ -0,0 +1,19 @@ +import { NextResponse } from 'next/server'; +import fs from 'fs'; +import path from 'path'; + +export async function POST(request: Request) { + try { + const { filePath } = await request.json(); + const normalizedPath = path.normalize(filePath); + const content= fs.readFileSync(normalizedPath, 'utf-8'); + + return NextResponse.json({ content }); + } catch (error) { + console.error('Error reading file:', error); + return NextResponse.json( + { error: 'Failed to read file' }, + { status: 500 } + ); + } +} \ No newline at end of file diff --git a/servers/nextjs/app/api/slide-metadata/route.ts b/servers/nextjs/app/api/slide-metadata/route.ts new file mode 100644 index 00000000..c5c470e6 --- /dev/null +++ b/servers/nextjs/app/api/slide-metadata/route.ts @@ -0,0 +1,415 @@ +import { NextRequest, NextResponse } from "next/server"; +import puppeteer from "puppeteer"; +import fs from 'fs'; +import path from 'path'; +import os from 'os'; + +interface Position { + left: number; + top: number; + width: number; + height: number; +} + +interface FontStyles { + name: string; + size: number; + bold: boolean; + weight: number; + color: string; +} + +interface TextElement { + position: Position; + paragraphs: { + alignment: number; + text: string; + font: FontStyles; + }[]; +} + +interface PictureElement { + position: Position; + picture: { + is_network: boolean; + path: string; + }; + shape: string | null; + object_fit: { + fit: string | null; + focus: number[]; + }; + overlay: string | null; + border_radius: number[]; +} + +interface BoxElement { + position: Position; + type: number; + fill: { + color: string; + }; + border_radius: number; + stroke: { + color: string; + thickness: number; + }; + shadow: { + radius: number; + color: string; + offset: number; + opacity: number; + angle: number; + }; +} + +interface LineElement { + position: Position; + lineType: number; + thickness: string; + color: string; +} + +interface GraphElement { + position: Position; + picture: { + is_network: boolean; + path: string; + }; + border_radius: number[]; +} + +type SlideElement = TextElement | PictureElement | BoxElement | LineElement | GraphElement; + +interface SlideMetadata { + slideIndex: number; + backgroundColor: string; + elements: SlideElement[]; +} + +interface ThemeParams { + theme: string; + customColors?: { + slideBg: string; + slideTitle: string; + slideHeading: string; + slideDescription: string; + slideBox: string; + }; +} + +export async function POST(request: NextRequest) { + let browser; + try { + const body = await request.json(); + const { url, theme, customColors } = body; + + if (!url) { + return NextResponse.json({ error: "Missing URL" }, { status: 400 }); + } + + browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox', '--disable-setuid-sandbox'] + }); + + const page = await browser.newPage(); + await page.setViewport({ width: 1440, height: 900, deviceScaleFactor: 1 }); + + try { + await page.goto(url, { + waitUntil: "networkidle0", + timeout: 60000, + }); + } catch (error) { + await browser.close(); + return NextResponse.json({ error: "Failed to Navigate to provided URL" }, { status: 500 }); + } + + try { + await page.waitForSelector('[data-element-type="slide-container"]', { + timeout: 60000, + }); + + await page.evaluate( + async (params: ThemeParams) => { + const { theme, customColors } = params; + const containers = document.querySelectorAll(".slide-theme"); + + containers.forEach((container) => { + container.removeAttribute("data-theme"); + container.setAttribute("data-theme", theme); + }); + + if (theme === "custom" && customColors) { + const root = document.documentElement; + root.style.setProperty("--custom-slide-bg", customColors.slideBg); + root.style.setProperty("--custom-slide-title", customColors.slideTitle); + root.style.setProperty("--custom-slide-heading", customColors.slideHeading); + root.style.setProperty("--custom-slide-description", customColors.slideDescription); + root.style.setProperty("--custom-slide-box", customColors.slideBox); + } + }, + { theme, customColors } + ); + } catch (error) { + await browser.close(); + return NextResponse.json({ error: "Slide container not found" }, { status: 500 }); + } + + const metadata = await page.evaluate(async () => { + function rgbToHex(color: string) { + if (!color || color === "transparent" || color === "none") return "000000"; + if (color.startsWith("#")) return color.replace("#", ""); + const matches = color.match(/\d+/g); + if (!matches) return "000000"; + const r = parseInt(matches[0]); + const g = parseInt(matches[1]); + const b = parseInt(matches[2]); + return [r, g, b].map((x) => x.toString(16).padStart(2, "0")).join(""); + } + + async function collectSlideMetadata(): Promise { + const slidesMetadata: SlideMetadata[] = []; + const slideContainers = Array.from( + document.querySelectorAll('[data-element-type="slide-container"]') + ); + + for (const container of slideContainers) { + const containerEl = container as HTMLElement; + containerEl.style.width = "1280px"; + containerEl.style.height = "720px"; + containerEl.style.transform = "none"; + + const containerRect = containerEl.getBoundingClientRect(); + const slideIndex = parseInt( + containerEl.getAttribute("data-slide-index") || "0" + ); + const containerComputedStyle = window.getComputedStyle(containerEl); + + const slideMetadata: SlideMetadata = { + slideIndex, + backgroundColor: rgbToHex(containerComputedStyle.backgroundColor), + elements: [], + }; + const slideType = containerEl.getAttribute("data-slide-type"); + + const elements = Array.from( + containerEl.querySelectorAll( + '[data-slide-element]:not([data-element-type="slide-container"])' + ) + ); + + for (const element of elements) { + const el = element as HTMLElement; + const isIcon = el.getAttribute("data-is-icon"); + const isAlign = el.getAttribute("data-is-align"); + + const elementRect = el.getBoundingClientRect(); + const computedStyle = window.getComputedStyle(el); + + const position: Position = { + left: Math.round(elementRect.left - containerRect.left), + top: Math.round(elementRect.top - containerRect.top), + width: Math.round(elementRect.width), + height: Math.round(elementRect.height), + }; + + const elementType = el.getAttribute("data-element-type"); + if (!elementType) continue; + + const fontStyles: FontStyles = { + name: computedStyle.fontFamily.split('_')[2] || 'Inter', + size: parseInt(computedStyle.fontSize), + bold: parseInt(computedStyle.fontWeight) >= 500 ? true : false, + weight: parseInt(computedStyle.fontWeight), + color: rgbToHex(computedStyle.color), + }; + + switch (elementType) { + case "text": + const textContent = el.getAttribute("data-text-content"); + const textElement: TextElement = { + position, + paragraphs: [ + { + alignment: isAlign === 'true' ? 2 : 1, + text: textContent || el.textContent || "", + font: fontStyles, + }, + ], + }; + slideMetadata.elements.push(textElement); + break; + + case "picture": + const imgEl = el.tagName.toLowerCase() === "img" ? el as HTMLImageElement : el.querySelector("img") as HTMLImageElement; + if (imgEl) { + const focialPointx = parseFloat(imgEl.getAttribute('data-focial-point-x') || '0'); + const focialPointy = parseFloat(imgEl.getAttribute('data-focial-point-y') || '0'); + const image_type = imgEl.getAttribute('data-image-type'); + const objectFit = imgEl.getAttribute('data-object-fit'); + + const pictureElement: PictureElement = { + position, + picture: { + is_network: imgEl.src.startsWith("http"), + path: imgEl.src || imgEl.getAttribute("data-image-path") || "", + }, + shape: image_type, + object_fit: { + fit: objectFit, + focus: [focialPointx, focialPointy], + }, + overlay: isIcon ? "ffffff" : null, + border_radius: slideType === "4" + ? [parseInt(computedStyle.borderRadius), parseInt(computedStyle.borderRadius), 0, 0] + : [parseInt(computedStyle.borderRadius), parseInt(computedStyle.borderRadius), parseInt(computedStyle.borderRadius), parseInt(computedStyle.borderRadius)], + }; + slideMetadata.elements.push(pictureElement); + } + break; + + case "slide-box": + case "filledbox": + const boxShadow = computedStyle.boxShadow; + let shadowRadius = 0; + let shadowColor = "000000"; + let shadowOffsetX = 0; + let shadowOffsetY = 0; + let shadowOpacity = 0; + + if (boxShadow && boxShadow !== "none") { + const boxShadowRegex = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*([\d.]+)?\)?\s+(-?\d+)px\s+(-?\d+)px\s+(-?\d+)px/; + const match = boxShadow.match(boxShadowRegex); + + if (match) { + const r = match[1]; + const g = match[2]; + const b = match[3]; + const rgbStr = `rgb(${r}, ${g}, ${b})`; + shadowColor = rgbToHex(rgbStr); + shadowOpacity = match[4] ? parseFloat(match[4]) : 1; + shadowOffsetX = parseInt(match[5]); + shadowOffsetY = parseInt(match[6]); + shadowRadius = parseInt(match[7]); + } + } + + const boxElement: BoxElement = { + position, + type: computedStyle.borderRadius === "9999px" || computedStyle.borderRadius === "50%" ? 9 : 5, + fill: { + color: rgbToHex(computedStyle.backgroundColor), + }, + border_radius: parseInt(computedStyle.borderRadius) || 0, + stroke: { + color: rgbToHex(computedStyle.borderColor), + thickness: parseInt(computedStyle.borderWidth) || 0, + }, + shadow: { + radius: shadowRadius, + color: shadowColor, + offset: Math.sqrt(shadowOffsetX * shadowOffsetX + shadowOffsetY * shadowOffsetY), + opacity: shadowOpacity, + angle: Math.round((Math.atan2(shadowOffsetY, shadowOffsetX) * 180) / Math.PI), + }, + }; + slideMetadata.elements.push(boxElement); + break; + + case "line": + const lineElement: LineElement = { + position, + lineType: 1, + thickness: computedStyle.borderWidth || computedStyle.height, + color: rgbToHex(computedStyle.borderColor || computedStyle.backgroundColor), + }; + slideMetadata.elements.push(lineElement); + break; + + case "graph": + const graphId = el.getAttribute("data-element-id"); + const graphElement: GraphElement = { + position, + picture: { + is_network: true, + path: `__GRAPH_PLACEHOLDER__${graphId}`, + }, + border_radius: [0, 0, 0, 0], + }; + slideMetadata.elements.push(graphElement); + break; + } + } + + slidesMetadata.push(slideMetadata); + } + + return slidesMetadata; + } + + return await collectSlideMetadata(); + }); + + const graphElements = await page.$$('[data-element-type="graph"]'); + + for (const graphElement of graphElements) { + const graphId = await graphElement.evaluate((el: Element) => + el.getAttribute("data-element-id") + ); + + const screenshot = await graphElement.screenshot({ + type: "jpeg", + encoding: "base64", + quality: 100, + omitBackground: true, + }); + + try { + const tempDir = process.env.TEMP_DIRECTORY || os.tmpdir(); + + // Generate a unique filename + const filename = `chart-${graphId}-${Date.now()}.jpg`; + const filePath = path.join(tempDir, filename); + + // Save the file + fs.writeFileSync(filePath, Buffer.from(screenshot, 'base64')); + + metadata.forEach((slide) => { + slide.elements.forEach((element) => { + if ('picture' in element && element.picture.path === `__GRAPH_PLACEHOLDER__${graphId}`) { + element.picture.path = filePath; + } + }); + }); + } catch (error) { + console.error('Error saving screenshot:', error); + continue; + } + } + await browser.close(); + + + const slides = metadata.map((slide: any, index: any) => { + return { + shapes: slide.elements, + }; + }); + + const apiBody = { + pptx_model: { + background_color: metadata[0].backgroundColor, + slides: slides, + }, + }; + + return NextResponse.json(apiBody); + } catch (error) { + console.error("Error during page preparation:", error); + if (browser) await browser.close(); + return NextResponse.json({ error: "Internal server error" }, { status: 500 }); + } finally { + if (browser) await browser.close(); + } +} \ No newline at end of file diff --git a/servers/nextjs/app/api/static/[...filepath]/route.ts b/servers/nextjs/app/api/static/[...filepath]/route.ts new file mode 100644 index 00000000..782d165d --- /dev/null +++ b/servers/nextjs/app/api/static/[...filepath]/route.ts @@ -0,0 +1,48 @@ +import fs from 'fs'; +import path from 'path'; +import { NextRequest, NextResponse } from 'next/server'; + + +export async function GET( + request: NextRequest, + { params }: { params: { filepath: string[] } }, +) { + const BASE_DIR = "/app"; + + const filepath = params.filepath.join("/"); + + if (!params.filepath) { + return new NextResponse('No file specified', { status: 400 }); + } + + const filePath = path.join(BASE_DIR, filepath); + + if (!fs.existsSync(filePath)) { + return new NextResponse('File not found', { status: 404 }); + } + + const stat = fs.statSync(filePath); + if (stat.isDirectory()) { + return new NextResponse('Access to directories is forbidden', { status: 403 }); + } + + const fileStream = fs.createReadStream(filePath); + const headers = new Headers(); + headers.set('Content-Disposition', `inline; filename="${path.basename(filePath)}"`); + headers.set('Content-Type', getMimeType(filePath)); + + return new NextResponse(fileStream as any, { headers }); +} + +function getMimeType(filePath: string): string { + const ext = path.extname(filePath).toLowerCase(); + switch (ext) { + case '.txt': return 'text/plain'; + case '.json': return 'application/json'; + case '.jpg': + case '.jpeg': return 'image/jpeg'; + case '.png': return 'image/png'; + case '.pdf': return 'application/pdf'; + default: return 'application/octet-stream'; + } +} diff --git a/servers/nextjs/app/api/theme/route.ts b/servers/nextjs/app/api/theme/route.ts new file mode 100644 index 00000000..30696cfa --- /dev/null +++ b/servers/nextjs/app/api/theme/route.ts @@ -0,0 +1,49 @@ +import { settingsStore } from "@/app/(presentation-generator)/services/setting-store"; +import { NextRequest, NextResponse } from "next/server"; + +const THEME_KEY = 'theme'; + +export async function GET(request: NextRequest) { + try { + const theme = settingsStore.get(THEME_KEY); + + if (!theme) { + return NextResponse.json({ theme: null }); + } + + return NextResponse.json({ theme }); + } catch (error) { + console.error('Error retrieving theme:', error); + return NextResponse.json( + { error: 'Failed to retrieve theme' }, + { status: 500 } + ); + } +} + +export async function POST(request: NextRequest) { + try { + const body = await request.json(); + const { themeData } = body; + + if (!themeData || !themeData.name || !themeData.colors) { + return NextResponse.json( + { error: 'Invalid theme data' }, + { status: 400 } + ); + } + + settingsStore.set(THEME_KEY, themeData); + + return NextResponse.json({ + success: true, + theme: themeData + }); + } catch (error) { + console.error('Error saving theme:', error); + return NextResponse.json( + { error: 'Failed to save theme' }, + { status: 500 } + ); + } +} \ No newline at end of file diff --git a/servers/nextjs/app/api/upload-image/route.ts b/servers/nextjs/app/api/upload-image/route.ts new file mode 100644 index 00000000..c354ec7c --- /dev/null +++ b/servers/nextjs/app/api/upload-image/route.ts @@ -0,0 +1,47 @@ +import { NextRequest, NextResponse } from "next/server"; +import path from "path"; +import fs from "fs"; +import crypto from "crypto"; + + +const userDataDir = process.env.APP_DATA_DIRECTORY!; + +export async function POST(request: NextRequest) { + try { + const formData = await request.formData(); + const file = formData.get("file") as File; + + if (!file) { + return NextResponse.json( + { error: "No file provided" }, + { status: 400 } + ); + } + + const bytes = await file.arrayBuffer(); + const buffer = Buffer.from(bytes); + + // Create uploads directory if it doesn't exist + const uploadsDir = path.join(userDataDir, "uploads"); + fs.mkdirSync(uploadsDir, { recursive: true }); + + // Generate unique filename + const filename = `${crypto.randomBytes(16).toString("hex")}.png`; + const filePath = path.join(uploadsDir, filename); + + // Write file to disk + fs.writeFileSync(filePath, buffer); + + // Return the relative path that can be used in the frontend + return NextResponse.json({ + success: true, + filePath: `/app/user_data/uploads/${filename}` + }); + } catch (error) { + console.error("Error saving image:", error); + return NextResponse.json( + { error: "Failed to save image" }, + { status: 500 } + ); + } +} \ No newline at end of file diff --git a/servers/nextjs/app/api/user-config/route.ts b/servers/nextjs/app/api/user-config/route.ts new file mode 100644 index 00000000..f8fc32f5 --- /dev/null +++ b/servers/nextjs/app/api/user-config/route.ts @@ -0,0 +1,44 @@ +import { NextResponse } from 'next/server'; +import fs from 'fs'; + +const userConfigPath = process.env.USER_CONFIG_PATH!; +const canChangeKeys = process.env.CAN_CHANGE_KEYS !== 'false'; + +export async function GET() { + if (!canChangeKeys) { + return NextResponse.json({ + error: 'You are not allowed to access this resource', + }) + } + + if (!fs.existsSync(userConfigPath)) { + return NextResponse.json({}) + } + const configData = fs.readFileSync(userConfigPath, 'utf-8') + return NextResponse.json(JSON.parse(configData)) +} + +export async function POST(request: Request) { + if (!canChangeKeys) { + return NextResponse.json({ + error: 'You are not allowed to access this resource', + }) + } + + const userConfig = await request.json() + + let existingConfig: LLMConfig = {} + if (fs.existsSync(userConfigPath)) { + const configData = fs.readFileSync(userConfigPath, 'utf-8') + existingConfig = JSON.parse(configData) + } + const mergedConfig: LLMConfig = { + LLM: userConfig.LLM || existingConfig.LLM, + OPENAI_API_KEY: userConfig.OPENAI_API_KEY || existingConfig.OPENAI_API_KEY, + GOOGLE_API_KEY: userConfig.GOOGLE_API_KEY || existingConfig.GOOGLE_API_KEY, + OLLAMA_MODEL: userConfig.OLLAMA_MODEL || existingConfig.OLLAMA_MODEL, + PEXELS_API_KEY: userConfig.PEXELS_API_KEY || existingConfig.PEXELS_API_KEY, + } + fs.writeFileSync(userConfigPath, JSON.stringify(mergedConfig)) + return NextResponse.json(mergedConfig) +} \ No newline at end of file diff --git a/servers/nextjs/app/dashboard/api/dashboard.ts b/servers/nextjs/app/dashboard/api/dashboard.ts index c6e14424..351b5ad7 100644 --- a/servers/nextjs/app/dashboard/api/dashboard.ts +++ b/servers/nextjs/app/dashboard/api/dashboard.ts @@ -2,11 +2,9 @@ import { getHeader, getHeaderForFormData, } from "@/app/(presentation-generator)/services/api/header"; -import { getEnv } from "@/utils/constant"; -import { clearLogs, logOperation } from "@/app/(presentation-generator)/utils/log"; -const urls = getEnv(); -const BASE_URL = urls.BASE_URL; + + export interface PresentationResponse { id: string; title: string; @@ -25,60 +23,51 @@ export interface PresentationResponse { } export class DashboardApi { - + static async getPresentations(): Promise { try { - logOperation('Fetching user presentations'); const response = await fetch( - `${BASE_URL}/ppt/user_presentations`, + `/api/v1/ppt/user_presentations`, { method: "GET", } ); if (response.status === 200) { const data = await response.json(); - logOperation(`Successfully fetched ${data.length} presentations`); return data; } else if (response.status === 404) { - logOperation('No presentations found'); console.log("No presentations found"); return []; } return []; } catch (error) { - logOperation(`Error fetching presentations: ${error}`); console.error("Error fetching presentations:", error); throw error; } } static async getPresentation(id: string) { try { - logOperation(`Fetching presentation with ID: ${id}`); const response = await fetch( - `${BASE_URL}/ppt/presentation?presentation_id=${id}`, + `/api/v1/ppt/presentation?presentation_id=${id}`, { method: "GET", - + } ); if (response.status === 200) { const data = await response.json(); - logOperation(`Successfully fetched presentation ${id}`); return data; } - logOperation(`Presentation ${id} not found`); throw new Error("Presentation not found"); } catch (error) { - logOperation(`Error fetching presentation ${id}: ${error}`); console.error("Error fetching presentations:", error); throw error; } } static async deletePresentation(presentation_id: string) { try { - logOperation(`Deleting presentation ${presentation_id}`); const response = await fetch( - `${BASE_URL}/ppt/delete?presentation_id=${presentation_id}`, + `/api/v1/ppt/delete?presentation_id=${presentation_id}`, { method: "DELETE", headers: getHeader(), @@ -86,26 +75,22 @@ export class DashboardApi { ); if (response.status === 204) { - logOperation(`Successfully deleted presentation ${presentation_id}`); return true; } - logOperation(`Failed to delete presentation ${presentation_id}`); return false; } catch (error) { - logOperation(`Error deleting presentation ${presentation_id}: ${error}`); console.error("Error deleting presentation:", error); throw error; } } static async setSlideThumbnail(presentation_id: string, file: any) { - logOperation(`Setting thumbnail for presentation ${presentation_id}`); const formData = new FormData(); formData.append("presentation_id", presentation_id); formData.append("thumbnail", file); try { const response = await fetch( - `${BASE_URL}/ppt/presentation/thumbnail`, + `/api/v1/ppt/presentation/thumbnail`, { method: "POST", headers: getHeaderForFormData(), @@ -113,10 +98,8 @@ export class DashboardApi { } ); const data = await response.json(); - logOperation(`Successfully set thumbnail for presentation ${presentation_id}`); return data; } catch (error) { - logOperation(`Error setting slide thumbnail for presentation ${presentation_id}: ${error}`); console.error("Error setting slide thumbnail:", error); throw error; } diff --git a/servers/nextjs/app/dashboard/components/Header.tsx b/servers/nextjs/app/dashboard/components/Header.tsx index 132e0f2b..6ca4c67e 100644 --- a/servers/nextjs/app/dashboard/components/Header.tsx +++ b/servers/nextjs/app/dashboard/components/Header.tsx @@ -2,7 +2,6 @@ import Wrapper from "@/components/Wrapper"; import React from "react"; -import Image from "next/image"; import Link from "next/link"; import UserAccount from "@/app/(presentation-generator)/components/UserAccount"; import BackBtn from "@/components/BackBtn"; @@ -12,16 +11,14 @@ const Header = () => { return (
-
+
{pathname !== '/upload' && } Presentation logo
diff --git a/servers/nextjs/app/dashboard/components/PresentationCard.tsx b/servers/nextjs/app/dashboard/components/PresentationCard.tsx index 467442a7..bb4c73a4 100644 --- a/servers/nextjs/app/dashboard/components/PresentationCard.tsx +++ b/servers/nextjs/app/dashboard/components/PresentationCard.tsx @@ -11,6 +11,7 @@ import { import { useRouter } from "next/navigation"; import { toast } from "@/hooks/use-toast"; import { PresentationGenerationApi } from "@/app/(presentation-generator)/services/api/presentation-generation"; +import { getStaticFileUrl } from "@/app/(presentation-generator)/utils/others"; export const PresentationCard = ({ id, @@ -85,7 +86,7 @@ export const PresentationCard = ({
{thumbnail ? ( {title} diff --git a/servers/nextjs/app/layout.tsx b/servers/nextjs/app/layout.tsx index 69c28381..d9fbcd08 100644 --- a/servers/nextjs/app/layout.tsx +++ b/servers/nextjs/app/layout.tsx @@ -94,6 +94,7 @@ export default function RootLayout({ }: Readonly<{ children: React.ReactNode; }>) { + return ( {children}; + return + {children} + ; } diff --git a/servers/nextjs/app/robots.ts b/servers/nextjs/app/robots.ts deleted file mode 100644 index 6fa03308..00000000 --- a/servers/nextjs/app/robots.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { MetadataRoute } from 'next' - -export default function robots(): MetadataRoute.Robots { - return { - rules: { - userAgent: '*', - allow: '/', - disallow: '/private/', - }, - sitemap: 'https://presenton.ai/sitemap.xml', - } -} \ No newline at end of file diff --git a/servers/nextjs/app/setting/SettingPage.tsx b/servers/nextjs/app/setting/SettingPage.tsx deleted file mode 100644 index 7029993f..00000000 --- a/servers/nextjs/app/setting/SettingPage.tsx +++ /dev/null @@ -1,192 +0,0 @@ -'use client'; -import React, { useState, useEffect } from "react"; -import Header from "../dashboard/components/Header"; -import Wrapper from "@/components/Wrapper"; -import { Settings, Key } from 'lucide-react'; -import { toast } from '@/hooks/use-toast'; - -interface UserConfig { - LLM?: string; - OPENAI_API_KEY?: string; - GOOGLE_API_KEY?: string; -} - -const PROVIDER_CONFIGS: Record = { - openai: { - title: "OpenAI API Key", - description: "Required for using OpenAI services", - placeholder: "Enter your OpenAI API key", - }, - google: { - title: "Google API Key", - description: "Required for using Google services", - placeholder: "Enter your Google API key", - }, -}; - -interface ProviderConfig { - title: string; - description: string; - placeholder: string; -} - -const SettingsPage = () => { - const [config, setConfig] = useState({}); - const [selectedProvider, setSelectedProvider] = useState("openai"); - const [isLoading, setIsLoading] = useState(true); - - useEffect(() => { - const loadConfig = async () => { - try { - // @ts-ignore - const config = await window.electron.getUserConfig(); - setConfig(config); - if (config.LLM) { - setSelectedProvider(config.LLM); - } - } catch (error) { - console.error("Error loading config:", error); - toast({ - title: 'Error', - description: 'Failed to load configuration', - }); - } finally { - setIsLoading(false); - } - }; - - loadConfig(); - }, []); - - const handleSaveConfig = async (provider: string, apiKey: string) => { - if (apiKey === '') { - toast({ - title: 'Error', - description: 'API key cannot be empty', - }); - return; - } - - try { - const newConfig = { - LLM: provider, - OPENAI_API_KEY: provider === 'openai' ? apiKey : config.OPENAI_API_KEY, - GOOGLE_API_KEY: provider === 'google' ? apiKey : config.GOOGLE_API_KEY - }; - - // @ts-ignore - await window.electron.setUserConfig(newConfig); - setConfig(newConfig); - - toast({ - title: 'Success', - description: 'Configuration saved successfully', - }); - } catch (error) { - console.error('Error:', error); - toast({ - title: 'Error', - description: 'Failed to save configuration', - }); - } - }; - - if (isLoading) { - return ( -
-
- -
-
Loading configuration...
-
-
-
- ); - } - - return ( -
-
- -
- {/* Settings Header */} -
- -

Settings

-
- - {/* API Configuration Section */} -
-
- -

API Configuration

-
- - {/* Provider Selection */} -
- -
- {Object.keys(PROVIDER_CONFIGS).map((provider) => ( - - ))} -
-
- - {/* API Key Input */} -
-
- -
- setConfig(prev => ({ - ...prev, - [selectedProvider === 'openai' ? 'OPENAI_API_KEY' : 'GOOGLE_API_KEY']: e.target.value - }))} - className="flex-1 px-4 py-2.5 border border-gray-300 outline-none rounded-lg focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition-colors" - placeholder={PROVIDER_CONFIGS[selectedProvider].placeholder} - /> - -
-

{PROVIDER_CONFIGS[selectedProvider].description}

-
-
-
-
-
-
- ); -}; - -export default SettingsPage; diff --git a/servers/nextjs/app/settings/SettingPage.tsx b/servers/nextjs/app/settings/SettingPage.tsx new file mode 100644 index 00000000..af8ad73d --- /dev/null +++ b/servers/nextjs/app/settings/SettingPage.tsx @@ -0,0 +1,397 @@ +'use client'; +import React, { useState, useEffect } from "react"; +import Header from "../dashboard/components/Header"; +import Wrapper from "@/components/Wrapper"; +import { Settings, Key, Loader2 } from 'lucide-react'; +import { toast } from '@/hooks/use-toast'; +import { RootState } from "@/store/store"; +import { useSelector } from "react-redux"; +import { handleSaveLLMConfig } from "@/utils/storeHelpers"; +import { useRouter } from "next/navigation"; +import { Select, SelectContent, SelectItem, SelectTrigger } from "@/components/ui/select"; + +const PROVIDER_CONFIGS: Record = { + openai: { + title: "OpenAI API Key", + description: "Required for using OpenAI services", + placeholder: "Enter your OpenAI API key", + }, + google: { + title: "Google API Key", + description: "Required for using Google services", + placeholder: "Enter your Google API key", + }, + ollama: { + title: "Ollama API Key", + description: "Required for using Ollama services", + placeholder: "Choose a model", + } +}; + +interface ProviderConfig { + title: string; + description: string; + placeholder: string; +} + +const SettingsPage = () => { + const router = useRouter(); + + const userConfigState = useSelector((state: RootState) => state.userConfig); + const [llmConfig, setLlmConfig] = useState(userConfigState.llm_config); + const canChangeKeys = userConfigState.can_change_keys; + const [ollamaModels, setOllamaModels] = useState<{ + label: string; + value: string; + description: string; + size: string; + icon: string; + }[]>([]); + const [downloadingModel, setDownloadingModel] = useState({ + name: '', + size: null, + downloaded: null, + status: '', + done: false, + }); + const [isLoading, setIsLoading] = useState(false); + + const api_key_changed = (apiKey: string) => { + if (llmConfig.LLM === 'openai') { + setLlmConfig({ ...llmConfig, OPENAI_API_KEY: apiKey }); + } else if (llmConfig.LLM === 'google') { + setLlmConfig({ ...llmConfig, GOOGLE_API_KEY: apiKey }); + } else if (llmConfig.LLM === 'ollama') { + setLlmConfig({ ...llmConfig, PEXELS_API_KEY: apiKey }); + } + } + + const handleSaveConfig = async () => { + if (llmConfig.LLM === 'ollama') { + try { + setIsLoading(true); + await pullOllamaModels(); + toast({ + title: 'Success', + description: 'Model downloaded successfully', + }); + } catch (error) { + console.error('Error pulling model:', error); + toast({ + title: 'Error', + description: 'Failed to download model. Please try again.', + variant: 'destructive', + }); + setIsLoading(false); + return; + } + } + try { + await handleSaveLLMConfig(llmConfig); + toast({ + title: 'Success', + description: 'Configuration saved successfully', + }); + setIsLoading(false); + router.back(); + } catch (error) { + console.error('Error:', error); + toast({ + title: 'Error', + description: 'Failed to save configuration', + variant: 'destructive', + }); + setIsLoading(false); + } + }; + + const changeProvider = (provider: string) => { + setLlmConfig({ ...llmConfig, LLM: provider }); + if (provider === 'ollama') { + fetchOllamaModels(); + } + } + + const pullOllamaModels = async (): Promise => { + return new Promise((resolve, reject) => { + const interval = setInterval(async () => { + try { + const response = await fetch(`/api/v1/ppt/ollama/pull-model?name=${llmConfig.OLLAMA_MODEL}`); + if (response.status === 200) { + + const data = await response.json(); + + if (data.done) { + clearInterval(interval); + setDownloadingModel(data); + resolve(); + } else { + setDownloadingModel(data); + } + } else { + clearInterval(interval); + reject(new Error('Model pulling failed')); + } + } catch (error) { + + console.log('Error fetching ollama models:', error); + clearInterval(interval); + reject(error); + } + }, 1000); + + }); + } + + const fetchOllamaModels = async () => { + try { + const response = await fetch('/api/v1/ppt/ollama/list-supported-models'); + const data = await response.json(); + setOllamaModels(data.models); + } catch (error) { + console.error('Error fetching ollama models:', error); + } + } + + useEffect(() => { + + if (!canChangeKeys) { + router.push("/dashboard"); + } + if (userConfigState.llm_config.LLM === 'ollama') { + fetchOllamaModels(); + } + }, [userConfigState.llm_config.LLM]); + + if (!canChangeKeys) { + return null; + } + + return ( +
+
+ +
+ {/* Settings Header */} +
+ +

Settings

+
+ + {/* API Configuration Section */} +
+
+ +

API Configuration

+
+ + {/* Provider Selection */} +
+ +
+ {Object.keys(PROVIDER_CONFIGS).map((provider) => ( + + ))} +
+
+ + {/* API Key Input */} + {llmConfig.LLM !== 'ollama' && ( +
+
+ +
+ api_key_changed(e.target.value)} + className="flex-1 px-4 py-2.5 border border-gray-300 outline-none rounded-lg focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition-colors" + placeholder={PROVIDER_CONFIGS[llmConfig.LLM!].placeholder} + /> + +
+

{PROVIDER_CONFIGS[llmConfig.LLM!].description}

+
+
+ )} + + {/* Ollama Configuration */} + {llmConfig.LLM === 'ollama' && ( +
+
+ +
+ {ollamaModels.length > 0 ? ( + + ) : ( +
+
+
+
+
+
+
+
+
+ )} +
+ {ollamaModels.length === 0 && ( +

+ Loading available models... +

+ )} +
+
+ +
+ api_key_changed(e.target.value)} + /> + +
+

Required for using Ollama services with image generation

+
+ {downloadingModel.status && downloadingModel.status !== 'pulled' && ( +
+ {downloadingModel.status} +
+ )} +
+ )} +
+
+
+
+ ); +}; + +export default SettingsPage; diff --git a/servers/nextjs/app/setting/loading.tsx b/servers/nextjs/app/settings/loading.tsx similarity index 100% rename from servers/nextjs/app/setting/loading.tsx rename to servers/nextjs/app/settings/loading.tsx diff --git a/servers/nextjs/app/setting/page.tsx b/servers/nextjs/app/settings/page.tsx similarity index 100% rename from servers/nextjs/app/setting/page.tsx rename to servers/nextjs/app/settings/page.tsx diff --git a/servers/nextjs/app/sitemap.ts b/servers/nextjs/app/sitemap.ts deleted file mode 100644 index b3743ce7..00000000 --- a/servers/nextjs/app/sitemap.ts +++ /dev/null @@ -1,74 +0,0 @@ -import type { MetadataRoute } from 'next' - -const baseUrl = 'https://presenton.ai' - -export default function sitemap(): MetadataRoute.Sitemap { - return [ - { - url: baseUrl, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 1, - }, - { - url: `${baseUrl}/upload`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.9, - }, - { - url: `${baseUrl}/dashboard`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.8, - }, - { - url: `${baseUrl}/blogs`, - lastModified: new Date(), - changeFrequency: 'weekly', - priority: 0.7, - }, - { - url: `${baseUrl}/#faq`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.7, - }, - { - url: `${baseUrl}/#pricing`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.7, - }, - { - url: `${baseUrl}/auth/login`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.7, - }, - { - url: `${baseUrl}/auth/signup`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.7, - }, - { - url: `${baseUrl}/contact`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.5, - }, - { - url: `${baseUrl}/privacy-policy`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.4, - }, - { - url: `${baseUrl}/terms-and-conditions`, - lastModified: new Date(), - changeFrequency: 'monthly', - priority: 0.4, - }, - ] -} diff --git a/servers/nextjs/app/storeInitializer.tsx b/servers/nextjs/app/storeInitializer.tsx new file mode 100644 index 00000000..279be8c8 --- /dev/null +++ b/servers/nextjs/app/storeInitializer.tsx @@ -0,0 +1,97 @@ +'use client'; + +import { useEffect, useState } from 'react'; +import { setCanChangeKeys, setLLMConfig } from '@/store/slices/userConfig'; +import { Loader2 } from 'lucide-react'; +import { hasValidLLMConfig } from '@/utils/storeHelpers'; +import { usePathname, useRouter } from 'next/navigation'; +import { useDispatch } from 'react-redux'; + +export function StoreInitializer({ children }: { children: React.ReactNode }) { + const dispatch = useDispatch(); + + const [isLoading, setIsLoading] = useState(true); + const router = useRouter(); + const route = usePathname(); + + // Fetch user config state + useEffect(() => { + fetchUserConfigState(); + }, []); + + const setLoadingToFalseAfterNavigatingTo = (pathname: string) => { + const interval = setInterval(() => { + if (window.location.pathname === pathname) { + clearInterval(interval); + setIsLoading(false); + } + }, 500); + } + + const fetchUserConfigState = async () => { + setIsLoading(true); + const response = await fetch('/api/can-change-keys'); + const canChangeKeys = (await response.json()).canChange; + dispatch(setCanChangeKeys(canChangeKeys)); + + if (canChangeKeys) { + const response = await fetch('/api/user-config'); + const llmConfig = await response.json(); + if (!llmConfig.LLM) { + llmConfig.LLM = 'openai'; + } + dispatch(setLLMConfig(llmConfig)); + const isValid = hasValidLLMConfig(llmConfig); + if (isValid) { + // Check if the selected Ollama model is pulled + if (llmConfig.LLM === 'ollama') { + const isPulled = await checkIfSelectedOllamaModelIsPulled(llmConfig.OLLAMA_MODEL); + if (!isPulled) { + router.push('/'); + setLoadingToFalseAfterNavigatingTo('/'); + return; + } + } + if (route === '/') { + router.push('/upload'); + setLoadingToFalseAfterNavigatingTo('/upload'); + } else { + setIsLoading(false); + } + } else if (route !== '/') { + router.push('/'); + setLoadingToFalseAfterNavigatingTo('/'); + } else { + setIsLoading(false); + } + } else { + if (route === '/') { + router.push('/upload'); + setLoadingToFalseAfterNavigatingTo('/upload'); + } else { + setIsLoading(false); + } + } + } + + const checkIfSelectedOllamaModelIsPulled = async (ollamaModel: string) => { + const response = await fetch('/api/v1/ppt/ollama/list-pulled-models'); + const data = await response.json(); + const pulledModels = data.map((model: any) => model.name); + return pulledModels.includes(ollamaModel); + } + + + if (isLoading) { + return ( +
+
+ +

Loading configuration...

+
+
+ ); + } + + return children; +} diff --git a/servers/nextjs/components/BackBtn.tsx b/servers/nextjs/components/BackBtn.tsx index f9726dc3..b5f05464 100644 --- a/servers/nextjs/components/BackBtn.tsx +++ b/servers/nextjs/components/BackBtn.tsx @@ -6,8 +6,8 @@ import { useRouter } from 'next/navigation'; const BackBtn = () => { const router = useRouter(); return ( - ) } diff --git a/servers/nextjs/components/Home.tsx b/servers/nextjs/components/Home.tsx index 78a25be0..e246c772 100644 --- a/servers/nextjs/components/Home.tsx +++ b/servers/nextjs/components/Home.tsx @@ -10,11 +10,17 @@ import { AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; +import { useSelector } from "react-redux"; +import { RootState } from "@/store/store"; +import { handleSaveLLMConfig } from "@/utils/storeHelpers"; +import { Select, SelectContent, SelectItem, SelectTrigger } from "./ui/select"; interface ModelOption { value: string; label: string; description?: string; + icon?: string; + size: string; } interface ProviderConfig { @@ -35,6 +41,8 @@ const PROVIDER_CONFIGS: Record = { value: "gpt-4", label: "GPT-4", description: "Most capable model, best for complex tasks", + icon: "/icons/openai.png", + size: "8GB", }, ], imageModels: [ @@ -42,6 +50,8 @@ const PROVIDER_CONFIGS: Record = { value: "dall-e-3", label: "DALL-E 3", description: "Latest version with highest quality", + icon: "/icons/dall-e.png", + size: "8GB", }, ], apiGuide: { @@ -63,6 +73,8 @@ const PROVIDER_CONFIGS: Record = { value: "gemini-pro", label: "Gemini Pro", description: "Balanced model for most tasks", + icon: "/icons/google.png", + size: "8GB", }, ], imageModels: [ @@ -70,6 +82,8 @@ const PROVIDER_CONFIGS: Record = { value: "imagen", label: "Imagen", description: "Google's primary image generation model", + icon: "/icons/google.png", + size: "8GB", }, ], apiGuide: { @@ -85,108 +99,188 @@ const PROVIDER_CONFIGS: Record = { docsUrl: "https://aistudio.google.com/app/apikey", }, }, + ollama: { + textModels: [ + { + value: "llama3.1:8b", + label: "Llama3.1:8b", + description: "Balanced model for most tasks", + icon: "/icons/ollama.png", + size: "8GB", + }, + { + value: "llama3.1:70b", + label: "Llama3.1:70b", + description: "Large model for complex tasks", + icon: "/icons/ollama.png", + size: "70GB", + }, + { + value: "llama3.1:14b", + label: "Llama3.1:14b", + description: "Large model for complex tasks", + icon: "/icons/ollama.png", + size: "14GB", + }, + { + value: "llama3.1:11b", + label: "Llama3.1:11b", + description: "Large model for complex tasks", + icon: "/icons/ollama.png", + size: "11GB", + }, + ], + imageModels: [ + { + value: "pexels", + label: "Pexels", + description: "Pexels is a free stock photo and video platform that allows you to download high-quality images and videos for free.", + icon: "/icons/pexels.png", + size: "8GB", + }, + ], + apiGuide: { + title: "How to get your Pexels API Key", + steps: [ + "Visit pexels.com", + 'Click on "Get API key" in the top navigation', + "Copy your API key - you're ready to go!", + ], + videoUrl: "https://www.youtube.com/watch?v=o8iyrtQyrZM&t=66s", + docsUrl: "https://www.pexels.com/api/documentation/", + }, + }, }; -interface ConfigState { - provider: string; - apiKey: string; - textModel: string; - imageModel: string; -} - export default function Home() { const router = useRouter(); - const [isLoading, setIsLoading] = useState(true); - const [config, setConfig] = useState({ - provider: "openai", - apiKey: "", - textModel: PROVIDER_CONFIGS.openai.textModels[0].value, - imageModel: PROVIDER_CONFIGS.openai.imageModels[0].value, + const config = useSelector((state: RootState) => state.userConfig); + const [llmConfig, setLlmConfig] = useState(config.llm_config); + const [ollamaModels, setOllamaModels] = useState<{ + label: string; + value: string; + description: string; + size: string; + icon: string; + }[]>([]); + const [downloadingModel, setDownloadingModel] = useState({ + name: '', + size: null, + downloaded: null, + status: '', + done: false, }); + const [isLoading, setIsLoading] = useState(false); - useEffect(() => { - const checkExistingConfig = async () => { - try { - // @ts-ignore - const savedConfig = await window.electron.getUserConfig(); + const canChangeKeys = config.can_change_keys; - // If either API key exists, redirect to upload - if (savedConfig?.OPENAI_API_KEY || savedConfig?.GOOGLE_API_KEY) { - router.push('/upload'); - } else { - setIsLoading(false); - } - } catch (error) { - console.error("Error checking config:", error); - setIsLoading(false); - } - }; - - checkExistingConfig(); - }, [router]); - - if (isLoading) { - return ( -
-
- -

Loading configuration...

-
-
- ); + const api_key_changed = (newApiKey: string) => { + if (llmConfig.LLM === 'openai') { + setLlmConfig({ ...llmConfig, OPENAI_API_KEY: newApiKey }); + } else if (llmConfig.LLM === 'google') { + setLlmConfig({ ...llmConfig, GOOGLE_API_KEY: newApiKey }); + } else if (llmConfig.LLM === 'ollama') { + setLlmConfig({ ...llmConfig, PEXELS_API_KEY: newApiKey }); + } } - const handleProviderChange = (provider: string) => { - setConfig((prev) => ({ - ...prev, - provider, - textModel: PROVIDER_CONFIGS[provider].textModels[0].value, - imageModel: PROVIDER_CONFIGS[provider].imageModels[0].value, - })); - }; - - const handleConfigChange = ( - field: keyof ConfigState, - value: string | number - ) => { - setConfig((prev) => ({ - ...prev, - [field]: value, - })); - }; - - const currentProvider = PROVIDER_CONFIGS[config.provider]; const handleSaveConfig = async () => { - if (!config.apiKey) { - toast({ - title: "Error", - description: "Please enter an API key", - }); - return; + if (llmConfig.LLM === 'ollama') { + try { + setIsLoading(true); + await pullOllamaModels(); + toast({ + title: 'Success', + description: 'Model downloaded successfully', + }); + } catch (error) { + console.error('Error pulling model:', error); + toast({ + title: 'Error', + description: 'Failed to download model. Please try again.', + variant: 'destructive', + }); + setIsLoading(false); + return; + } } - try { - // @ts-ignore - await window.electron.setUserConfig({ - LLM: config.provider, - [config.provider === 'openai' ? 'OPENAI_API_KEY' : 'GOOGLE_API_KEY']: config.apiKey - }); - + await handleSaveLLMConfig(llmConfig); toast({ - title: "Configuration saved", - description: "You can now upload your presentation", + title: 'Success', + description: 'Configuration saved successfully', }); - + setIsLoading(false); router.push("/upload"); } catch (error) { - console.error('Error saving configuration:', error); + console.error('Error:', error); toast({ - title: "Error", - description: "Failed to save configuration", + title: 'Error', + description: 'Failed to save configuration', + variant: 'destructive', }); + setIsLoading(false); } }; + const changeProvider = (provider: string) => { + setLlmConfig({ ...llmConfig, LLM: provider }); + if (provider === 'ollama') { + fetchOllamaModels(); + } + } + + const pullOllamaModels = async (): Promise => { + return new Promise((resolve, reject) => { + const interval = setInterval(async () => { + try { + const response = await fetch(`/api/v1/ppt/ollama/pull-model?name=${llmConfig.OLLAMA_MODEL}`); + if (response.status === 200) { + const data = await response.json(); + + if (data.done) { + clearInterval(interval); + setDownloadingModel(data); + resolve(); + } else { + setDownloadingModel(data); + } + } else { + clearInterval(interval); + reject(new Error('Model pulling failed')); + } + } catch (error) { + console.log('Error fetching ollama models:', error); + clearInterval(interval); + reject(error); + } + }, 1000); + }); + } + + const fetchOllamaModels = async () => { + try { + const response = await fetch('/api/v1/ppt/ollama/list-supported-models'); + const data = await response.json(); + setOllamaModels(data.models); + } catch (error) { + console.error('Error fetching ollama models:', error); + } + } + + useEffect(() => { + if (!canChangeKeys) { + router.push("/upload"); + } + if (llmConfig.LLM === 'ollama') { + fetchOllamaModels(); + } + }, []); + + if (!canChangeKeys) { + return null; + } + return (
@@ -211,15 +305,15 @@ export default function Home() { {Object.keys(PROVIDER_CONFIGS).map((provider) => ( + + { + llmConfig.LLM === 'ollama' && downloadingModel.status && downloadingModel.status !== 'pulled' && ( +
+ {downloadingModel.status} +
+ ) + }
diff --git a/servers/nextjs/data/presenton-settings.db b/servers/nextjs/data/presenton-settings.db new file mode 100644 index 0000000000000000000000000000000000000000..39a091a560437e81a23f718a8112b8430543656d GIT binary patch literal 12288 zcmeI$Pj3=I6aesr8ml$5-bfEkw!@`OpzgAzY)MR{utXyLBW$CMX~=YUmTtN*xI1WT z(}QjNBHsKOUOe^#_z^stc=Qd+5>1-4@n-TS?6ULT{CWJ~GIUZzbd0gIRr{-75n@9A3Gs@j%nSGQW0nncx=Id$Al z*qLfuuWfa&-Q2FW57ZadL4J}OMJ#N(ae8OhR(JMWtt97CL2u4DA)|u1T{v6UVPm_w zZK-vuQQdFZYHh#Wws!2U40i15_Fl5wXb215b<()J)hFru+1gS{@dqwDjot=urti{` z;NyNb`Ji1rd6MV)2huYGS2}a3WDe)Q%RV*~Kmim$0Te(16hHwKKmim$fqxLVJg?7Y zmp?r+3~|i*EZ`0e3i2R%P6o8kNQF3~Nbo+%6Nd*pj7a6298u?_7xK}-g?!F6D5Yf> z5Cy)=wt6z=c~04x#%x~%a;cnd>h|C-jHH=Y#Pqsvqgz zbOU}G?_heS4Ehcq#G5v>jm=U+R(ecBQJa+ehUBJ++$=HrKsN!x+K=@;_}ri!|*s4Ec}x{;61(<@*xX_&&KT0F@N8JD5;2W#PVc3 zf=B+uDPW#}QuvTMzJO}AH8UR5?9(3bpA(mcCr~80xQG)S__86P$Gu(8gR{3B2f$jM z$R%K4T-i2@qRA? [ + { + source: "/static/:path*", + destination: "/api/static/:path*", + }, + ], }; export default nextConfig; diff --git a/servers/nextjs/package-lock.json b/servers/nextjs/package-lock.json index b934edd7..69f2180e 100644 --- a/servers/nextjs/package-lock.json +++ b/servers/nextjs/package-lock.json @@ -44,6 +44,7 @@ "lucide-react": "^0.447.0", "marked": "^15.0.11", "next": "^14.2.14", + "puppeteer": "^24.8.2", "react": "^18", "react-dom": "^18", "react-redux": "^9.1.2", @@ -76,6 +77,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/runtime": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", @@ -330,19 +352,17 @@ } }, "node_modules/@next/env": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.28.tgz", - "integrity": "sha512-PAmWhJfJQlP+kxZwCjrVd9QnR5x0R3u0mTXTiZDgSd4h5LdXmjxCCWbN9kq6hkZBOax8Rm3xDW5HagWyJuT37g==", - "license": "MIT" + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.29.tgz", + "integrity": "sha512-UzgLR2eBfhKIQt0aJ7PWH7XRPYw7SXz0Fpzdl5THjUnvxy4kfBk9OU4RNPNiETewEEtaBcExNFNn1QWH8wQTjg==" }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.28.tgz", - "integrity": "sha512-kzGChl9setxYWpk3H6fTZXXPFFjg7urptLq5o5ZgYezCrqlemKttwMT5iFyx/p1e/JeglTwDFRtb923gTJ3R1w==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.29.tgz", + "integrity": "sha512-wWtrAaxCVMejxPHFb1SK/PVV1WDIrXGs9ki0C/kUM8ubKHQm+3hU9MouUywCw8Wbhj3pewfHT2wjunLEr/TaLA==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -352,13 +372,12 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.28.tgz", - "integrity": "sha512-z6FXYHDJlFOzVEOiiJ/4NG8aLCeayZdcRSMjPDysW297Up6r22xw6Ea9AOwQqbNsth8JNgIK8EkWz2IDwaLQcw==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.29.tgz", + "integrity": "sha512-7Z/jk+6EVBj4pNLw/JQrvZVrAh9Bv8q81zCFSfvTMZ51WySyEHWVpwCEaJY910LyBftv2F37kuDPQm0w9CEXyg==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -368,13 +387,12 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.28.tgz", - "integrity": "sha512-9ARHLEQXhAilNJ7rgQX8xs9aH3yJSj888ssSjJLeldiZKR4D7N08MfMqljk77fAwZsWwsrp8ohHsMvurvv9liQ==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.29.tgz", + "integrity": "sha512-o6hrz5xRBwi+G7JFTHc+RUsXo2lVXEfwh4/qsuWBMQq6aut+0w98WEnoNwAwt7hkEqegzvazf81dNiwo7KjITw==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -384,13 +402,12 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.28.tgz", - "integrity": "sha512-p6gvatI1nX41KCizEe6JkF0FS/cEEF0u23vKDpl+WhPe/fCTBeGkEBh7iW2cUM0rvquPVwPWdiUR6Ebr/kQWxQ==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.29.tgz", + "integrity": "sha512-9i+JEHBOVgqxQ92HHRFlSW1EQXqa/89IVjtHgOqsShCcB/ZBjTtkWGi+SGCJaYyWkr/lzu51NTMCfKuBf7ULNw==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -400,13 +417,12 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.28.tgz", - "integrity": "sha512-nsiSnz2wO6GwMAX2o0iucONlVL7dNgKUqt/mDTATGO2NY59EO/ZKnKEr80BJFhuA5UC1KZOMblJHWZoqIJddpA==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.29.tgz", + "integrity": "sha512-B7JtMbkUwHijrGBOhgSQu2ncbCYq9E7PZ7MX58kxheiEOwdkM+jGx0cBb+rN5AeqF96JypEppK6i/bEL9T13lA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -416,13 +432,12 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.28.tgz", - "integrity": "sha512-+IuGQKoI3abrXFqx7GtlvNOpeExUH1mTIqCrh1LGFf8DnlUcTmOOCApEnPJUSLrSbzOdsF2ho2KhnQoO0I1RDw==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.29.tgz", + "integrity": "sha512-yCcZo1OrO3aQ38B5zctqKU1Z3klOohIxug6qdiKO3Q3qNye/1n6XIs01YJ+Uf+TdpZQ0fNrOQI2HrTLF3Zprnw==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -432,13 +447,12 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.28.tgz", - "integrity": "sha512-l61WZ3nevt4BAnGksUVFKy2uJP5DPz2E0Ma/Oklvo3sGj9sw3q7vBWONFRgz+ICiHpW5mV+mBrkB3XEubMrKaA==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.29.tgz", + "integrity": "sha512-WnrfeOEtTVidI9Z6jDLy+gxrpDcEJtZva54LYC0bSKQqmyuHzl0ego+v0F/v2aXq0am67BRqo/ybmmt45Tzo4A==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -448,13 +462,12 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.28.tgz", - "integrity": "sha512-+Kcp1T3jHZnJ9v9VTJ/yf1t/xmtFAc/Sge4v7mVc1z+NYfYzisi8kJ9AsY8itbgq+WgEwMtOpiLLJsUy2qnXZw==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.29.tgz", + "integrity": "sha512-vkcriFROT4wsTdSeIzbxaZjTNTFKjSYmLd8q/GVH3Dn8JmYjUKOuKXHK8n+lovW/kdcpIvydO5GtN+It2CvKWA==", "cpu": [ "ia32" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -464,13 +477,12 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.28.tgz", - "integrity": "sha512-1gCmpvyhz7DkB1srRItJTnmR2UwQPAUXXIg9r0/56g3O8etGmwlX68skKXJOp9EejW3hhv7nSQUJ2raFiz4MoA==", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.29.tgz", + "integrity": "sha512-iPPwUEKnVs7pwR0EBLJlwxLD7TTHWS/AoVZx1l9ZQzfQciqaFEr5AlYzA2uB6Fyby1IF18t4PL0nTpB+k4Tzlw==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -534,6 +546,26 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@puppeteer/browsers": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.4.tgz", + "integrity": "sha512-9DxbZx+XGMNdjBynIs4BRSz+M3iRDeB7qRcAr6UORFLphCIM2x3DXgOucvADiifcqCE4XePFUKcnaAMyGbrDlQ==", + "dependencies": { + "debug": "^4.4.0", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.1", + "tar-fs": "^3.0.8", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@radix-ui/number": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", @@ -2133,6 +2165,11 @@ "url": "https://github.com/sponsors/ueberdosis" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, "node_modules/@types/animejs": { "version": "3.1.13", "resolved": "https://registry.npmjs.org/@types/animejs/-/animejs-3.1.13.tgz", @@ -2229,7 +2266,7 @@ "version": "20.17.44", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.44.tgz", "integrity": "sha512-50sE4Ibb4BgUMxHrcJQSAU0Fu7fLcTdwcXwRzEF7wnVMWvImFLg2Rxc7SW0vpvaJm4wvhoWEZaQiPpBpocZiUA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~6.19.2" @@ -2297,13 +2334,20 @@ "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "engines": { + "node": ">= 14" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -2471,6 +2515,17 @@ "node": ">=0.8" } }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -2522,12 +2577,84 @@ "dev": true, "license": "MIT" }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" + }, "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==", "license": "MIT" }, + "node_modules/bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "optional": true + }, + "node_modules/bare-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2549,6 +2676,14 @@ ], "license": "MIT" }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -2610,7 +2745,6 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, "license": "MIT", "engines": { "node": "*" @@ -2668,6 +2802,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -2767,6 +2909,18 @@ "node": ">= 6" } }, + "node_modules/chromium-bidi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-5.1.0.tgz", + "integrity": "sha512-9MSRhWRVoRPDG0TgzkHrshFSJJNZzfY5UFqUMuksg7zL1yoZIZ3jLB0YAgHclbiAxPI86pBnwDX1tbzoiV8aFw==", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/ci-info": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", @@ -2901,6 +3055,53 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "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==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==" + }, + "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==", + "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/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==", + "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/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -2992,6 +3193,31 @@ "dev": true, "license": "MIT" }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", @@ -3281,6 +3507,14 @@ "node": ">=0.10" } }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "engines": { + "node": ">= 14" + } + }, "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", @@ -3292,7 +3526,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -3312,6 +3545,19 @@ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", "license": "MIT" }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3328,6 +3574,11 @@ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, + "node_modules/devtools-protocol": { + "version": "0.0.1439962", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1439962.tgz", + "integrity": "sha512-jJF48UdryzKiWhJ1bLKr7BFWUQCEIT5uCNbDLqkQJBtkFxYzILJH44WN0PDKMIlGDN7Utb8vyUY85C3w4R/t2g==" + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -3399,7 +3650,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -3431,6 +3681,22 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -3480,6 +3746,14 @@ "node": ">= 0.4" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3492,6 +3766,54 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eventemitter2": { "version": "6.4.7", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", @@ -3560,7 +3882,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", @@ -3602,6 +3923,11 @@ "node": ">=6.0.0" } }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -3643,7 +3969,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "license": "MIT", "dependencies": { "pend": "~1.2.0" @@ -3768,6 +4093,14 @@ "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==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -3820,7 +4153,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "license": "MIT", "dependencies": { "pump": "^3.0.0" @@ -3832,6 +4164,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -3988,6 +4333,18 @@ "integrity": "sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==", "license": "MIT" }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/http-signature": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", @@ -4003,6 +4360,18 @@ "node": ">=0.10" } }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -4044,6 +4413,21 @@ "url": "https://opencollective.com/immer" } }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -4063,6 +4447,23 @@ "node": ">=12" } }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4235,6 +4636,27 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -4688,11 +5110,15 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "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==", - "dev": true, "license": "MIT" }, "node_modules/mz": { @@ -4724,13 +5150,20 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/next": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.28.tgz", - "integrity": "sha512-QLEIP/kYXynIxtcKB6vNjtWLVs3Y4Sb+EClTC/CSVzdLD1gIuItccpu/n1lhmduffI32iPGEK2cLLxxt28qgYA==", - "license": "MIT", + "version": "14.2.29", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.29.tgz", + "integrity": "sha512-s98mCOMOWLGGpGOfgKSnleXLuegvvH415qtRZXpSp00HeEgdmrxmwL9cgKU+h4XrhB16zEI5d/7BnkS3ATInsA==", "dependencies": { - "@next/env": "14.2.28", + "@next/env": "14.2.29", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -4745,15 +5178,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.28", - "@next/swc-darwin-x64": "14.2.28", - "@next/swc-linux-arm64-gnu": "14.2.28", - "@next/swc-linux-arm64-musl": "14.2.28", - "@next/swc-linux-x64-gnu": "14.2.28", - "@next/swc-linux-x64-musl": "14.2.28", - "@next/swc-win32-arm64-msvc": "14.2.28", - "@next/swc-win32-ia32-msvc": "14.2.28", - "@next/swc-win32-x64-msvc": "14.2.28" + "@next/swc-darwin-arm64": "14.2.29", + "@next/swc-darwin-x64": "14.2.29", + "@next/swc-linux-arm64-gnu": "14.2.29", + "@next/swc-linux-arm64-musl": "14.2.29", + "@next/swc-linux-x64-gnu": "14.2.29", + "@next/swc-linux-x64-musl": "14.2.29", + "@next/swc-win32-arm64-msvc": "14.2.29", + "@next/swc-win32-ia32-msvc": "14.2.29", + "@next/swc-win32-x64-msvc": "14.2.29" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -4859,7 +5292,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -4910,6 +5342,64 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4945,7 +5435,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, "license": "MIT" }, "node_modules/performance-now": { @@ -5135,6 +5624,14 @@ "node": ">= 0.6.0" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -5347,11 +5844,41 @@ "prosemirror-transform": "^1.1.0" } }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -5367,6 +5894,42 @@ "node": ">=6" } }, + "node_modules/puppeteer": { + "version": "24.8.2", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.8.2.tgz", + "integrity": "sha512-Sn6SBPwJ6ASFvQ7knQkR+yG7pcmr4LfXzmoVp3NR0xXyBbPhJa8a8ybtb6fnw1g/DD/2t34//yirubVczko37w==", + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "2.10.4", + "chromium-bidi": "5.1.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1439962", + "puppeteer-core": "24.8.2", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "24.8.2", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.8.2.tgz", + "integrity": "sha512-wNw5cRZOHiFibWc0vdYCYO92QuKTbJ8frXiUfOq/UGJWMqhPoBThTKkV+dJ99YyWfzJ2CfQQ4T1nhhR0h8FlVw==", + "dependencies": { + "@puppeteer/browsers": "2.10.4", + "chromium-bidi": "5.1.0", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1439962", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -5635,6 +6198,14 @@ "throttleit": "^1.0.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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/reselect": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", @@ -5661,6 +6232,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -5779,7 +6358,6 @@ "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -5912,6 +6490,50 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5921,6 +6543,11 @@ "node": ">=0.10.0" } }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, "node_modules/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -5962,6 +6589,18 @@ "node": ">=10.0.0" } }, + "node_modules/streamx": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "dependencies": { + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -6254,6 +6893,37 @@ "node": ">=4" } }, + "node_modules/tar-fs": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", + "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -6444,11 +7114,16 @@ "dev": true, "license": "Unlicense" }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==" + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -6468,7 +7143,7 @@ "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/universalify": { @@ -6705,9 +7380,36 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yaml": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", @@ -6720,16 +7422,66 @@ "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==", + "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==", + "engines": { + "node": ">=12" + } + }, + "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==" + }, + "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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/zod": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/servers/nextjs/package.json b/servers/nextjs/package.json index 412744f2..276d4876 100644 --- a/servers/nextjs/package.json +++ b/servers/nextjs/package.json @@ -34,6 +34,7 @@ "@radix-ui/react-toggle": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.6", "@reduxjs/toolkit": "^2.2.8", + "@tailwindcss/typography": "^0.5.16", "@tiptap/extension-underline": "^2.0.0", "@tiptap/react": "^2.11.5", "@tiptap/starter-kit": "^2.11.5", @@ -46,18 +47,15 @@ "lucide-react": "^0.447.0", "marked": "^15.0.11", "next": "^14.2.14", - + "puppeteer": "^24.8.2", "react": "^18", "react-dom": "^18", "react-redux": "^9.1.2", "recharts": "^2.15.0", - "tailwind-merge": "^2.5.3", "tailwind-scrollbar-hide": "^2.0.0", "tailwindcss-animate": "^1.0.7", - "tiptap-markdown": "^0.8.10", - "@tailwindcss/typography": "^0.5.16" - + "tiptap-markdown": "^0.8.10" }, "devDependencies": { "@types/animejs": "^3.1.12", diff --git a/servers/nextjs/store/slices/presentationGeneration.ts b/servers/nextjs/store/slices/presentationGeneration.ts index c614ff9c..33a6bde6 100644 --- a/servers/nextjs/store/slices/presentationGeneration.ts +++ b/servers/nextjs/store/slices/presentationGeneration.ts @@ -17,6 +17,11 @@ export interface ChartSettings { dataLabel: DataLabel; } +export interface SlideOutline { + title: string; + body: string; +} + export interface Chart { id: string; name: string; @@ -56,7 +61,7 @@ interface PresentationGenerationState { images: string[]; isLoading: boolean; isStreaming: boolean | null; - titles: string[]; + outlines: SlideOutline[]; error: string | null; presentationData: PresentationData | null; } @@ -65,7 +70,7 @@ const initialState: PresentationGenerationState = { presentation_id: null, documents: [], images: [], - titles: [], + outlines: [], isLoading: false, isStreaming: null, error: null, @@ -107,18 +112,18 @@ const presentationGenerationSlice = createSlice({ setImgs: (state, action: PayloadAction) => { state.images = action.payload; }, - // Set title with charts - setTitles: (state, action: PayloadAction) => { - state.titles = action.payload; + // Set outlines + setOutlines: (state, action: PayloadAction) => { + state.outlines = action.payload; }, // Set presentation data setPresentationData: (state, action: PayloadAction) => { state.presentationData = action.payload; }, - deleteTitle: (state, action: PayloadAction<{ index: number }>) => { - if (state.titles) { + deleteSlideOutline: (state, action: PayloadAction<{ index: number }>) => { + if (state.outlines) { // Remove the slide at the given index - state.titles = state.titles.filter( + state.outlines = state.outlines.filter( (_, idx) => idx !== action.payload.index ); } @@ -428,9 +433,9 @@ export const { setDocs, setImgs, - deleteTitle, + deleteSlideOutline, setPresentationData, - setTitles, + setOutlines, // slides operations addSlide, updateSlide, diff --git a/servers/nextjs/store/slices/userConfig.ts b/servers/nextjs/store/slices/userConfig.ts new file mode 100644 index 00000000..b0aef62c --- /dev/null +++ b/servers/nextjs/store/slices/userConfig.ts @@ -0,0 +1,27 @@ +import { createSlice, PayloadAction } from "@reduxjs/toolkit"; + +interface UserConfigState { + can_change_keys: boolean + llm_config: LLMConfig +} + +const initialState: UserConfigState = { + llm_config: {}, + can_change_keys: false, +} + +const userConfigSlice = createSlice({ + name: "userConfig", + initialState: initialState, + reducers: { + setLLMConfig: (state, action: PayloadAction) => { + state.llm_config = action.payload; + }, + setCanChangeKeys: (state, action: PayloadAction) => { + state.can_change_keys = action.payload; + } + }, +}); + +export const { setLLMConfig, setCanChangeKeys } = userConfigSlice.actions; +export default userConfigSlice.reducer; \ No newline at end of file diff --git a/servers/nextjs/store/store.ts b/servers/nextjs/store/store.ts index d856dca7..8a104c3d 100644 --- a/servers/nextjs/store/store.ts +++ b/servers/nextjs/store/store.ts @@ -2,12 +2,14 @@ import { configureStore } from "@reduxjs/toolkit"; import presentationGenerationReducer from "./slices/presentationGeneration"; import themeReducer from "@/app/(presentation-generator)/store/themeSlice"; -import pptGenUploadSlice from "./slices/presentationGenUpload"; +import pptGenUploadReducer from "./slices/presentationGenUpload"; +import userConfigReducer from "./slices/userConfig"; export const store = configureStore({ reducer: { presentationGeneration: presentationGenerationReducer, theme: themeReducer, - pptGenUpload: pptGenUploadSlice, + pptGenUpload: pptGenUploadReducer, + userConfig: userConfigReducer, }, }); diff --git a/servers/nextjs/types/global.d.ts b/servers/nextjs/types/global.d.ts index aa71846a..1d52650a 100644 --- a/servers/nextjs/types/global.d.ts +++ b/servers/nextjs/types/global.d.ts @@ -11,4 +11,12 @@ interface TextFrameProps { content: string; position: { x: number; y: number }; // Add other properties as needed -} \ No newline at end of file +} + +interface LLMConfig { + LLM?: string; + OPENAI_API_KEY?: string; + GOOGLE_API_KEY?: string; + PEXELS_API_KEY?: string; + OLLAMA_MODEL?: string; +} \ No newline at end of file diff --git a/servers/nextjs/utils/constant.ts b/servers/nextjs/utils/constant.ts index 76807cbe..e69de29b 100644 --- a/servers/nextjs/utils/constant.ts +++ b/servers/nextjs/utils/constant.ts @@ -1,26 +0,0 @@ -// lib/env.client.ts -'use client'; - -export const getEnv = () => { - if (typeof window !== 'undefined') { - return { - // @ts-ignore - BASE_URL: window.env?.NEXT_PUBLIC_FAST_API || 'http://localhost:8000', - // @ts-ignore - USER_CONFIG_PATH: window.env?.NEXT_PUBLIC_USER_CONFIG_PATH || '', - // @ts-ignore - NEXT_PUBLIC_URL: window.env?.NEXT_PUBLIC_URL || '', - // @ts-ignore - TEMP_DIRECTORY: window.env?.TEMP_DIRECTORY || '', - }; - } - - return { - BASE_URL: 'http://localhost:8000', - USER_CONFIG_PATH: '', - - NEXT_PUBLIC_URL: '', - - TEMP_DIRECTORY: '', - }; -}; diff --git a/servers/nextjs/utils/helpers.ts b/servers/nextjs/utils/helpers.ts index d827d7d9..d103906b 100644 --- a/servers/nextjs/utils/helpers.ts +++ b/servers/nextjs/utils/helpers.ts @@ -1,21 +1,3 @@ - - - - -export const getURL = (path: string = '') => { - let url = process?.env?.NEXT_PUBLIC_SITE_URL ?? - process?.env?.NEXT_PUBLIC_VERCEL_URL ?? - 'http://localhost:3000/'; - url = url.includes('http') ? url : `https://${url}`; - url = url.charAt(url.length - 1) === '/' ? url : `${url}/`; - - // Remove leading slash from path if it exists - path = path.startsWith('/') ? path.slice(1) : path; - - return url + path; -}; - - export const toDateTime = (secs: number) => { var t = new Date('1970-01-01T00:30:00Z'); t.setSeconds(secs); diff --git a/servers/nextjs/utils/storeHelpers.ts b/servers/nextjs/utils/storeHelpers.ts new file mode 100644 index 00000000..ccd37a51 --- /dev/null +++ b/servers/nextjs/utils/storeHelpers.ts @@ -0,0 +1,30 @@ +import { setLLMConfig } from "@/store/slices/userConfig"; +import { store } from "@/store/store"; + +export const handleSaveLLMConfig = async (llmConfig: LLMConfig) => { + if (!hasValidLLMConfig(llmConfig)) { + throw new Error('API key cannot be empty'); + } + + await fetch('/api/user-config', { + method: 'POST', + body: JSON.stringify(llmConfig) + }); + + store.dispatch(setLLMConfig(llmConfig)); +} + +export const hasValidLLMConfig = (llmConfig: LLMConfig) => { + if (!llmConfig.LLM) return false; + const OPENAI_API_KEY = llmConfig.OPENAI_API_KEY; + const GOOGLE_API_KEY = llmConfig.GOOGLE_API_KEY; + const OLLAMA_MODEL = llmConfig.OLLAMA_MODEL; + const PEXELS_API_KEY = llmConfig.PEXELS_API_KEY; + return llmConfig.LLM === 'openai' ? + OPENAI_API_KEY !== '' && OPENAI_API_KEY !== null && OPENAI_API_KEY !== undefined : + llmConfig.LLM === 'google' ? + GOOGLE_API_KEY !== '' && GOOGLE_API_KEY !== null && GOOGLE_API_KEY !== undefined : + llmConfig.LLM === 'ollama' ? + PEXELS_API_KEY !== '' && PEXELS_API_KEY !== null && PEXELS_API_KEY !== undefined && OLLAMA_MODEL !== '' && OLLAMA_MODEL !== null && OLLAMA_MODEL !== undefined : + false; +} \ No newline at end of file diff --git a/start.js b/start.js new file mode 100644 index 00000000..728665dc --- /dev/null +++ b/start.js @@ -0,0 +1,90 @@ +const path = require('path'); +const { spawn } = require('child_process'); +const fs = require('fs'); + +const fastapiDir = path.join(__dirname, 'servers/fastapi'); +const nextjsDir = path.join(__dirname, 'servers/nextjs'); + +const isDev = process.env.NODE_ENV === 'development'; +const canChangeKeys = process.env.CAN_CHANGE_KEYS !== 'false'; + +const fastapiPort = 8000; +const nextjsPort = 3000; + +const userConfigPath = path.join(process.env.APP_DATA_DIRECTORY, 'userConfig.json'); +const userDataDir = path.dirname(userConfigPath); + +// Create user_data directory if it doesn't exist +if (!fs.existsSync(userDataDir)) { + fs.mkdirSync(userDataDir, { recursive: true }); +} + +process.env.USER_CONFIG_PATH = userConfigPath; + +//? UserConfig is only setup if API Keys can be changed +const setupUserConfigFromEnv = () => { + + let existingConfig = {}; + if (fs.existsSync(userConfigPath)) { + existingConfig = JSON.parse(fs.readFileSync(userConfigPath, 'utf8')); + } + + if (!['ollama', 'openai', 'google'].includes(existingConfig.LLM)) { + existingConfig.LLM = undefined; + } + + const userConfig = { + LLM: process.env.LLM || existingConfig.LLM, + OPENAI_API_KEY: process.env.OPENAI_API_KEY || existingConfig.OPENAI_API_KEY, + GOOGLE_API_KEY: process.env.GOOGLE_API_KEY || existingConfig.GOOGLE_API_KEY, + OLLAMA_MODEL: process.env.OLLAMA_MODEL || existingConfig.OLLAMA_MODEL, + PEXELS_API_KEY: process.env.PEXELS_API_KEY || existingConfig.PEXELS_API_KEY, + }; + + fs.writeFileSync(userConfigPath, JSON.stringify(userConfig)); +} + +const startServers = async () => { + + const fastApiProcess = spawn( + "python", + [isDev ? "server_autoreload.py" : "server.py", "--port", fastapiPort.toString()], + { + cwd: fastapiDir, + stdio: "inherit", + env: process.env, + } + ); + + fastApiProcess.on("error", err => { + console.error("FastAPI process failed to start:", err); + }); + + const nextjsProcess = spawn( + "npm", + ["run", isDev ? "dev" : "start", "--", "-p", nextjsPort.toString()], + { + cwd: nextjsDir, + stdio: "inherit", + env: process.env, + } + ); + + nextjsProcess.on("error", err => { + console.error("Next.js process failed to start:", err); + }); + + // Keep the Node process alive until both servers exit + const exitCode = await Promise.race([ + new Promise(resolve => fastApiProcess.on("exit", resolve)), + new Promise(resolve => nextjsProcess.on("exit", resolve)), + ]); + + console.log(`One of the processes exited. Exit code: ${exitCode}`); + process.exit(exitCode); +}; + +if (canChangeKeys) { + setupUserConfigFromEnv(); +} +startServers(); diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index b77b1d36..00000000 --- a/tsconfig.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "libReplacement": true, /* Enable lib replacement. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - "rootDir": "./app", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./app_dist", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ - // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - }, - "include": [ - "app/**/*" - ] -} \ No newline at end of file

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