From 983eafb0d58d06f34f896a1014458578457725a3 Mon Sep 17 00:00:00 2001 From: Zeng Lingyu <49749136+hotwa@users.noreply.github.com> Date: Tue, 12 May 2026 21:13:34 +0800 Subject: [PATCH 1/6] feat(deploy): add gpu pixi deployment setup Add reproducible Pixi environments for macOS ARM and Linux x86, document the setup across README variants, and add remote GPU docker-compose deployment files for FlashHead on host GPU 1.\n\nAdd a POST /sessions/{id}/close compatibility route and switch the frontend close call to it so remote deployments can avoid networks that block HTTP DELETE.\n\nVerification:\n- pixi run go-test\n- npm run --prefix frontend build\n- remote health + session create/close over http://122.205.95.186:8080 --- .dockerignore | 27 + README.ja.md | 31 + README.ko.md | 31 + README.md | 31 + README.zh-CN.md | 31 + deploy/gpu/.env.example | 16 + deploy/gpu/Dockerfile.inference | 52 + deploy/gpu/Dockerfile.server | 54 + deploy/gpu/README.zh-CN.md | 113 + deploy/gpu/cyberverse_config.gpu.yaml | 135 + deploy/gpu/docker-compose.yml | 82 + deploy/gpu/download_flashhead_weights.sh | 17 + ...-05-11-langgraph-agent-development-plan.md | 295 + frontend/src/services/api.ts | 2 +- pixi.lock | 5301 +++++++++++++++++ pixi.toml | 65 + server/internal/api/handlers.go | 9 +- server/internal/api/handlers_test.go | 19 + server/internal/api/router.go | 1 + 19 files changed, 6310 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 deploy/gpu/.env.example create mode 100644 deploy/gpu/Dockerfile.inference create mode 100644 deploy/gpu/Dockerfile.server create mode 100644 deploy/gpu/README.zh-CN.md create mode 100644 deploy/gpu/cyberverse_config.gpu.yaml create mode 100644 deploy/gpu/docker-compose.yml create mode 100755 deploy/gpu/download_flashhead_weights.sh create mode 100644 docs/zh-CN/features/2026-05-11-langgraph-agent-development-plan.md create mode 100644 pixi.lock create mode 100644 pixi.toml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..57f4a13 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,27 @@ +.git +.gitignore +.DS_Store +.env +.venv +.pixi +__pycache__ +*.py[cod] +.pytest_cache +.mypy_cache +.ruff_cache + +node_modules +frontend/node_modules +frontend/dist +dist +build + +checkpoints +.hf-cache +data +recordings +tmp +logs + +models/SoulX-LiveAct +models/**/checkpoints diff --git a/README.ja.md b/README.ja.md index 905d26f..a89e1c9 100644 --- a/README.ja.md +++ b/README.ja.md @@ -111,6 +111,37 @@ git clone https://github.com/dsd2077/CyberVerse.git cd CyberVerse ``` +### 任意: Pixi で再現可能な開発環境を作成する + +CyberVerse には、Python / Go / フロントエンドの開発チェックを再現するための Pixi 環境が 2 つ用意されています。 + +- `macos-arm`: Apple Silicon Mac(`osx-arm64`) +- `linux-x86`: x86_64 Linux(`linux-64`) + +Pixi が未インストールの場合は、先に実行します。 + +```bash +curl -fsSL https://pixi.sh/install.sh | sh +``` + +Apple Silicon Mac: + +```bash +pixi install -e macos-arm +pixi run -e macos-arm python-test +pixi run -e macos-arm go-test +``` + +x86_64 Linux: + +```bash +pixi install -e linux-x86 +pixi run -e linux-x86 python-test +pixi run -e linux-x86 go-test +``` + +Pixi 環境には、Python 3.10、Go 1.25、Node 22、FFmpeg、`soxr`、`libopus`、`opusfile` などの開発・テスト依存関係が含まれます。GPU アバター推論には、引き続き下記の CUDA / PyTorch とモデル重みの設定が必要です。 + ### ステップ 2: Python 環境を作成する ```bash diff --git a/README.ko.md b/README.ko.md index 803b7bb..c2a9b5d 100644 --- a/README.ko.md +++ b/README.ko.md @@ -111,6 +111,37 @@ git clone https://github.com/dsd2077/CyberVerse.git cd CyberVerse ``` +### 선택 사항: Pixi로 재현 가능한 개발 환경 만들기 + +CyberVerse는 Python / Go / 프런트엔드 개발 검사를 재현하기 위한 두 가지 Pixi 환경을 제공합니다. + +- `macos-arm`: Apple Silicon Mac(`osx-arm64`) +- `linux-x86`: x86_64 Linux(`linux-64`) + +Pixi가 없다면 먼저 설치합니다. + +```bash +curl -fsSL https://pixi.sh/install.sh | sh +``` + +Apple Silicon Mac: + +```bash +pixi install -e macos-arm +pixi run -e macos-arm python-test +pixi run -e macos-arm go-test +``` + +x86_64 Linux: + +```bash +pixi install -e linux-x86 +pixi run -e linux-x86 python-test +pixi run -e linux-x86 go-test +``` + +Pixi 환경에는 Python 3.10, Go 1.25, Node 22, FFmpeg, `soxr`, `libopus`, `opusfile` 등 개발 및 테스트 의존성이 포함됩니다. GPU 아바타 추론에는 아래 CUDA / PyTorch 및 모델 가중치 설정이 여전히 필요합니다. + ### 2단계: Python 환경 만들기 ```bash diff --git a/README.md b/README.md index 493df9a..fbb395f 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,37 @@ git clone https://github.com/dsd2077/CyberVerse.git cd CyberVerse ``` +### Optional: Pixi reproducible development environments + +CyberVerse provides two Pixi environments for reproducible Python / Go / frontend development checks: + +- `macos-arm`: macOS on Apple Silicon (`osx-arm64`) +- `linux-x86`: Linux on x86_64 (`linux-64`) + +Install Pixi if needed: + +```bash +curl -fsSL https://pixi.sh/install.sh | sh +``` + +On macOS Apple Silicon: + +```bash +pixi install -e macos-arm +pixi run -e macos-arm python-test +pixi run -e macos-arm go-test +``` + +On Linux x86_64: + +```bash +pixi install -e linux-x86 +pixi run -e linux-x86 python-test +pixi run -e linux-x86 go-test +``` + +The Pixi environments cover development and test dependencies such as Python 3.10, Go 1.25, Node 22, FFmpeg, `soxr`, `libopus`, and `opusfile`. GPU avatar inference still requires the CUDA / PyTorch and model-weight setup below. + ### Step 2: Create Python environment ```bash diff --git a/README.zh-CN.md b/README.zh-CN.md index d50afd6..ad704df 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -113,6 +113,37 @@ git clone https://github.com/dsd2077/CyberVerse.git cd CyberVerse ``` +### 可选:使用 Pixi 创建可复现开发环境 + +CyberVerse 提供两个 Pixi 环境,用于复现 Python / Go / 前端开发检查: + +- `macos-arm`:Apple Silicon Mac(`osx-arm64`) +- `linux-x86`:x86_64 Linux(`linux-64`) + +如未安装 Pixi,先执行: + +```bash +curl -fsSL https://pixi.sh/install.sh | sh +``` + +Apple Silicon Mac: + +```bash +pixi install -e macos-arm +pixi run -e macos-arm python-test +pixi run -e macos-arm go-test +``` + +x86_64 Linux: + +```bash +pixi install -e linux-x86 +pixi run -e linux-x86 python-test +pixi run -e linux-x86 go-test +``` + +Pixi 环境会安装 Python 3.10、Go 1.25、Node 22、FFmpeg、`soxr`、`libopus`、`opusfile` 等开发和测试依赖。GPU 数字人推理仍需按下方步骤配置 CUDA / PyTorch 与模型权重。 + ### 第 2 步:创建 Python 环境 ```bash diff --git a/deploy/gpu/.env.example b/deploy/gpu/.env.example new file mode 100644 index 0000000..9c335f9 --- /dev/null +++ b/deploy/gpu/.env.example @@ -0,0 +1,16 @@ +DASHSCOPE_API_KEY=your_dashscope_api_key +DASHSCOPE_BASE_URL=https://dashscope-intl.aliyuncs.com/compatible-mode/v1 + +# Direct WebRTC TURN relay secret. Change this before opening the service. +TURN_PASSWORD=replace_with_a_long_random_password + +# Optional internal token shared by Go Server and Agent Worker. +AGENT_INTERNAL_TOKEN= + +# Optional Hugging Face settings for weight download. +# HF_ENDPOINT=https://hf-mirror.com +# HF_TOKEN= + +# Reserved for the later long-term memory integration. +HINDSIGHT_BASE_URL= +HINDSIGHT_API_KEY= diff --git a/deploy/gpu/Dockerfile.inference b/deploy/gpu/Dockerfile.inference new file mode 100644 index 0000000..e048d75 --- /dev/null +++ b/deploy/gpu/Dockerfile.inference @@ -0,0 +1,52 @@ +FROM pytorch/pytorch:2.8.0-cuda12.8-cudnn9-devel + +ENV DEBIAN_FRONTEND=noninteractive \ + PIP_NO_CACHE_DIR=1 \ + PYTHONUNBUFFERED=1 \ + PYTHONPATH=/workspace:/workspace/inference/generated + +RUN set -eux; \ + echo 'Acquire::ForceIPv4 "true";' > /etc/apt/apt.conf.d/99force-ipv4; \ + rm -f /etc/apt/sources.list.d/cuda*.list /etc/apt/sources.list.d/nvidia*.list; \ + sed -i \ + -e 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' \ + -e 's|http://security.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' \ + /etc/apt/sources.list; \ + apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + curl \ + ffmpeg \ + git \ + libgl1 \ + libglib2.0-0 \ + libgomp1 \ + libsm6 \ + libxext6 \ + libxrender1 \ + pkg-config \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /workspace + +COPY pyproject.toml README.md ./ +COPY proto/ ./proto/ +COPY inference/ ./inference/ +COPY agent_runtime/ ./agent_runtime/ +COPY models/flash_head/ ./models/flash_head/ + +RUN python -m pip install --upgrade pip setuptools wheel \ + && python -m pip install -e ".[inference,agent,qwen,omni,tts,flash_head]" \ + && mkdir -p inference/generated \ + && python -m grpc_tools.protoc \ + -I proto/ \ + --python_out=inference/generated \ + --grpc_python_out=inference/generated \ + proto/*.proto + +HEALTHCHECK --interval=30s --timeout=5s --retries=20 --start-period=600s \ + CMD python -c "import grpc; ch = grpc.insecure_channel('127.0.0.1:50051'); grpc.channel_ready_future(ch).result(timeout=3)" || exit 1 + +EXPOSE 50051 8090 + +CMD ["python", "-m", "inference.server", "--config", "/workspace/deploy/gpu/cyberverse_config.gpu.yaml"] diff --git a/deploy/gpu/Dockerfile.server b/deploy/gpu/Dockerfile.server new file mode 100644 index 0000000..ad4d02c --- /dev/null +++ b/deploy/gpu/Dockerfile.server @@ -0,0 +1,54 @@ +FROM golang:1.25-bookworm AS builder + +ENV GOPROXY=https://goproxy.cn,direct \ + GOSUMDB=sum.golang.google.cn + +WORKDIR /build + +RUN set -eux; \ + echo 'Acquire::ForceIPv4 "true";' > /etc/apt/apt.conf.d/99force-ipv4; \ + sed -i \ + -e 's|http://deb.debian.org/debian|http://mirrors.aliyun.com/debian|g' \ + -e 's|http://deb.debian.org/debian-security|http://mirrors.aliyun.com/debian-security|g' \ + /etc/apt/sources.list.d/debian.sources; \ + apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + libopus-dev \ + libopusfile-dev \ + libsoxr-dev \ + pkg-config \ + && rm -rf /var/lib/apt/lists/* + +COPY server/go.mod server/go.sum ./ +RUN go mod download + +COPY server/ ./ +RUN CGO_ENABLED=1 go build -o cyberverse-server ./cmd/cyberverse-server + +FROM debian:bookworm-slim + +RUN set -eux; \ + echo 'Acquire::ForceIPv4 "true";' > /etc/apt/apt.conf.d/99force-ipv4; \ + sed -i \ + -e 's|http://deb.debian.org/debian|http://mirrors.aliyun.com/debian|g' \ + -e 's|http://deb.debian.org/debian-security|http://mirrors.aliyun.com/debian-security|g' \ + /etc/apt/sources.list.d/debian.sources; \ + apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + libopus0 \ + libopusfile0 \ + libsoxr0 \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY --from=builder /build/cyberverse-server ./cyberverse-server + +HEALTHCHECK --interval=10s --timeout=5s --retries=30 --start-period=30s \ + CMD curl -fsS http://127.0.0.1:8080/api/v1/health >/dev/null || exit 1 + +EXPOSE 8080 8443 + +CMD ["./cyberverse-server", "--config", "/app/cyberverse_config.yaml"] diff --git a/deploy/gpu/README.zh-CN.md b/deploy/gpu/README.zh-CN.md new file mode 100644 index 0000000..4ac0066 --- /dev/null +++ b/deploy/gpu/README.zh-CN.md @@ -0,0 +1,113 @@ +# CyberVerse 远程 GPU 部署说明 + +这个目录用于把数字人重模型部署到 Ubuntu 24.04 + RTX 5090 机器上。Mac 本地只运行前端或轻量开发服务,通过 HTTP/WebSocket/WebRTC 访问远程 API。 + +## 架构 + +```mermaid +flowchart LR + Mac["macOS Frontend / Browser"] -->|"HTTP / WebSocket / WebRTC"| API["Remote Go Server :8080"] + API -->|"gRPC"| INF["Python Inference :50051"] + API -->|"HTTP task callbacks"| AGENT["Embedded LangGraph Agent Worker :8090"] + INF --> AGENT + INF -->|"CUDA logical cuda:0"| GPU["Host RTX 5090 physical GPU 1"] + INF -->|"DashScope realtime/text/TTS/ASR"| QWEN["Qwen / DashScope APIs"] + AGENT -. "future memory" .-> HINDSIGHT["Hindsight API"] +``` + +## GPU 选择 + +`docker-compose.yml` 使用: + +```yaml +gpus: + - driver: nvidia + device_ids: ["1"] + capabilities: ["gpu"] +environment: + - NVIDIA_VISIBLE_DEVICES=1 +``` + +这会把宿主机物理 GPU 1 暴露给容器。容器内部通常会把这张卡重新编号成 `cuda:0`,所以 `cyberverse_config.gpu.yaml` 里写 `cuda_visible_devices: 0` 和 `device: "cuda:0"` 是正确的,不会占用宿主机物理 GPU 0。 + +## 首次启动 + +在远程机器上: + +```bash +cd ~/project/CyberVerse +cp deploy/gpu/.env.example .env +``` + +编辑 `.env`,至少填: + +```bash +DASHSCOPE_API_KEY=... +TURN_PASSWORD=... +``` + +下载 FlashHead 权重: + +```bash +docker compose -f deploy/gpu/docker-compose.yml --profile weights run --rm weights +``` + +如果 Hugging Face 访问慢,可以先设置: + +```bash +export HF_ENDPOINT=https://hf-mirror.com +``` + +启动服务: + +```bash +docker compose -f deploy/gpu/docker-compose.yml up --build +``` + +前台运行时按 `Ctrl+C` 会停止 compose 管理的服务。需要后台运行时使用: + +```bash +docker compose -f deploy/gpu/docker-compose.yml up -d --build +``` + +## Mac 访问远程服务 + +远程服务启动后,Mac 前端可指向: + +```bash +VITE_API_BASE=http://122.205.95.186:8080/api/v1 +VITE_WS_BASE=ws://122.205.95.186:8080 +``` + +远程机器需要开放 TCP `8080` 和 `8443`。`50051` 和 `8090` 只在 docker compose 内部网络使用,不需要对公网开放。 + +连通性检查: + +```bash +curl http://122.205.95.186:8080/api/v1/health +curl http://122.205.95.186:8080/api/v1/components +``` + +跨公网访问时,部分网络会拦截 HTTP `DELETE`。前端关闭会话默认使用兼容接口: + +```bash +POST http://122.205.95.186:8080/api/v1/sessions/{session_id}/close +``` + +原有 `DELETE /api/v1/sessions/{session_id}` 仍保留,适合内网或未拦截 DELETE 的环境。 + +## 权重来源 + +当前默认使用 FlashHead Lite 单卡配置,权重目录为: + +```text +checkpoints/SoulX-FlashHead-1_3B +checkpoints/wav2vec2-base-960h +``` + +来源: + +- `Soul-AILab/SoulX-FlashHead-1_3B` +- `facebook/wav2vec2-base-960h` + +如果要改成 Pro 模型,把 `deploy/gpu/cyberverse_config.gpu.yaml` 里的 `model_type: "lite"` 改成 `model_type: "pro"`。单张 5090 可以尝试 Pro,但实时性通常不如 Lite;FlashHead 官方说明 Pro 实时体验更偏向双 5090 + SageAttention。 diff --git a/deploy/gpu/cyberverse_config.gpu.yaml b/deploy/gpu/cyberverse_config.gpu.yaml new file mode 100644 index 0000000..7889414 --- /dev/null +++ b/deploy/gpu/cyberverse_config.gpu.yaml @@ -0,0 +1,135 @@ +server: + host: "0.0.0.0" + http_port: 8080 + grpc_port: 50051 + cors_origins: ["*"] + +livekit: + url: "ws://unused-livekit:7880" + api_key: "devkey" + api_secret: "secret" + +warmup: + enabled: true + distributed: + enabled: false + timeout_s: 30 + +inference: + avatar: + default: "flash_head" + runtime: + cuda_visible_devices: 0 + world_size: 1 + flash_head: + plugin_class: "inference.plugins.avatar.flash_head_plugin.FlashHeadAvatarPlugin" + models_dir: "/workspace/models" + checkpoint_dir: "/workspace/checkpoints/SoulX-FlashHead-1_3B" + wav2vec_dir: "/workspace/checkpoints/wav2vec2-base-960h" + model_type: "lite" + device: "cuda:0" + seed: 9999 + compile_model: true + compile_vae: true + dist_worker_main_thread: true + infer_params: + frame_num: 33 + motion_frames_latent_num: 2 + tgt_fps: 20 + sample_rate: 16000 + sample_shift: 5 + color_correction_strength: 1.0 + cached_audio_duration: 8 + num_heads: 12 + height: 512 + width: 512 + + omni: + default: "qwen_omni" + qwen_omni: + plugin_class: "inference.plugins.voice_llm.qwen_omni_realtime.QwenOmniRealtimePlugin" + api_key: "${DASHSCOPE_API_KEY}" + model: "qwen3.5-omni-flash-realtime" + voice: "Tina" + input_sample_rate: 16000 + output_sample_rate: 24000 + vad_type: "semantic_vad" + vad_threshold: 0.5 + vad_silence_duration_ms: 800 + + persona: + persona: + plugin_class: "inference.plugins.voice_llm.persona_agent.PersonaAgentPlugin" + model_provider: "qwen_omni" + checkpoint_db_path: "/workspace/data/tasks/langgraph_checkpoints.db" + + agent_worker: + enabled: true + host: "0.0.0.0" + port: 8090 + llm: + provider: "qwen" + + llm: + default: "qwen" + qwen: + plugin_class: "inference.plugins.llm.qwen_plugin.QwenLLMPlugin" + api_key: "${DASHSCOPE_API_KEY}" + model: "qwen3.6-plus" + temperature: 0.7 + extra_body: + enable_thinking: false + + tts: + default: "qwen" + qwen: + plugin_class: "inference.plugins.tts.qwen_tts_plugin.QwenTTSPlugin" + api_key: "${DASHSCOPE_API_KEY}" + model: "qwen3-tts-flash-realtime" + voice: "Momo" + sample_rate: 24000 + target_sample_rate: 16000 + + asr: + default: "qwen" + qwen: + plugin_class: "inference.plugins.asr.qwen_asr_plugin.QwenASRPlugin" + api_key: "${DASHSCOPE_API_KEY}" + model: "qwen3-asr-flash-realtime" + language: "auto" + sample_rate: 16000 + vad_threshold: 0.8 + vad_silence_duration_ms: 600 + +session: + max_concurrent: 1 + idle_timeout_s: 300 + max_duration_s: 3600 + +pipeline: + default_mode: "omni" + streaming_mode: "direct" + visual_input: + enabled: true + frame_interval_ms: 1000 + max_width: 1280 + max_height: 720 + jpeg_quality: 0.78 + max_frame_bytes: 524288 + ws_max_message_bytes: 1048576 + max_recent_frames: 2 + frame_ttl_ms: 10000 + turn_enabled: true + turn_port: 8443 + turn_realm: "cyberverse" + turn_username: "cyberverse" + turn_password: "${TURN_PASSWORD}" + ice_public_ip: "122.205.95.186" + +recording: + enabled: true + output_dir: "/app/data/recordings" + crf: 23 + +inference_grpc: + addr: "cyberverse-inference:50051" diff --git a/deploy/gpu/docker-compose.yml b/deploy/gpu/docker-compose.yml new file mode 100644 index 0000000..b840f8a --- /dev/null +++ b/deploy/gpu/docker-compose.yml @@ -0,0 +1,82 @@ +services: + weights: + image: python:3.11-slim + profiles: ["weights"] + working_dir: /workspace + volumes: + - ../../checkpoints:/workspace/checkpoints + environment: + - HF_ENDPOINT=${HF_ENDPOINT:-} + - HF_TOKEN=${HF_TOKEN:-} + command: + - /bin/sh + - -lc + - | + set -eu + python -m pip install --no-cache-dir -U "huggingface_hub[cli]" + hf download Soul-AILab/SoulX-FlashHead-1_3B --local-dir /workspace/checkpoints/SoulX-FlashHead-1_3B + hf download facebook/wav2vec2-base-960h --local-dir /workspace/checkpoints/wav2vec2-base-960h + + cyberverse-inference: + build: + context: ../.. + dockerfile: deploy/gpu/Dockerfile.inference + network: host + image: cyberverse-inference-rtx5090:cuda12.8 + container_name: cyberverse-inference-gpu1 + restart: unless-stopped + ipc: host + shm_size: "16gb" + gpus: + - driver: nvidia + device_ids: ["1"] + capabilities: ["gpu"] + env_file: + - path: ../../.env + required: false + environment: + - NVIDIA_VISIBLE_DEVICES=1 + - NVIDIA_DRIVER_CAPABILITIES=compute,utility,video + - CYBERVERSE_CONFIG_DIR=/workspace + - CYBERVERSE_SERVER_URL=http://cyberverse-server:8080/api/v1 + - AGENT_WORKER_HOST=0.0.0.0 + - AGENT_WORKER_PORT=8090 + - LANGGRAPH_CHECKPOINT_DB=/workspace/data/tasks/langgraph_checkpoints.db + - HF_HOME=/workspace/.hf-cache + - HF_HUB_ENABLE_HF_TRANSFER=0 + - PYTHONPATH=/workspace:/workspace/inference/generated + volumes: + - ./cyberverse_config.gpu.yaml:/workspace/deploy/gpu/cyberverse_config.gpu.yaml:ro + - ../../checkpoints:/workspace/checkpoints + - ../../data:/workspace/data + - ../../.hf-cache:/workspace/.hf-cache + expose: + - "50051" + - "8090" + ulimits: + memlock: -1 + stack: 67108864 + + cyberverse-server: + build: + context: ../.. + dockerfile: deploy/gpu/Dockerfile.server + network: host + image: cyberverse-server:gpu-remote + container_name: cyberverse-server-remote + restart: unless-stopped + env_file: + - path: ../../.env + required: false + environment: + - GRPC_INFERENCE_ADDR=cyberverse-inference:50051 + - AGENT_WORKER_URL=http://cyberverse-inference:8090 + volumes: + - ./cyberverse_config.gpu.yaml:/app/cyberverse_config.yaml:ro + - ../../data:/app/data + ports: + - "8080:8080" + - "8443:8443" + depends_on: + cyberverse-inference: + condition: service_healthy diff --git a/deploy/gpu/download_flashhead_weights.sh b/deploy/gpu/download_flashhead_weights.sh new file mode 100755 index 0000000..3d8aa5e --- /dev/null +++ b/deploy/gpu/download_flashhead_weights.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +CHECKPOINT_DIR="$PROJECT_ROOT/checkpoints" + +mkdir -p "$CHECKPOINT_DIR" + +python3 -m pip install --user -U "huggingface_hub[cli]" +export PATH="$HOME/.local/bin:$PATH" + +hf download Soul-AILab/SoulX-FlashHead-1_3B \ + --local-dir "$CHECKPOINT_DIR/SoulX-FlashHead-1_3B" + +hf download facebook/wav2vec2-base-960h \ + --local-dir "$CHECKPOINT_DIR/wav2vec2-base-960h" diff --git a/docs/zh-CN/features/2026-05-11-langgraph-agent-development-plan.md b/docs/zh-CN/features/2026-05-11-langgraph-agent-development-plan.md new file mode 100644 index 0000000..98d0472 --- /dev/null +++ b/docs/zh-CN/features/2026-05-11-langgraph-agent-development-plan.md @@ -0,0 +1,295 @@ +# LangGraph Agent Development Plan + +> **For agentic workers:** REQUIRED: Use `superpowers:subagent-driven-development` if subagents are available, or `superpowers:executing-plans` to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 在现有 `features` 分支的 PersonaAgent 和 Agent Worker 基础上,继续用 LangGraph 补齐可落地的后台任务能力。 + +**Architecture:** 当前分支已经不是从零接入 LangGraph:`agent_runtime/graph.py` 已实现后台 research graph,`inference/plugins/voice_llm/persona_agent.py` 已用 PersonaAgent 包装实时 Omni provider,并用工具调用创建后台任务。后续开发应保持 Go TaskService 管状态、Python LangGraph Worker 执行任务、PersonaAgent 负责实时语音编排的边界。 + +**Tech Stack:** Python 3.10+, FastAPI, LangGraph, langgraph-checkpoint-sqlite, OpenAI-compatible LLM, Go TaskService, SQLite, Vue frontend. + +--- + +## Current Understanding + +- 当前本地分支为 `features`,跟踪 `origin/features`。 +- `pyproject.toml` 的 `agent` extra 已包含 `langgraph>=0.2.0`、`langgraph-checkpoint-sqlite>=2.0.0`、`aiosqlite>=0.20`。 +- `agent_runtime/graph.py` 已有 `classify_task -> plan_task -> run_research -> draft_artifact -> finalize` 的 LangGraph research graph。 +- `agent_runtime/llm.py` 已有 OpenAI-compatible 文本 LLM 客户端,默认支持从 CyberVerse 配置读取 Qwen/OpenAI 兼容参数。 +- `agent_runtime/tools.py` 当前只有 `NullSearchTool` 和 `MockSearchTool`,真实搜索适配仍是缺口。 +- `inference/plugins/voice_llm/persona_agent.py` 已实现 Omni 包装、hidden tools、后台任务异步启动、任务终态回灌 Omni session。 +- Go 侧 `server/internal/agenttask` 已负责任务持久化、事件、artifact、worker dispatch 和取消。 +- 已有文档 `docs/zh-CN/features/2026-05-11-persona-agent-task-mvp.md` 记录了 MVP 主链路。 + +## Development Assumptions + +- 不重写已经存在的 PersonaAgent、TaskService 或 LangGraph MVP 主链路。 +- 短期任务类型继续聚焦 `research`,避免提前抽象多 Agent 类型。 +- 搜索能力优先通过一个真实 `SearchTool` 适配器接入,而不是把搜索逻辑写进 graph 节点。 +- checkpoint 继续使用 SQLite,先保证本地开发和单机部署稳定。 +- 前端改动如涉及用户可见文本,需要同时维护中文和英文 i18n 文案。 + +## File Map + +- Modify: `agent_runtime/tools.py` - 增加真实搜索工具适配器,保留 `NullSearchTool` 作为默认降级。 +- Modify: `agent_runtime/server.py` - 根据配置选择 `SearchTool`,避免默认永远使用 `NullSearchTool`。 +- Modify: `agent_runtime/graph.py` - 只在需要时补充节点事件、错误路径或更清晰的状态字段。 +- Modify: `agent_runtime/llm.py` - 如有必要,收紧 JSON 输出解析和错误提示。 +- Modify: `inference/plugins/voice_llm/persona_agent.py` - 只修正 PersonaAgent 工具调用和任务回灌的明确缺陷。 +- Modify: `server/internal/agenttask/*.go` - 只在任务状态、取消、artifact API 有真实需求时小范围修改。 +- Modify: `frontend/src/i18n/messages.ts` and related task UI files - 仅当任务进度或 artifact 展示需要补齐时修改。 +- Test: `tests/unit/test_agent_runtime_*.py` - 覆盖 LangGraph、LLM、SearchTool、Callback 行为。 +- Test: `tests/unit/test_persona_agent_plugin.py` - 覆盖 PersonaAgent 工具调用、半句等待、任务回灌。 +- Test: `server/internal/agenttask/*_test.go` and `server/internal/api/*_test.go` - 覆盖 Go 任务状态和 API。 + +## Chunk 1: Baseline Verification + +### Task 1: Verify existing LangGraph MVP behavior + +**Files:** +- Read: `agent_runtime/graph.py` +- Read: `agent_runtime/server.py` +- Read: `inference/plugins/voice_llm/persona_agent.py` +- Test: existing unit tests + +- [ ] **Step 1: Run focused Python tests** + +Run: + +```bash +python -m pytest tests/unit/test_agent_runtime_llm.py tests/unit/test_persona_agent_plugin.py -q +``` + +Expected: PASS. If it fails due missing optional dependencies, install the project with `agent` extra or document the exact missing package. + +- [ ] **Step 2: Run focused Go task tests** + +Run: + +```bash +go test ./server/internal/agenttask ./server/internal/api +``` + +Expected: PASS. + +- [ ] **Step 3: Record current gaps** + +Expected gaps: + +- `NullSearchTool` means research artifacts cannot include live external search yet. +- Agent Worker search provider is not configuration-driven yet. +- End-to-end task flow depends on runtime config and real LLM credentials. + +## Chunk 2: Search Tool Adapter + +### Task 2: Add a real configurable SearchTool + +**Files:** +- Modify: `agent_runtime/tools.py` +- Modify: `agent_runtime/server.py` +- Test: `tests/unit/test_agent_runtime_tools.py` + +- [ ] **Step 1: Write failing tests for provider selection** + +Create tests that assert: + +- default config returns `NullSearchTool`; +- explicit mock config returns deterministic mock results; +- future real provider config can be selected without changing graph code. + +Run: + +```bash +python -m pytest tests/unit/test_agent_runtime_tools.py -q +``` + +Expected: FAIL until factory code exists. + +- [ ] **Step 2: Implement minimal factory** + +Add a small factory such as `build_search_tool_from_runtime_config(config)` in `agent_runtime/tools.py`. + +Keep it simple: + +- support `provider: "null"`; +- support `provider: "mock"` for tests and local demos; +- leave real provider implementation behind one narrow class when credentials/API are known. + +- [ ] **Step 3: Wire Agent Worker dependency** + +Change `agent_runtime/server.py:get_search_tool()` or app state initialization so the worker uses the configured tool. + +Do not modify `agent_runtime/graph.py` for provider-specific behavior. + +- [ ] **Step 4: Verify** + +Run: + +```bash +python -m pytest tests/unit/test_agent_runtime_tools.py tests/unit/test_agent_runtime_llm.py -q +``` + +Expected: PASS. + +## Chunk 3: LangGraph Robustness + +### Task 3: Make graph failure states explicit + +**Files:** +- Modify: `agent_runtime/graph.py` +- Test: `tests/unit/test_agent_runtime_graph.py` + +- [ ] **Step 1: Add tests for node failures** + +Cover: + +- LLM classification returns invalid JSON; +- search tool raises an exception; +- artifact callback fails. + +Expected behavior should be explicit: either emit `task.failed` through `agent_runtime/server.py` or emit a graph-level blocked event before failing. + +- [ ] **Step 2: Implement the smallest error-path improvement** + +Prefer one of these scoped options: + +- let `_run_task()` own final failure events and keep graph nodes straightforward; +- or emit a specific `research.blocked` event only for search-provider unavailable cases. + +Avoid broad retry frameworks until a concrete transient failure is observed. + +- [ ] **Step 3: Verify** + +Run: + +```bash +python -m pytest tests/unit/test_agent_runtime_graph.py tests/unit/test_inference_server.py -q +``` + +Expected: PASS. + +## Chunk 4: PersonaAgent Task UX + +### Task 4: Confirm voice task flow stays non-blocking + +**Files:** +- Modify: `inference/plugins/voice_llm/persona_agent.py` +- Test: `tests/unit/test_persona_agent_plugin.py` + +- [ ] **Step 1: Add tests before behavior changes** + +Add or extend tests for: + +- `create_task` returns an accepted tool result before task completion; +- task completion prompt is injected only after assistant acknowledgement final event; +- cancelled or failed task produces a short natural-language final prompt. + +- [ ] **Step 2: Patch only failing behavior** + +If tests expose a bug, patch only the relevant branch in `converse_stream()` or task monitoring helpers. + +Do not change tool schemas unless the real Omni provider requires it. + +- [ ] **Step 3: Verify** + +Run: + +```bash +python -m pytest tests/unit/test_persona_agent_plugin.py -q +``` + +Expected: PASS. + +## Chunk 5: Frontend Task Visibility + +### Task 5: Ensure task events and artifacts are visible in the UI + +**Files:** +- Inspect: `frontend/src/services/api.ts` +- Inspect: `frontend/src/composables/useChat.ts` +- Inspect: `frontend/src/components/ChatPanel.vue` +- Modify: `frontend/src/i18n/messages.ts` only if new user-facing text is needed. + +- [ ] **Step 1: Verify existing UI support** + +Check whether WebSocket `task_event` payloads are rendered and whether artifact links can be opened. + +- [ ] **Step 2: Add missing minimal UI behavior** + +If missing, add only: + +- a task progress message in chat; +- an artifact link when `artifact_id` appears; +- Chinese and English i18n entries for new visible text. + +- [ ] **Step 3: Verify** + +Run: + +```bash +cd frontend && npm run build +``` + +Expected: PASS. + +## Chunk 6: End-to-End Local Run + +### Task 6: Validate local task flow + +**Files:** +- Read/Modify only if needed: `infra/cyberverse_config.example.yaml` +- Read: `README.md` +- Read: `README.zh-CN.md` + +- [ ] **Step 1: Start services** + +Run the project-standard local commands from RTK or README. Expected services: + +- inference service with PersonaAgent; +- Go server with task service enabled; +- frontend dev server. + +- [ ] **Step 2: Trigger a research request** + +Use a PersonaAgent session and ask a research-style request, for example: + +```text +帮我查一下今天知乎有哪些热门信息,并整理成简短报告。 +``` + +Expected: + +- digital human first acknowledges quickly; +- Go task event stream reports queued/running/completed; +- LangGraph creates a markdown artifact; +- final voice reply summarizes completion. + +- [ ] **Step 3: Verify cancellation** + +Start a task, then ask to stop it. + +Expected: + +- latest active task becomes `cancelled`; +- frontend receives task event; +- PersonaAgent produces a short cancellation reply. + +## Final Verification + +Run: + +```bash +python -m pytest tests/unit/test_agent_runtime_llm.py tests/unit/test_persona_agent_plugin.py -q +go test ./server/internal/agenttask ./server/internal/api +cd frontend && npm run build +``` + +Expected: all commands pass, or any unavailable dependency is documented with the exact missing package and command that failed. + +## Notes + +- Keep changes narrow. The current branch already contains the core LangGraph architecture. +- Do not introduce a second task orchestrator beside Go TaskService. +- Do not make PersonaAgent parse visible JSON from model text; keep structured tool calls as the control path. +- Keep code comments in English. +- For frontend text, maintain both Chinese and English translations. diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 70d6f9b..e468c14 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -76,7 +76,7 @@ export async function getComponents(): Promise { } export async function deleteSession(sessionId: string): Promise { - const res = await fetch(`${API_BASE}/sessions/${sessionId}`, { method: 'DELETE' }) + const res = await fetch(`${API_BASE}/sessions/${sessionId}/close`, { method: 'POST' }) if (!res.ok && res.status !== 404) throw new Error(`Failed to delete session: ${res.status}`) } diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..0425cb7 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,5301 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: {} + linux-x86: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_go_select-2.3.0-cgo.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bash-5.2.37-h4be8908_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.45.1-default_h4852527_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.3.0-he8ccf15_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.1-gpl_hee00b0e_901.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h235f0fe_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h50e9bb6_24.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.6-h2b0a6b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.54.0-pl5321h6d3cee1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.3.0-h96af755_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/go-1.25.8-h282a287_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.0-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.4-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.3.2-ha23c83e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.0-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.0.0-hd85de46_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.0.0-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.0.0-hb56ce9e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.0.0-hb56ce9e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.0.0-hb56ce9e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.0.0-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.0.0-h7a07914_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.0.0-h7a07914_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.0.0-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.0.0-h78e8023_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.0.0-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.1-h4c96295_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.22.2-h273caaf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opusfile-0.12-h3358134_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h4bc722e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.20-h3c07f61_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.8-hdeec2a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/soxr-0.1.3-h0b41bf4_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.1-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-h51de99f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/00/b7/e3bf5133d697a08128598c8d0abc5e16377b51465a33756de24fa7dee953/aiosqlite-0.22.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/ff/2e4eca3ade2c22fe1dea7043b8ee9dabe47753349eb1b56a202de8af6349/fastapi-0.136.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/96/f28660fe2fe0f153288bf4a04e4910b7309d442395135c88ed4f5b3b8b40/grpcio-1.80.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5e/d1/d97eb30386feff6ac2a662620e2ed68be352e9a182d62e06213db694906a/grpcio_health_checking-1.80.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/d8/276ee759755d8f34f2ca5e9d2debd1a59f29f66059fb790bc369f2236c26/grpcio_tools-1.80.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6c/3c/3f62dee257eb3d6b2c1ef2a09d36d9793c7111156a73b5654d2c2305e5ce/idna-3.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/3b/4347e1d6c2a973d653bbb7a2d671a2d2426e54b52ba735b8ff0d0a29b75c/jiter-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1f/01/4771b7ab2af1d1aba5b710bd8f13d9225c609425214b357590a17b01be77/langchain_core-1.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/7a/9c97a7b9cbe4c5dc6a44cdb1545450c28f0c8ce89b9c1f0ee7fbad896263/langchain_protocol-0.0.15-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/07/057dc1aa7991115fca53f1fa6573a7cc0dd296c05360c672cc67fdb6245b/langgraph-1.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/ee/ecd3fa2e893746dde3b768daca2a4935208bc77d09445437ccfffb4a8c9b/langgraph_checkpoint-4.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/d8/84ef22ee1cc485c4910df450108fd5e246497379522b3c6cfba896f71bf6/langgraph_checkpoint_sqlite-3.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/ef/5ada0bef4013ef5ae53a0ca1de5736517f1076a54d313f156ca545ec65d5/langgraph_prebuilt-1.0.13-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/96/1c9f9fbfe756ddd850a2585e7f1949d8ebb97fdaa7a5eff8f45ed1314670/langgraph_sdk-0.3.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/a9/51e644c1f1dbc3dd7d22dfd6412eab206d538c81e024e4f287373544bdcb/langsmith-0.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9d/1c/5d43735b2553baae2a5e899dcbcd0670a86930d993184d72ca909bf11c9b/openai-2.36.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/56/d54152b67b63a0b3e556cfc549d6ce84f74d7f425ddeadc6c8a74d913da7/orjson-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/72/30/a436be9ce27d693d4e19fa94900028067133779f09fc45776db3f689c822/ormsgpack-1.12.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ad/6afd073b0f817b3e03f9e37ad626ae341805891f23c74b5292818f49ac63/sqlite_vec-0.1.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2d/21/a39274fba701f7ff9f1f5f4a88f9be21b50ab88d0a47e287fa6b9df70ad6/uuid_utils-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/31/a3/5b1562db76a5a488274b2332a97199b32d0442aca0ed193697fd47786316/uvicorn-0.46.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a4/db/268012153eb7f6bf2c8a0491fdcde11e093f166990821a2ab754fe95537d/xxhash-3.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: ./ + macos-arm: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_go_select-2.3.0-cgo.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bash-5.2.37-h5b2bd6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.11.0-h61f9b84_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1030.6.3-llvm19_1_hd01ab73_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-19.1.7-h75f8d18_31.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dbus-1.16.2-h3ff7a7c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ffmpeg-8.1.1-gpl_h246f3d5_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.17.1-h2b252f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.16-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.44.6-h4e57454_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.54.0-pl5321hc9deb11_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glslang-16.3.0-h7cb4797_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/go-1.25.8-ha44b283_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.14-hec049ff_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.2.0-h3103d1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lame-3.100-h1a8c8d9_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-956.6-llvm19_1_he86490a_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libass-0.17.4-hcbd7ca7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.5-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdovi-3.3.2-h78f8ca3_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.0-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwloc-2.12.2-default_ha3cc4f2_1000.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.4.0-ha332bbd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm19-19.1.7-h8e0c9ce_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libogg-1.3.5-h48c0fde_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-2026.0.0-h3e6d54f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-arm-cpu-plugin-2026.0.0-h3e6d54f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-auto-batch-plugin-2026.0.0-h2406d2e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-auto-plugin-2026.0.0-h2406d2e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-hetero-plugin-2026.0.0-h85cbfa6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-ir-frontend-2026.0.0-h85cbfa6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-onnx-frontend-2026.0.0-h41365f2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-paddle-frontend-2026.0.0-h41365f2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-pytorch-frontend-2026.0.0-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-tensorflow-frontend-2026.0.0-hc295da0_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-tensorflow-lite-frontend-2026.0.0-hf6b4638_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopus-1.6.1-h1a92334_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libplacebo-7.360.1-h176d363_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.33.5-h4a5acfd_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.62.1-he8aa2a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsigtool-0.1.3-h98dc951_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.1-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libusb-1.0.29-hbc156a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libvorbis-1.3.7-h81086ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libvpx-1.15.2-ha759d40_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libvulkan-loader-1.4.341.0-h3feff0a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.5-hc7d1edf_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/make-4.4.1-hc9fafa5_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.22.2-h2e6c367_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openh264-2.6.0-hb5b2745_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/opusfile-0.12-h5643135_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.56.4-hf80efc4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-hde07d2e_1009.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pugixml-1.15-hd3d436d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.20-h1b19095_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sdl2-2.32.56-h248ca61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sdl3-3.4.8-h6fa9c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shaderc-2026.2-hf31e910_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/soxr-0.1.3-h5008568_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spirv-tools-2026.1-h4ddebb9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tbb-2023.0.0-h124206c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x264-1!164.3095-h57fd34a_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/00/b7/e3bf5133d697a08128598c8d0abc5e16377b51465a33756de24fa7dee953/aiosqlite-0.22.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/ff/2e4eca3ade2c22fe1dea7043b8ee9dabe47753349eb1b56a202de8af6349/fastapi-0.136.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/02/1417f5c3460dea65f7a2e3c14e8b31e77f7ffb730e9bfadd89eda7a9f477/grpcio-1.80.0-cp310-cp310-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/5e/d1/d97eb30386feff6ac2a662620e2ed68be352e9a182d62e06213db694906a/grpcio_health_checking-1.80.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/b4/6d57ea199c5b880d182a2234aafa9a686f9c54c708ea7be75bd19d5aa825/grpcio_tools-1.80.0-cp310-cp310-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6c/3c/3f62dee257eb3d6b2c1ef2a09d36d9793c7111156a73b5654d2c2305e5ce/idna-3.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/72/b6de8a531e0adbadd839bec301165feb1fccf00e9ff55073ba2dd20f0043/jiter-0.14.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1f/01/4771b7ab2af1d1aba5b710bd8f13d9225c609425214b357590a17b01be77/langchain_core-1.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/7a/9c97a7b9cbe4c5dc6a44cdb1545450c28f0c8ce89b9c1f0ee7fbad896263/langchain_protocol-0.0.15-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/07/057dc1aa7991115fca53f1fa6573a7cc0dd296c05360c672cc67fdb6245b/langgraph-1.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/ee/ecd3fa2e893746dde3b768daca2a4935208bc77d09445437ccfffb4a8c9b/langgraph_checkpoint-4.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/d8/84ef22ee1cc485c4910df450108fd5e246497379522b3c6cfba896f71bf6/langgraph_checkpoint_sqlite-3.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/ef/5ada0bef4013ef5ae53a0ca1de5736517f1076a54d313f156ca545ec65d5/langgraph_prebuilt-1.0.13-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/96/1c9f9fbfe756ddd850a2585e7f1949d8ebb97fdaa7a5eff8f45ed1314670/langgraph_sdk-0.3.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/a9/51e644c1f1dbc3dd7d22dfd6412eab206d538c81e024e4f287373544bdcb/langsmith-0.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9d/1c/5d43735b2553baae2a5e899dcbcd0670a86930d993184d72ca909bf11c9b/openai-2.36.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/93/fa/a91f70829ebccf6387c4946e0a1a109f6ba0d6a28d65f628bedfad94b890/ormsgpack-1.12.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/01/a3c3ed5cd186f39e7880f8303cc51385a198a81469d53d0fdecf1f64d929/protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/3d/3677e0cd2f92e5ebc43cd29fbf565b75582bff1ccfa0b8327c7508e1084f/sqlite_vec-0.1.9-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/19/428d181d89678be61f30eb812c66f42e6dfe4f9aee911f4db4450b55459c/uuid_utils-0.15.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/31/a3/5b1562db76a5a488274b2332a97199b32d0442aca0ed193697fd47786316/uvicorn-0.46.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/07/61/40f0155b0b09988eb6cdbfc52652f2f371810b0c58163208cb05667757bd/xxhash-3.7.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/96/34/ef34ef77f1ee38fc8e4f9775217a613b452916e633c4f1d98f31db52c4a5/zstandard-0.25.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: ./ +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_go_select-2.3.0-cgo.tar.bz2 + sha256: d86836d4f3094b4ac149dcdc55f1f12be6e84ed1206a4234404a024e49769832 + md5: 76f94c0e00d08432e003a7b54a1adf53 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4875 + timestamp: 1586504607438 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_go_select-2.3.0-cgo.tar.bz2 + sha256: 5cd5dd9817d0d671ad3e2f85c967b4dcd1a297a686b7d5820e625e2f4f962558 + md5: 79a39651abfce773c2948175d9b62986 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5074 + timestamp: 1627073534014 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28948 + timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd + md5: a44032f282e7d2acdeb1c240308052dd + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8325 + timestamp: 1764092507920 +- pypi: https://files.pythonhosted.org/packages/00/b7/e3bf5133d697a08128598c8d0abc5e16377b51465a33756de24fa7dee953/aiosqlite-0.22.1-py3-none-any.whl + name: aiosqlite + version: 0.22.1 + sha256: 21c002eb13823fad740196c5a2e9d8e62f6243bd9e7e4a1f87fb5e44ecb4fceb + requires_dist: + - attribution==1.8.0 ; extra == 'dev' + - black==25.11.0 ; extra == 'dev' + - build>=1.2 ; extra == 'dev' + - coverage[toml]==7.10.7 ; extra == 'dev' + - flake8==7.3.0 ; extra == 'dev' + - flake8-bugbear==24.12.12 ; extra == 'dev' + - flit==3.12.0 ; extra == 'dev' + - mypy==1.19.0 ; extra == 'dev' + - ufmt==2.8.0 ; extra == 'dev' + - usort==1.0.8.post1 ; extra == 'dev' + - sphinx==8.1.3 ; extra == 'docs' + - sphinx-mdinclude==0.6.2 ; extra == 'docs' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda + sha256: d88aa7ae766cf584e180996e92fef2aa7d8e0a0a5ab1d4d49c32390c1b5fff31 + md5: dcdc58c15961dbf17a0621312b01f5cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: GPL + purls: [] + size: 584660 + timestamp: 1768327524772 +- pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + name: annotated-doc + version: 0.0.4 + sha256: 571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + name: annotated-types + version: 0.7.0 + sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 + requires_dist: + - typing-extensions>=4.0.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl + name: anyio + version: 4.13.0 + sha256: 08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708 + requires_dist: + - exceptiongroup>=1.0.2 ; python_full_version < '3.11' + - idna>=2.8 + - typing-extensions>=4.5 ; python_full_version < '3.13' + - trio>=0.32.0 ; extra == 'trio' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855 + md5: 346722a0be40f6edc53f12640d301338 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2706396 + timestamp: 1718551242397 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + sha256: ec238f18ce8140485645252351a0eca9ef4f7a1c568a420f240a585229bc12ef + md5: 7adba36492a1bb22d98ffffe4f6fc6de + depends: + - __osx >=11.0 + - libcxx >=16 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2235747 + timestamp: 1718551382432 +- pypi: https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl + name: backports-asyncio-runner + version: 1.2.0 + sha256: 0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5 + requires_python: '>=3.8,<3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/bash-5.2.37-h4be8908_0.conda + sha256: a0ce6ed2b346501be1fcae415e4df04618f822834902dc22174a350ae39c791e + md5: c918f7141733d412f5c579d07f437690 + depends: + - readline + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - readline >=8.2,<9.0a0 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1929937 + timestamp: 1748631191479 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bash-5.2.37-h5b2bd6a_0.conda + sha256: 9addc6fab5b01dc2d4bc58b15cf7df2352a2cbd4c2344c70f2de70243c60e548 + md5: dd8fe1def8c4aecf00ec21ee96c74863 + depends: + - readline + - __osx >=11.0 + - readline >=8.2,<9.0a0 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 1715546 + timestamp: 1748631203521 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.45.1-default_h4852527_102.conda + sha256: 3c7c5580c1720206f28b7fa3d60d17986b3f32465e63009c14c9ae1ea64f926c + md5: 212fe5f1067445544c99dc1c847d032c + depends: + - binutils_impl_linux-64 >=2.45.1,<2.45.2.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 35436 + timestamp: 1774197482571 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + sha256: 0a7d405064f53b9d91d92515f1460f7906ee5e8523f3cd8973430e81219f4917 + md5: 8165352fdce2d2025bf884dc0ee85700 + depends: + - ld_impl_linux-64 2.45.1 default_hbd61a6d_102 + - sysroot_linux-64 + - zstd >=1.5.7,<1.6.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 3661455 + timestamp: 1774197460085 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_102.conda + sha256: 78a58d523d072b7f8e591b8f8572822e044b31764ed7e8d170392e7bc6d58339 + md5: 2a307a17309d358c9b42afdd3199ddcc + depends: + - binutils_impl_linux-64 2.45.1 default_hfdba357_102 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 36304 + timestamp: 1774197485247 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260182 + timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 124834 + timestamp: 1771350416561 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e + md5: 920bb03579f15389b9e512095ad995b7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 207882 + timestamp: 1765214722852 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + sha256: 2995f2aed4e53725e5efbc28199b46bf311c3cab2648fc4f10c2227d6d5fa196 + md5: bcb3cba70cf1eec964a03b4ba7775f01 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 180327 + timestamp: 1765215064054 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + sha256: 8e7a40f16400d7839c82581410aa05c1f8324a693c9d50079f8c50dc9fb241f0 + md5: abd85120de1187b0d1ec305c2173c71b + depends: + - binutils + - gcc + - gcc_linux-64 14.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6693 + timestamp: 1753098721814 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-compiler-1.11.0-h61f9b84_0.conda + sha256: b51bd1551cfdf41500f732b4bd1e4e70fb1e74557165804a648f32fa9c671eec + md5: 148516e0c9edf4e9331a4d53ae806a9b + depends: + - cctools >=949.0.1 + - clang_osx-arm64 19.* + - ld64 >=530 + - llvm-openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6697 + timestamp: 1753098737760 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.4.22-hbd8a1cb_0.conda + sha256: c9dbcc8039a52023660d6d1bbf87594a93dd69c6ac5a2a44323af2c92976728d + md5: e18ad67cf881dcadee8b8d9e2f8e5f73 + depends: + - __unix + license: ISC + purls: [] + size: 131039 + timestamp: 1776865545798 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a + md5: bb6c4808bfa69d6f7f6b07e5846ced37 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 989514 + timestamp: 1766415934926 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.4-he0f2337_1.conda + sha256: cde9b79ee206fe3ba6ca2dc5906593fb7a1350515f85b2a1135a4ce8ec1539e3 + md5: 36200ecfbbfbcb82063c87725434161f + depends: + - __osx >=11.0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libcxx >=19 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libglib >=2.86.3,<3.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.46.4,<1.0a0 + license: LGPL-2.1-only or MPL-1.1 + purls: [] + size: 900035 + timestamp: 1766416416791 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools-1030.6.3-llvm19_1_hd01ab73_4.conda + sha256: 4f408036b5175be0d2c7940250d00dae5ea7a71d194a1ffb35881fb9df6211fc + md5: caf7c8e48827c2ad0c402716159fe0a2 + depends: + - cctools_impl_osx-arm64 1030.6.3 llvm19_1_he8a363d_4 + - ld64 956.6 llvm19_1_he86490a_4 + - libllvm19 >=19.1.7,<19.2.0a0 + license: APSL-2.0 + license_family: Other + purls: [] + size: 24313 + timestamp: 1768852906882 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_impl_osx-arm64-1030.6.3-llvm19_1_he8a363d_4.conda + sha256: c444442e0c01de92a75b58718a100f2e272649658d4f3dd915bbfc2316b25638 + md5: 76c651b923e048f3f3e0ecb22c966f70 + depends: + - __osx >=11.0 + - ld64_osx-arm64 >=956.6,<956.7.0a0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-tools 19.1.* + - sigtool-codesign + constrains: + - ld64 956.6.* + - cctools 1030.6.3.* + - clang 19.1.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 749918 + timestamp: 1768852866532 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-1030.6.3-llvm19_1_hd01ab73_4.conda + sha256: 684a19ab44f3d32c668cf1f509bbac20b10f7e9990c7449a2739930915cda8b4 + md5: 0d059c5db9d880ff37b2da53bf06509e + depends: + - cctools_impl_osx-arm64 1030.6.3 llvm19_1_he8a363d_4 + - ld64_osx-arm64 956.6 llvm19_1_ha2625f7_4 + constrains: + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 23429 + timestamp: 1772019026855 +- pypi: https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl + name: certifi + version: 2026.4.22 + sha256: 3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.7 + sha256: cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl + name: charset-normalizer + version: 3.4.7 + sha256: cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19.1.7-default_hf9bcbb7_9.conda + sha256: 8268c23a000cfeee1b83e19c59eb018ec07583905f69bfee01beac8aedd8c4df + md5: 20056c993a8c9df01e04a0e165579ec1 + depends: + - cctools + - clang-19 19.1.7.* default_* + - clang_impl_osx-arm64 19.1.7 default_hc11f16d_9 + - ld64 + - ld64_osx-arm64 * llvm19_1_* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24962 + timestamp: 1776989044302 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang-19-19.1.7-default_hf3020a7_9.conda + sha256: a1449c64f455d43153036f54c68cb075a52c1d9f3350a91f4a8936ecf1675c6b + md5: 5a77d772c22448f6ab340fbfff55db48 + depends: + - __osx >=11.0 + - libclang-cpp19.1 19.1.7 default_hf3020a7_9 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 763361 + timestamp: 1776988759708 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-19.1.7-default_hc11f16d_9.conda + sha256: 56db3a98eda7032a0aefe38f146a4b29df9d75d08c71bf7f7d6412effe775dd1 + md5: 2aec2e39be3b4999bda2a3e5bd4cd2e6 + depends: + - cctools_impl_osx-arm64 + - clang-19 19.1.7.* default_* + - compiler-rt 19.1.7.* + - compiler-rt_osx-arm64 + - ld64_osx-arm64 * llvm19_1_* + - llvm-openmp >=19.1.7 + - llvm-tools 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 24905 + timestamp: 1776989025990 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-19.1.7-h75f8d18_31.conda + sha256: c9daaa0e7785fe7c5799e3d691c6aa5ab8b4a54bbf49835037068dd78e0a7b35 + md5: 6645630920c0980a33f055a49fbdb88e + depends: + - cctools_osx-arm64 + - clang 19.* + - clang_impl_osx-arm64 19.1.7.* + - sdkroot_env_osx-arm64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 21135 + timestamp: 1769482854554 +- pypi: https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl + name: click + version: 8.3.3 + sha256: a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613 + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-19.1.7-h855ad52_1.conda + sha256: b58a481828aee699db7f28bfcbbe72fb133277ac60831dfe70ee2465541bcb93 + md5: 39451684370ae65667fa5c11222e43f7 + depends: + - __osx >=11.0 + - clang 19.1.7.* + - compiler-rt_osx-arm64 19.1.7.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 97085 + timestamp: 1757411887557 +- conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-19.1.7-he32a8d3_1.conda + sha256: 8c32a3db8adf18ed58197e8895ce4f24a83ed63c817512b9a26724753b116f2a + md5: 8d99c82e0f5fed6cc36fcf66a11e03f0 + depends: + - clang 19.1.7.* + constrains: + - compiler-rt 19.1.7 + - clangxx 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 10490535 + timestamp: 1757411851093 +- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.3.0-he8ccf15_19.conda + sha256: 769357d82d19f59c23888d935d92b67739bdb2acaacaa7bbe7c4fe4ee5346287 + md5: fd57230e9a97b97bf20dd63aeae6fe61 + depends: + - gcc_impl_linux-64 >=14.3.0,<14.3.1.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 31751 + timestamp: 1778268677594 +- pypi: ./ + name: cyberverse + version: 0.1.0 + sha256: 6eb6c7e38689f4a43bc1f546f41d72655044efa5f36f1a95879a46afcb1b4695 + requires_dist: + - numpy>=1.24 + - pydantic>=2.0 + - pyyaml>=6.0 + - grpcio>=1.60 ; extra == 'inference' + - grpcio-tools>=1.60 ; extra == 'inference' + - grpcio-health-checking>=1.60 ; extra == 'inference' + - openai>=1.0 ; extra == 'llm' + - openai>=1.0 ; extra == 'tts' + - scipy>=1.10 ; extra == 'tts' + - websockets>=12.0 ; extra == 'omni' + - websockets>=12.0 ; extra == 'voice-llm' + - openai>=1.0 ; extra == 'qwen' + - websockets>=12.0 ; extra == 'qwen' + - scipy>=1.10 ; extra == 'qwen' + - opencv-python-headless>=4.12.0 ; extra == 'flash-head' + - diffusers>=0.34.0 ; extra == 'flash-head' + - transformers==4.57.3 ; extra == 'flash-head' + - tokenizers>=0.20.3 ; extra == 'flash-head' + - accelerate>=1.8.1 ; extra == 'flash-head' + - tqdm ; extra == 'flash-head' + - imageio ; extra == 'flash-head' + - easydict ; extra == 'flash-head' + - ftfy ; extra == 'flash-head' + - imageio-ffmpeg ; extra == 'flash-head' + - scikit-image ; extra == 'flash-head' + - loguru ; extra == 'flash-head' + - gradio==5.50.0 ; extra == 'flash-head' + - xfuser==0.4.5 ; extra == 'flash-head' + - pyloudnorm ; extra == 'flash-head' + - decord ; extra == 'flash-head' + - xformers==0.0.32.post1 ; extra == 'flash-head' + - librosa ; extra == 'flash-head' + - mediapipe>=0.10.13 ; extra == 'flash-head' + - flask ; extra == 'flash-head' + - nvidia-nccl-cu12==2.27.3 ; extra == 'flash-head' + - opencv-python>=4.11.0 ; extra == 'live-act' + - diffusers>=0.31.0 ; extra == 'live-act' + - transformers>=4.49.0 ; extra == 'live-act' + - tokenizers>=0.20.3 ; extra == 'live-act' + - accelerate>=1.12.1 ; extra == 'live-act' + - tqdm ; extra == 'live-act' + - imageio ; extra == 'live-act' + - easydict ; extra == 'live-act' + - ftfy ; extra == 'live-act' + - imageio-ffmpeg ; extra == 'live-act' + - scikit-image ; extra == 'live-act' + - loguru ; extra == 'live-act' + - xfuser==0.4.5 ; extra == 'live-act' + - einops ; extra == 'live-act' + - safetensors ; extra == 'live-act' + - openai-whisper>=20231117 ; extra == 'asr' + - pytest>=7.0 ; extra == 'dev' + - pytest-asyncio>=0.21 ; extra == 'dev' + - openai>=1.0 ; extra == 'agent' + - fastapi>=0.115 ; extra == 'agent' + - uvicorn>=0.30 ; extra == 'agent' + - httpx>=0.27 ; extra == 'agent' + - langgraph>=0.2.0 ; extra == 'agent' + - langgraph-checkpoint-sqlite>=2.0.0 ; extra == 'agent' + - aiosqlite>=0.20 ; extra == 'agent' + - cyberverse[inference,llm,tts,omni,asr,flash-head,live-act,agent] ; extra == 'all' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020 + md5: 418c6ca5929a611cbd69204907a83995 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 760229 + timestamp: 1685695754230 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + sha256: 93e077b880a85baec8227e8c72199220c7f87849ad32d02c14fb3807368260b8 + md5: 5a74cdee497e6b65173e10d94582fae6 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 316394 + timestamp: 1685695959391 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 + md5: ce96f2f470d39bd96ce03945af92e280 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - libglib >=2.86.2,<3.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 447649 + timestamp: 1764536047944 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/dbus-1.16.2-h3ff7a7c_1.conda + sha256: a8207751ed261764061866880da38e4d3063e167178bfe85b6db9501432462ba + md5: 5a3506971d2d53023c1c4450e908a8da + depends: + - libcxx >=19 + - __osx >=11.0 + - libglib >=2.86.2,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 393811 + timestamp: 1764536084131 +- pypi: https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl + name: distro + version: 1.9.0 + sha256: 7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2 + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl + name: exceptiongroup + version: 1.3.1 + sha256: a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598 + requires_dist: + - typing-extensions>=4.6.0 ; python_full_version < '3.13' + - pytest>=6 ; extra == 'test' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/5a/ff/2e4eca3ade2c22fe1dea7043b8ee9dabe47753349eb1b56a202de8af6349/fastapi-0.136.1-py3-none-any.whl + name: fastapi + version: 0.136.1 + sha256: a6e9d7eeada96c93a4d69cb03836b44fa34e2854accb7244a1ece36cd4781c3f + requires_dist: + - starlette>=0.46.0 + - pydantic>=2.9.0 + - typing-extensions>=4.8.0 + - typing-inspection>=0.4.2 + - annotated-doc>=0.0.2 + - fastapi-cli[standard]>=0.0.8 ; extra == 'standard' + - fastar>=0.9.0 ; extra == 'standard' + - httpx>=0.23.0,<1.0.0 ; extra == 'standard' + - jinja2>=3.1.5 ; extra == 'standard' + - python-multipart>=0.0.18 ; extra == 'standard' + - email-validator>=2.0.0 ; extra == 'standard' + - uvicorn[standard]>=0.12.0 ; extra == 'standard' + - pydantic-settings>=2.0.0 ; extra == 'standard' + - pydantic-extra-types>=2.0.0 ; extra == 'standard' + - fastapi-cli[standard-no-fastapi-cloud-cli]>=0.0.8 ; extra == 'standard-no-fastapi-cloud-cli' + - httpx>=0.23.0,<1.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - jinja2>=3.1.5 ; extra == 'standard-no-fastapi-cloud-cli' + - python-multipart>=0.0.18 ; extra == 'standard-no-fastapi-cloud-cli' + - email-validator>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - uvicorn[standard]>=0.12.0 ; extra == 'standard-no-fastapi-cloud-cli' + - pydantic-settings>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - pydantic-extra-types>=2.0.0 ; extra == 'standard-no-fastapi-cloud-cli' + - fastapi-cli[standard]>=0.0.8 ; extra == 'all' + - httpx>=0.23.0,<1.0.0 ; extra == 'all' + - jinja2>=3.1.5 ; extra == 'all' + - python-multipart>=0.0.18 ; extra == 'all' + - itsdangerous>=1.1.0 ; extra == 'all' + - pyyaml>=5.3.1 ; extra == 'all' + - email-validator>=2.0.0 ; extra == 'all' + - uvicorn[standard]>=0.12.0 ; extra == 'all' + - pydantic-settings>=2.0.0 ; extra == 'all' + - pydantic-extra-types>=2.0.0 ; extra == 'all' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.1-gpl_hee00b0e_901.conda + sha256: 6af3f45857478c28fa134e23a8ab7a81ce63cdd29aa2d899232eb7d9410b26e7 + md5: 57b938a79ebb6b996505ea79394bd0c9 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - aom >=3.9.1,<3.10.0a0 + - bzip2 >=1.0.8,<2.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - gmp >=6.3.0,<7.0a0 + - harfbuzz >=14.2.0 + - lame >=3.100,<3.101.0a0 + - libass >=0.17.4,<0.17.5.0a0 + - libexpat >=2.8.0,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.3,<6.0a0 + - libopenvino >=2026.0.0,<2026.0.1.0a0 + - libopenvino-auto-batch-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-auto-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-hetero-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-intel-cpu-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-intel-gpu-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-intel-npu-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-ir-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-onnx-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-paddle-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-pytorch-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-tensorflow-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-tensorflow-lite-frontend >=2026.0.0,<2026.0.1.0a0 + - libopus >=1.6.1,<2.0a0 + - libplacebo >=7.360.1,<7.361.0a0 + - librsvg >=2.62.1,<3.0a0 + - libstdcxx >=14 + - libva >=2.23.0,<3.0a0 + - libvorbis >=1.3.7,<1.4.0a0 + - libvpl >=2.16.0,<2.17.0a0 + - libvpx >=1.15.2,<1.16.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - openh264 >=2.6.0,<2.6.1.0a0 + - openssl >=3.5.6,<4.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - sdl2 >=2.32.56,<3.0a0 + - shaderc >=2026.2,<2026.3.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + - x264 >=1!164.3095,<1!165 + - x265 >=3.5,<3.6.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + constrains: + - __cuda >=12.8 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 12983934 + timestamp: 1777900506207 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ffmpeg-8.1.1-gpl_h246f3d5_101.conda + sha256: 0ae2fddd81ad657d18eee5f8273d290f039f2f0075c0da74c2edd60110c62243 + md5: 99b1ce7a32a3bb4da59b7f1a73acc29f + depends: + - __osx >=11.0 + - aom >=3.9.1,<3.10.0a0 + - bzip2 >=1.0.8,<2.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - gmp >=6.3.0,<7.0a0 + - harfbuzz >=14.2.0 + - lame >=3.100,<3.101.0a0 + - libass >=0.17.4,<0.17.5.0a0 + - libcxx >=19 + - libexpat >=2.8.0,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libiconv >=1.18,<2.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.3,<6.0a0 + - libopenvino >=2026.0.0,<2026.0.1.0a0 + - libopenvino-arm-cpu-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-auto-batch-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-auto-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-hetero-plugin >=2026.0.0,<2026.0.1.0a0 + - libopenvino-ir-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-onnx-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-paddle-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-pytorch-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-tensorflow-frontend >=2026.0.0,<2026.0.1.0a0 + - libopenvino-tensorflow-lite-frontend >=2026.0.0,<2026.0.1.0a0 + - libopus >=1.6.1,<2.0a0 + - libplacebo >=7.360.1,<7.361.0a0 + - librsvg >=2.62.1,<3.0a0 + - libvorbis >=1.3.7,<1.4.0a0 + - libvpx >=1.15.2,<1.16.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - openh264 >=2.6.0,<2.6.1.0a0 + - openssl >=3.5.6,<4.0a0 + - sdl2 >=2.32.56,<3.0a0 + - shaderc >=2026.2,<2026.3.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + - x264 >=1!164.3095,<1!165 + - x265 >=3.5,<3.6.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 9677592 + timestamp: 1777901770154 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 397370 + timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + purls: [] + size: 96530 + timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + purls: [] + size: 700814 + timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + purls: [] + size: 1620504 + timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + sha256: aa4a44dba97151221100a637c7f4bde619567afade9c0265f8e1c8eed8d7bd8c + md5: 867127763fbe935bab59815b6e0b7b5c + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libuuid >=2.41.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 270705 + timestamp: 1771382710863 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.17.1-h2b252f5_0.conda + sha256: 851e9c778bfc54645dcab7038c0383445cbebf16f6bb2d3f62ce422b1605385a + md5: d06ae1a11b46cc4c74177ecd28de7c7a + depends: + - __osx >=11.0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 237308 + timestamp: 1771382999247 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3667 + timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 + depends: + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4059 + timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + sha256: 858283ff33d4c033f4971bf440cebff217d5552a5222ba994c49be990dacd40d + md5: f9f81ea472684d75b9dd8d0b328cf655 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 61244 + timestamp: 1757438574066 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.16-hc919400_0.conda + sha256: d856dc6744ecfba78c5f7df3378f03a75c911aadac803fa2b41a583667b4b600 + md5: 04bdce8d93a4ed181d1d726163c2d447 + depends: + - __osx >=11.0 + license: LGPL-2.1-or-later + purls: [] + size: 59391 + timestamp: 1757438897523 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_19.conda + sha256: e3f541c4be7296b800a972482b7a5e399614d5e3310d3d083257fbdb4df81ea0 + md5: 2dd149aa693db92758af3e685ef30439 + depends: + - conda-gcc-specs + - gcc_impl_linux-64 14.3.0 h235f0fe_19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 29459 + timestamp: 1778268802660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.3.0-h235f0fe_19.conda + sha256: 1e2500ca976d4831c953d1c6db7b238d2e6806910b930e3eb631b79ba5c3ba41 + md5: 99936dc616b7ce97b0468759b8a7c64e + depends: + - binutils_impl_linux-64 >=2.45 + - libgcc >=14.3.0 + - libgcc-devel_linux-64 14.3.0 hf649bbc_119 + - libgomp >=14.3.0 + - libsanitizer 14.3.0 h8f1669f_19 + - libstdcxx >=14.3.0 + - libstdcxx-devel_linux-64 14.3.0 h9f08a49_119 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 77667192 + timestamp: 1778268558509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.3.0-h50e9bb6_24.conda + sha256: 5f73bc0ce1729466f99d072678fb1bc13d5424d03a34cb2e69fbafbfd5e27ab2 + md5: 91b0f19212d79a1a4dca034aac729e4f + depends: + - gcc_impl_linux-64 14.3.0.* + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 29073 + timestamp: 1777144725126 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.6-h2b0a6b4_0.conda + sha256: c5594497f0646e9079705b3199dbb2d5b13c48173cf110000fa1c8818e2b3e0c + md5: 7892f39a39ed39591a89a28eba03e987 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.56,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 577414 + timestamp: 1774985848058 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.44.6-h4e57454_0.conda + sha256: 07cbba4e12430de35ea608eb3006cf1f7f63832c4f89a081cd6f3872944c1aa6 + md5: e67ebd2f639f46e52af8531622fa6051 + depends: + - __osx >=11.0 + - libglib >=2.86.4,<3.0a0 + - libintl >=0.25.1,<1.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.56,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 548309 + timestamp: 1774986047281 +- conda: https://conda.anaconda.org/conda-forge/linux-64/git-2.54.0-pl5321h6d3cee1_0.conda + sha256: 718eb36fe23cac36c7bbeeb21ea0078256c8790b0e949a4ebb322e8e1da6c405 + md5: 25396e7aade67a4d4413431559a47591 + depends: + - __glibc >=2.28,<3.0.a0 + - libcurl >=8.20.0,<9.0a0 + - libexpat >=2.8.0,<3.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - perl 5.* + license: GPL-2.0-or-later and LGPL-2.1-or-later + purls: [] + size: 11369381 + timestamp: 1778072346246 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/git-2.54.0-pl5321hc9deb11_0.conda + sha256: 48cbac7b8c8b471af28bc43b36b897252412f1b1034b602c75745366ade4fcdc + md5: 4ba08d0f1566516cfe440d18c32dcf96 + depends: + - __osx >=11.0 + - libcurl >=8.20.0,<9.0a0 + - libexpat >=2.8.0,<3.0a0 + - libiconv >=1.18,<2.0a0 + - libintl >=0.25.1,<1.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - perl 5.* + license: GPL-2.0-or-later and LGPL-2.1-or-later + purls: [] + size: 12853597 + timestamp: 1778073368996 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.3.0-h96af755_0.conda + sha256: 3c9b6a90937a96ad27d160304cdbe5e9961db613aba2b84ff673429f0c61d48e + md5: d175cb2c14104728ada04883786a309d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - spirv-tools >=2026,<2027.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1366082 + timestamp: 1777747028121 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/glslang-16.3.0-h7cb4797_0.conda + sha256: d5bb8e2373cb39d1404ef7dc8019e764b27180c8a0f88ba234a595dc330caabb + md5: 85d9c709161737695252660b174b36f2 + depends: + - __osx >=11.0 + - libcxx >=19 + - spirv-tools >=2026,<2027.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 875961 + timestamp: 1777747792638 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c + md5: c94a5994ef49749880a8139cf9afcbe1 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: [] + size: 460055 + timestamp: 1718980856608 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda + sha256: 76e222e072d61c840f64a44e0580c2503562b009090f55aa45053bf1ccb385dd + md5: eed7278dfbab727b56f2c0b64330814b + depends: + - __osx >=11.0 + - libcxx >=16 + license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: [] + size: 365188 + timestamp: 1718981343258 +- conda: https://conda.anaconda.org/conda-forge/linux-64/go-1.25.8-h282a287_0.conda + sha256: 9532621016f4e7054bd698e1ed4e857b71fee2d98dbf5ffaafe526c95b6a2b2d + md5: e6c533f14f9d5f124c3b2cc38c8cc9ea + depends: + - __glibc >=2.17,<3.0.a0 + - _go_select 2.3.0 cgo + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - libstdcxx >=14 + constrains: + - gcc_linux-64 14.* + - gxx_linux-64 14.* + - gfortran_linux-64 14.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 49011719 + timestamp: 1773238463921 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/go-1.25.8-ha44b283_0.conda + sha256: 37ba3252d7da55352875ffac59ae2802c99e57943a27388e1fa0193143e55bd7 + md5: e81b84d4310cdc930f14c2c26e5d2011 + depends: + - __osx >=12.3 + - _go_select 2.3.0 cgo + - libcxx >=19 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - clang_osx-arm64 19.* + - gfortran_osx-arm64 14.* + - clangxx_osx-arm64 19.* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 70492926 + timestamp: 1773238883538 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda + sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c + md5: 2cd94587f3a401ae05e03a6caf09539d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 99596 + timestamp: 1755102025473 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.14-hec049ff_2.conda + sha256: c507ae9989dbea7024aa6feaebb16cbf271faac67ac3f0342ef1ab747c20475d + md5: 0fc46fee39e88bbcf5835f71a9d9a209 + depends: + - __osx >=11.0 + - libcxx >=19 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 81202 + timestamp: 1755102333712 +- pypi: https://files.pythonhosted.org/packages/16/02/1417f5c3460dea65f7a2e3c14e8b31e77f7ffb730e9bfadd89eda7a9f477/grpcio-1.80.0-cp310-cp310-macosx_11_0_universal2.whl + name: grpcio + version: 1.80.0 + sha256: 7b641fc3f1dc647bfd80bd713addc68f6d145956f64677e56d9ebafc0bd72388 + requires_dist: + - typing-extensions~=4.12 + - grpcio-tools>=1.80.0 ; extra == 'protobuf' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f9/96/f28660fe2fe0f153288bf4a04e4910b7309d442395135c88ed4f5b3b8b40/grpcio-1.80.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: grpcio + version: 1.80.0 + sha256: c51bf8ac4575af2e0678bccfb07e47321fc7acb5049b4482832c5c195e04e13a + requires_dist: + - typing-extensions~=4.12 + - grpcio-tools>=1.80.0 ; extra == 'protobuf' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5e/d1/d97eb30386feff6ac2a662620e2ed68be352e9a182d62e06213db694906a/grpcio_health_checking-1.80.0-py3-none-any.whl + name: grpcio-health-checking + version: 1.80.0 + sha256: d804d4549cbb71e90ca2c7bf0c501060135dfd220aca8e2c54f96d3e79e210e5 + requires_dist: + - protobuf>=6.31.1,<7.0.0 + - grpcio>=1.80.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/97/d8/276ee759755d8f34f2ca5e9d2debd1a59f29f66059fb790bc369f2236c26/grpcio_tools-1.80.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: grpcio-tools + version: 1.80.0 + sha256: 31fd01a4038b5dfc4ec79504a17061344f670f851833411717fef66920f13cd7 + requires_dist: + - protobuf>=6.31.1,<7.0.0 + - grpcio>=1.80.0 + - setuptools>=77.0.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/9a/b4/6d57ea199c5b880d182a2234aafa9a686f9c54c708ea7be75bd19d5aa825/grpcio_tools-1.80.0-cp310-cp310-macosx_11_0_universal2.whl + name: grpcio-tools + version: 1.80.0 + sha256: 85fe8d15f146c62cb76f38d963e256392d287442b9232717d30ae9e3bbda9bc3 + requires_dist: + - protobuf>=6.31.1,<7.0.0 + - grpcio>=1.80.0 + - setuptools>=77.0.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + name: h11 + version: 0.16.0 + sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.0-h6083320_0.conda + sha256: 232c95b56d16d33d8256026a3b1ad34f7f9a75c179d388854be0fd624ddba9e3 + md5: e194f6a2f498f0c7b1e6498bd0b12645 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.7.5,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2333599 + timestamp: 1776778392713 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.2.0-h3103d1b_0.conda + sha256: 40ccd6a589c60a4cedb2f9921dfa60ea5845b5ce323477b042b6f90218b239f6 + md5: ea75b03886981362d93bb4708ee14811 + depends: + - __osx >=11.0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libcxx >=19 + - libexpat >=2.7.5,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.86.4,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2023669 + timestamp: 1776779039314 +- pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + name: httpcore + version: 1.0.9 + sha256: 2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 + requires_dist: + - certifi + - h11>=0.16 + - anyio>=4.0,<5.0 ; extra == 'asyncio' + - h2>=3,<5 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - trio>=0.22.0,<1.0 ; extra == 'trio' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + name: httpx + version: 0.28.1 + sha256: d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad + requires_dist: + - anyio + - certifi + - httpcore==1.* + - idna + - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli' + - click==8.* ; extra == 'cli' + - pygments==2.* ; extra == 'cli' + - rich>=10,<14 ; extra == 'cli' + - h2>=3,<5 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a + md5: c80d8a3b84358cb967fa81e7075fbc8a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 12723451 + timestamp: 1773822285671 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 + md5: f1182c91c0de31a7abd40cedf6a5ebef + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 12361647 + timestamp: 1773822915649 +- pypi: https://files.pythonhosted.org/packages/6c/3c/3f62dee257eb3d6b2c1ef2a09d36d9793c7111156a73b5654d2c2305e5ce/idna-3.14-py3-none-any.whl + name: idna + version: '3.14' + sha256: e677eaf072e290f7b725f9acf0b3a2bd55f9fd6f7c70abe5f0e34823d0accf69 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + name: iniconfig + version: 2.3.0 + sha256: f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + sha256: bc231d69eb6663db0e09738fb916c5e5507147cf1ac60f364f964004e0b29bab + md5: 10909406c1b0e4b57f9f4f0eb0999af8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 1013714 + timestamp: 1774422680665 +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda + sha256: 7cbd7fda22db70c64af64c9173434a4ede58e4f220bda52a044e469aa94c65cb + md5: aaf7c3db8c7c4533deb5449d3ba1c51f + depends: + - __glibc >=2.17,<3.0.a0 + - intel-gmmlib >=22.10.0,<23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libva >=2.23.0,<3.0a0 + license: MIT + license_family: MIT + purls: [] + size: 8782375 + timestamp: 1776080148587 +- pypi: https://files.pythonhosted.org/packages/27/72/b6de8a531e0adbadd839bec301165feb1fccf00e9ff55073ba2dd20f0043/jiter-0.14.0-cp310-cp310-macosx_11_0_arm64.whl + name: jiter + version: 0.14.0 + sha256: 41eab6c09ceffb6f0fe25e214b3068146edb1eda3649ca2aee2a061029c7ba2e + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/2a/3b/4347e1d6c2a973d653bbb7a2d671a2d2426e54b52ba735b8ff0d0a29b75c/jiter-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: jiter + version: 0.14.0 + sha256: d597cd1bf6790376f3fffc7c708766e57301d99a19314824ea0ccc9c3c70e1e2 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl + name: jsonpatch + version: '1.33' + sha256: 0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade + requires_dist: + - jsonpointer>=1.9 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- pypi: https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl + name: jsonpointer + version: 3.1.1 + sha256: 8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + sha256: 41557eeadf641de6aeae49486cef30d02a6912d8da98585d687894afd65b356a + md5: 86d9cba083cd041bfbf242a01a7a1999 + constrains: + - sysroot_linux-64 ==2.28 + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1278712 + timestamp: 1765578681495 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 + md5: fb53fb07ce46a575c5d004bbc96032c2 + depends: + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1386730 + timestamp: 1769769569681 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + sha256: c0a0bf028fe7f3defcdcaa464e536cf1b202d07451e18ad83fdd169d15bef6ed + md5: e446e1822f4da8e5080a9de93474184d + depends: + - __osx >=11.0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1160828 + timestamp: 1769770119811 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 + sha256: aad2a703b9d7b038c0f745b853c6bb5f122988fe1a7a096e0e606d9cbec4eaab + md5: a8832b479f93521a9e7b5b743803be51 + depends: + - libgcc-ng >=12 + license: LGPL-2.0-only + license_family: LGPL + purls: [] + size: 508258 + timestamp: 1664996250081 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lame-3.100-h1a8c8d9_1003.tar.bz2 + sha256: f40ce7324b2cf5338b766d4cdb8e0453e4156a4f83c2f31bbfff750785de304c + md5: bff0e851d66725f78dc2fd8b032ddb7e + license: LGPL-2.0-only + license_family: LGPL + purls: [] + size: 528805 + timestamp: 1664996399305 +- pypi: https://files.pythonhosted.org/packages/1f/01/4771b7ab2af1d1aba5b710bd8f13d9225c609425214b357590a17b01be77/langchain_core-1.3.3-py3-none-any.whl + name: langchain-core + version: 1.3.3 + sha256: 18aae8506f37da7f74398492279a7d6efcee4f8e23c4c41c7af080eeb7ef7bd1 + requires_dist: + - jsonpatch>=1.33.0,<2.0.0 + - langchain-protocol>=0.0.10 + - langsmith>=0.3.45,<1.0.0 + - packaging>=23.2.0 + - pydantic>=2.7.4,<3.0.0 + - pyyaml>=5.3.0,<7.0.0 + - tenacity>=8.1.0,!=8.4.0,<10.0.0 + - typing-extensions>=4.7.0,<5.0.0 + - uuid-utils>=0.12.0,<1.0 + requires_python: '>=3.10.0,<4.0.0' +- pypi: https://files.pythonhosted.org/packages/1d/7a/9c97a7b9cbe4c5dc6a44cdb1545450c28f0c8ce89b9c1f0ee7fbad896263/langchain_protocol-0.0.15-py3-none-any.whl + name: langchain-protocol + version: 0.0.15 + sha256: 461eb794358f83d5e42635a5797799ffec7b4702314e34edf73ac21e75d3ef79 + requires_dist: + - typing-extensions>=4.7.0,<5.0.0 + requires_python: '>=3.10.0,<4.0.0' +- pypi: https://files.pythonhosted.org/packages/80/07/057dc1aa7991115fca53f1fa6573a7cc0dd296c05360c672cc67fdb6245b/langgraph-1.1.10-py3-none-any.whl + name: langgraph + version: 1.1.10 + sha256: 8a4f163f72f4401648d0c11b48ee906947d938ba8cf1f474540fe591534f0d17 + requires_dist: + - langchain-core>=1.3.0,<2 + - langgraph-checkpoint>=2.1.0,<5.0.0 + - langgraph-prebuilt>=1.0.12,<1.1.0 + - langgraph-sdk>=0.3.0,<0.4.0 + - pydantic>=2.7.4 + - xxhash>=3.5.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/19/ee/ecd3fa2e893746dde3b768daca2a4935208bc77d09445437ccfffb4a8c9b/langgraph_checkpoint-4.0.3-py3-none-any.whl + name: langgraph-checkpoint + version: 4.0.3 + sha256: b91b765712a2311a5b198760f714b7ab9b376d01c047ed78d9b9a3e80df802a3 + requires_dist: + - langchain-core>=0.2.38 + - ormsgpack>=1.12.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a3/d8/84ef22ee1cc485c4910df450108fd5e246497379522b3c6cfba896f71bf6/langgraph_checkpoint_sqlite-3.0.3-py3-none-any.whl + name: langgraph-checkpoint-sqlite + version: 3.0.3 + sha256: 02eb683a79aa6fcda7cd4de43861062a5d160dbbb990ef8a9fd76c979998a952 + requires_dist: + - aiosqlite>=0.20 + - langgraph-checkpoint>=3,<5.0.0 + - sqlite-vec>=0.1.6 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/69/ef/5ada0bef4013ef5ae53a0ca1de5736517f1076a54d313f156ca545ec65d5/langgraph_prebuilt-1.0.13-py3-none-any.whl + name: langgraph-prebuilt + version: 1.0.13 + sha256: 7055e9fad41fbd3593800aed0aea0a6e974b17f33ed51b80d3d3a031212dd7c0 + requires_dist: + - langchain-core>=1.3.1 + - langgraph-checkpoint>=2.1.0,<5.0.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/34/96/1c9f9fbfe756ddd850a2585e7f1949d8ebb97fdaa7a5eff8f45ed1314670/langgraph_sdk-0.3.14-py3-none-any.whl + name: langgraph-sdk + version: 0.3.14 + sha256: 68935bf6f4924eda92617a9e5dfb4f4281197508c648cb9d62ff083907607f9d + requires_dist: + - httpx>=0.25.2 + - orjson>=3.11.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/98/a9/51e644c1f1dbc3dd7d22dfd6412eab206d538c81e024e4f287373544bdcb/langsmith-0.8.3-py3-none-any.whl + name: langsmith + version: 0.8.3 + sha256: b2e40e308222fa0beb2dccee3b4b30bfee9062d7a4f20a3e3e93df3c51a08ab4 + requires_dist: + - httpx>=0.23.0,<1 + - orjson>=3.9.14 ; platform_python_implementation != 'PyPy' + - packaging>=23.2 + - pydantic>=2,<3 + - requests-toolbelt>=1.0.0 + - requests>=2.0.0 + - uuid-utils>=0.12.0,<1.0 + - xxhash>=3.0.0 + - zstandard>=0.23.0 + - claude-agent-sdk>=0.1.0 ; python_full_version >= '3.10' and extra == 'claude-agent-sdk' + - google-adk>=1.0.0 ; extra == 'google-adk' + - wrapt>=1.16.0 ; extra == 'google-adk' + - langsmith-pyo3>=0.1.0rc2 ; extra == 'langsmith-pyo3' + - openai-agents>=0.0.3 ; extra == 'openai-agents' + - opentelemetry-api>=1.30.0 ; extra == 'otel' + - opentelemetry-exporter-otlp-proto-http>=1.30.0 ; extra == 'otel' + - opentelemetry-sdk>=1.30.0 ; extra == 'otel' + - pytest>=7.0.0 ; extra == 'pytest' + - rich>=13.9.4 ; extra == 'pytest' + - vcrpy>=7.0.0 ; extra == 'pytest' + - websockets>=15.0 ; extra == 'sandbox' + - opentelemetry-api>=1.30.0 ; extra == 'strands-agents' + - opentelemetry-exporter-otlp-proto-http>=1.30.0 ; extra == 'strands-agents' + - opentelemetry-sdk>=1.30.0 ; extra == 'strands-agents' + - strands-agents-tools>=0.2.0 ; extra == 'strands-agents' + - strands-agents>=0.1.0 ; extra == 'strands-agents' + - vcrpy>=7.0.0 ; extra == 'vcr' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_0.conda + sha256: eb89c6c39f2f6a93db55723dbb2f6bba8c8e63e6312bf1abf13e6e9ff45849c8 + md5: f92f984b558e6e6204014b16d212b271 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 251086 + timestamp: 1778079286384 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_0.conda + sha256: d589ff5294e42576563b22bdea0860cb80b0cbe0f3852836eddaadedf6eec4ef + md5: e5ba982008c0ac1a1c0154617371bab5 + depends: + - __osx >=11.0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 212998 + timestamp: 1778079809873 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64-956.6-llvm19_1_he86490a_4.conda + sha256: d6197b4825ece12ab63097bd677294126439a1a6222c7098885aa23464ef280c + md5: 22eb76f8d98f4d3b8319d40bda9174de + depends: + - ld64_osx-arm64 956.6 llvm19_1_ha2625f7_4 + - libllvm19 >=19.1.7,<19.2.0a0 + constrains: + - cctools_osx-arm64 1030.6.3.* + - cctools 1030.6.3.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 21592 + timestamp: 1768852886875 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-956.6-llvm19_1_ha2625f7_4.conda + sha256: 4161eec579cea07903ee2fafdde6f8f9991dabd54f3ca6609a1bf75bed3dc788 + md5: eaf3d06e3a8a10dee7565e8d76ae618d + depends: + - __osx >=11.0 + - libcxx + - libllvm19 >=19.1.7,<19.2.0a0 + - sigtool-codesign + - tapi >=1600.0.11.8,<1601.0a0 + constrains: + - cctools_impl_osx-arm64 1030.6.3.* + - ld64 956.6.* + - cctools 1030.6.3.* + - clang 19.1.* + license: APSL-2.0 + license_family: Other + purls: [] + size: 1040464 + timestamp: 1768852821767 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c + md5: 18335a698559cdbcd86150a48bf54ba6 + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 728002 + timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 + md5: a752488c68f2e7c456bcbd8f16eec275 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 261513 + timestamp: 1773113328888 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.1.0-h1eee2c3_0.conda + sha256: 66e5ffd301a44da696f3efc2f25d6d94f42a9adc0db06c44ad753ab844148c51 + md5: 095e5749868adab9cae42d4b460e5443 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 164222 + timestamp: 1773114244984 +- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.4-hb700be7_0.conda + sha256: ed1eb569df9bbfcb4b451478eaba03cbd2d26efed88152ad2e4b7b7b2297ef84 + md5: c44c0485271b7b4c92dec39e9f7d096e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 858263 + timestamp: 1777157859593 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda + sha256: a7a4481a4d217a3eadea0ec489826a69070fcc3153f00443aa491ed21527d239 + md5: 6f7b4302263347698fd24565fbf11310 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libabseil-static =20260107.1=cxx17* + - abseil-cpp =20260107.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1384817 + timestamp: 1770863194876 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20260107.1-cxx17_h2062a1b_0.conda + sha256: 756611fbb8d2957a5b4635d9772bd8432cb6ddac05580a6284cca6fdc9b07fca + md5: bb65152e0d7c7178c0f1ee25692c9fd1 + depends: + - __osx >=11.0 + - libcxx >=19 + constrains: + - abseil-cpp =20260107.1 + - libabseil-static =20260107.1=cxx17* + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1229639 + timestamp: 1770863511331 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda + sha256: 035eb8b54e03e72e42ef707420f9979c7427776ea99e0f1e3c969f92eb573f19 + md5: d3be7b2870bf7aff45b12ea53165babd + depends: + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + - fribidi >=1.0.10,<2.0a0 + - libiconv >=1.18,<2.0a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - harfbuzz >=11.0.1 + license: ISC + purls: [] + size: 152179 + timestamp: 1749328931930 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libass-0.17.4-hcbd7ca7_0.conda + sha256: 079f5fdf7aace970a0db91cd2cc493c754dfdc4520d422ecec43d2561021167a + md5: 0977f4a79496437ff3a2c97d13c4c223 + depends: + - __osx >=11.0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - libzlib >=1.3.1,<2.0a0 + - fribidi >=1.0.10,<2.0a0 + - libiconv >=1.18,<2.0a0 + - harfbuzz >=11.0.1 + - libfreetype >=2.13.3 + - libfreetype6 >=2.13.3 + license: ISC + purls: [] + size: 138339 + timestamp: 1749328988096 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e + md5: 72c8fd1af66bd67bf580645b426513ed + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 79965 + timestamp: 1764017188531 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.2.0-hc919400_1.conda + sha256: a7cb9e660531cf6fbd4148cff608c85738d0b76f0975c5fc3e7d5e92840b7229 + md5: 006e7ddd8a110771134fcc4e1e3a6ffa + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 79443 + timestamp: 1764017945924 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b + md5: 366b40a69f0ad6072561c1d09301c886 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 34632 + timestamp: 1764017199083 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.2.0-hc919400_1.conda + sha256: 2eae444039826db0454b19b52a3390f63bfe24f6b3e63089778dd5a5bf48b6bf + md5: 079e88933963f3f149054eec2c487bc2 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 29452 + timestamp: 1764017979099 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d + md5: 4ffbb341c8b616aa2494b6afb26a0c5f + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 298378 + timestamp: 1764017210931 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.2.0-hc919400_1.conda + sha256: 01436c32bb41f9cb4bcf07dda647ce4e5deb8307abfc3abdc8da5317db8189d1 + md5: b2b7c8288ca1a2d71ff97a8e6a1e8883 + depends: + - __osx >=11.0 + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: [] + size: 290754 + timestamp: 1764018009077 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda + sha256: 37c41b1024d0c75da76822e3c079aabaf121618a32fe05e53a897b35a88008fc + md5: 499cd8e2d4358986dbe3b30e8fe1bf6a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 124432 + timestamp: 1774333989027 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp19.1-19.1.7-default_hf3020a7_9.conda + sha256: e05c4830a117492996bac1ad55cd7ee3e57f63b46da8a324862efbee9279ab44 + md5: ddb70ebdcbf3a44bddc2657a51faf490 + depends: + - __osx >=11.0 + - libcxx >=19.1.7 + - libllvm19 >=19.1.7,<19.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 14064699 + timestamp: 1776988581784 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.20.0-hcf29cc6_0.conda + sha256: 75963a5dd913311f59a35dbd307592f4fa754c4808aff9c33edb430c415e38eb + md5: c3cc2864f82a944bc90a7beb4d3b0e88 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 468706 + timestamp: 1777461492876 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.20.0-hd5a2499_0.conda + sha256: 38c0bc634b61e542776e97cfd15d5d41edd304d4e47c333004d2d622439b2381 + md5: 2f57b7d0c6adda88957586b7afd78438 + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.68.1,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 400568 + timestamp: 1777462251987 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.5-h55c6f16_1.conda + sha256: dddd01bd6b338221342a89530a1caffe6051a70cc8f8b1d8bb591d5447a3c603 + md5: ff484b683fecf1e875dfc7aa01d19796 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 569359 + timestamp: 1778191546305 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 + md5: 6c77a605a7a689d17d4819c0f8ac9a00 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 73490 + timestamp: 1761979956660 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda + sha256: 5e0b6961be3304a5f027a8c00bd0967fc46ae162cffb7553ff45c70f51b8314c + md5: a6130c709305cd9828b4e1bd9ba0000c + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 55420 + timestamp: 1761980066242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.3.2-ha23c83e_4.conda + sha256: d15432f07f654583978712e034d308b103a8b4650f0fdec172b5031a8af2b6c9 + md5: b26a64dfb24fef32d3330e37ce5e4f44 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: [] + size: 311420 + timestamp: 1777838991858 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdovi-3.3.2-h78f8ca3_4.conda + sha256: 0eff0b03662d30b14b6f95a930fedf19948d45b05653389f59ae964ddf92ba9c + md5: 6ece15d35513fb9543cf45310cda72e1 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 278373 + timestamp: 1777839138867 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda + sha256: c076a213bd3676cc1ef22eeff91588826273513ccc6040d9bea68bccdc849501 + md5: 9314bc5a1fe7d1044dc9dfd3ef400535 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpciaccess >=0.18,<0.19.0a0 + license: MIT + license_family: MIT + purls: [] + size: 310785 + timestamp: 1757212153962 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107691 + timestamp: 1738479560845 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda + sha256: 7fd5408d359d05a969133e47af580183fbf38e2235b562193d427bb9dad79723 + md5: c151d5eb730e9b7480e6d48c0fc44048 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd + purls: [] + size: 44840 + timestamp: 1731330973553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 112766 + timestamp: 1702146165126 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107458 + timestamp: 1702146414478 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.0-hecca717_0.conda + sha256: ea33c40977ea7a2c3658c522230058395bc2ee0d89d99f0711390b6a1ee80d12 + md5: a3b390520c563d78cc58974de95a03e5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.8.0.* + license: MIT + license_family: MIT + purls: [] + size: 77241 + timestamp: 1777846112704 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.0-hf6b4638_0.conda + sha256: f4b1cafc59afaede8fa0a2d9cf376840f1c553001acd72f6ead18bbc8ac8c49c + md5: 65466e82c09e888ca7560c11a97d5450 + depends: + - __osx >=11.0 + constrains: + - expat 2.8.0.* + license: MIT + license_family: MIT + purls: [] + size: 68789 + timestamp: 1777846180142 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 58592 + timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 + md5: 43c04d9cb46ef176bb2a4c77e324d599 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 40979 + timestamp: 1769456747661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda + sha256: e755e234236bdda3d265ae82e5b0581d259a9279e3e5b31d745dc43251ad64fb + md5: 47595b9d53054907a00d95e4d47af1d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libogg >=1.3.5,<1.4.0a0 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 424563 + timestamp: 1764526740626 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 + md5: e289f3d17880e44b633ba911d57a321b + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8049 + timestamp: 1774298163029 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_0.conda + sha256: a047a2f238362a37d484f9620e8cba29f513a933cd9eb68571ad4b270d6f8f3e + md5: f73b109d49568d5d1dda43bb147ae37f + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8091 + timestamp: 1774298691258 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d + md5: fb16b4b69e3f1dcfe79d80db8fd0c55d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 384575 + timestamp: 1774298162622 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-hdfa99f5_0.conda + sha256: ff764608e1f2839e95e2cf9b243681475f8778c36af7a42b3f78f476fdbb1dd3 + md5: e98ba7b5f09a5f450eca083d5a1c4649 + depends: + - __osx >=11.0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 338085 + timestamp: 1774298689297 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 + md5: 57736f29cc2b0ec0b6c2952d3f101b6a + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041084 + timestamp: 1778269013026 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_19.conda + sha256: 06644fa4d34d57c9e48f4d84b1256f9e5f654fdb37f43acc8a58a396952d42b7 + md5: 644058123986582db33aebd4ae2ca184 + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 404080 + timestamp: 1778273064154 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_119.conda + sha256: e1815bb11d5abe886979e95889d84310d83d078d36a3567ca67cbf57a3876d88 + md5: 7d517e32d656a8880d98c0e4fc8ddc2c + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3091520 + timestamp: 1778268364856 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 + md5: 331ee9b72b9dff570d56b1302c5ab37d + depends: + - libgcc 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27694 + timestamp: 1778269016987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + sha256: 561a42758ef25b9ce308c4e2cf56daee4f06138385a17e29a492cd928e00be6f + md5: 42bf7eca1a951735fa06c0e3c0d5c8e6 + depends: + - libgfortran5 15.2.0 h68bc16d_19 + constrains: + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27655 + timestamp: 1778269042954 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda + sha256: d4837b3b9b30af3132d260225e91ab9dde83be04c59513f500cc81050fb37486 + md5: 1ea03f87cdb1078fbc0e2b2deb63752c + depends: + - libgfortran5 15.2.0 hdae7583_19 + constrains: + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 139675 + timestamp: 1778273280875 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + sha256: 057978bb69fea29ed715a9b98adf71015c31baecc4aeb2bfc20d4fd5d83579d4 + md5: 85072b0ad177c966294f129b7c04a2d5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2483673 + timestamp: 1778269025089 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda + sha256: d0a68b7a121d115b80c169e24d1265dcc25a3fe58d107df1bbc430797e226d88 + md5: ba36d8c606a6a53fe0b8c12d47267b3d + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 599691 + timestamp: 1778273075448 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda + sha256: dc2752241fa3d9e40ce552c1942d0a4b5eeb93740c9723873f6fcf8d39ef8d2d + md5: 928b8be80851f5d8ffb016f9c81dae7a + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + - libglx 1.7.0 ha4b6fd6_2 + license: LicenseRef-libglvnd + purls: [] + size: 134712 + timestamp: 1731330998354 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_1.conda + sha256: a0899efbae2a6a9102c796c0b11ac371a3190da5afa28512eeb2879c65d1419c + md5: 6016ea5ee9e986bc683879408cc87529 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - pcre2 >=10.47,<10.48.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + size: 4754370 + timestamp: 1777904907738 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_1.conda + sha256: 0a55d29313baf76e46443c4b1ca4fa28b845df67e02b1f40f9847519d16c42fd + md5: ed49aeb876b26dbd9d20c2bb3bad1080 + depends: + - __osx >=11.0 + - pcre2 >=10.47,<10.48.0a0 + - libiconv >=1.18,<2.0a0 + - libintl >=0.25.1,<1.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + size: 4439433 + timestamp: 1777905039771 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda + sha256: 1175f8a7a0c68b7f81962699751bb6574e6f07db4c9f72825f978e3016f46850 + md5: 434ca7e50e40f4918ab701e3facd59a0 + depends: + - __glibc >=2.17,<3.0.a0 + license: LicenseRef-libglvnd + purls: [] + size: 132463 + timestamp: 1731330968309 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda + sha256: 2d35a679624a93ce5b3e9dd301fff92343db609b79f0363e6d0ceb3a6478bfa7 + md5: c8013e438185f33b13814c5c488acd5c + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_2 + - xorg-libx11 >=1.8.10,<2.0a0 + license: LicenseRef-libglvnd + purls: [] + size: 75504 + timestamp: 1731330988898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b + md5: faac990cb7aedc7f3a2224f2c9b0c26c + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 603817 + timestamp: 1778268942614 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda + sha256: 2cf160794dda62cf93539adf16d26cfd31092829f2a2757dbdd562984c1b110a + md5: 0ed3aa3e3e6bc85050d38881673a692f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2449916 + timestamp: 1765103845133 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwloc-2.12.2-default_ha3cc4f2_1000.conda + sha256: 4d03bb9bc0a813cf5e24f07e6adec3c42df2c9c36e226b71cb1dc6c7868c7d90 + md5: 38b8aa4ea25d313ad951bcb7d3cd0ad3 + depends: + - __osx >=11.0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.6 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2356224 + timestamp: 1765104113197 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + sha256: 8b70955d5e9a49d08945d4f8e2eab855b2efa5fce9cb9bc5e75d86764e6f2f38 + md5: 3a9428b74c403c71048104d38437b48c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 1435782 + timestamp: 1776989559668 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libhwy-1.4.0-ha332bbd_0.conda + sha256: 4fcad3cbec60da940312e883b7866816517acc5f9baecfe9a778de57327a1b1b + md5: 7394850583ca88325244b68b532c7a39 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 609931 + timestamp: 1776990524407 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-h23cfdf5_2.conda + sha256: de0336e800b2af9a40bdd694b03870ac4a848161b35c8a2325704f123f185f03 + md5: 4d5a7445f0b25b6a3ddbb56e790f5251 + depends: + - __osx >=11.0 + license: LGPL-2.1-only + purls: [] + size: 750379 + timestamp: 1754909073836 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda + sha256: 99d2cebcd8f84961b86784451b010f5f0a795ed1c08f1e7c76fbb3c22abf021a + md5: 5103f6a6b210a3912faf8d7db516918c + depends: + - __osx >=11.0 + - libiconv >=1.18,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 90957 + timestamp: 1751558394144 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 + md5: 6178c6f2fb254558238ef4e6c56fb782 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 633831 + timestamp: 1775962768273 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda + sha256: 17e035ae6a520ff6a6bb5dd93a4a7c3895891f4f9743bcb8c6ef607445a31cd0 + md5: b8a7544c83a67258b0e8592ec6a5d322 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 555681 + timestamp: 1775962975624 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda + sha256: 0c8a78c6a42a6e4c6de3a5e82d692f60400d43f4cc80591745f28b37daad9c70 + md5: 850f48943d6b4589800a303f0de6a816 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libhwy >=1.4.0,<1.5.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1846962 + timestamp: 1777065125966 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjxl-0.11.2-h934fa54_1.conda + sha256: 948cf1370abb58e06a7c9554838c68672ef1d78e01c3fc4e62ccfc3072579645 + md5: 05bead8980f5ae6a070117dacec38b5b + depends: + - libcxx >=19 + - __osx >=11.0 + - libhwy >=1.4.0,<1.5.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1032419 + timestamp: 1777065264956 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm19-19.1.7-h8e0c9ce_2.conda + sha256: 46f8ff3d86438c0af1bebe0c18261ce5de9878d58b4fe399a3a125670e4f0af5 + md5: d1d9b233830f6631800acc1e081a9444 + depends: + - __osx >=11.0 + - libcxx >=19 + - libxml2 + - libxml2-16 >=2.14.5 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 26914852 + timestamp: 1757353228286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 113478 + timestamp: 1775825492909 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda + sha256: 34878d87275c298f1a732c6806349125cebbf340d24c6c23727268184bba051e + md5: b1fd823b5ae54fbec272cea0811bd8a9 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 92472 + timestamp: 1775825802659 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda + sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f + md5: 2a45e7f8af083626f009645a6481f12d + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.6,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 663344 + timestamp: 1773854035739 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h8f3e76b_0.conda + sha256: 2bc7bc3978066f2c274ebcbf711850cc9ab92e023e433b9631958a098d11e10a + md5: 6ea18834adbc3b33df9bd9fb45eaf95b + depends: + - __osx >=11.0 + - c-ares >=1.34.6,<2.0a0 + - libcxx >=19 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.5,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 576526 + timestamp: 1773854624224 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33731 + timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda + sha256: ffb066ddf2e76953f92e06677021c73c85536098f1c21fcd15360dbc859e22e4 + md5: 68e52064ed3897463c0e958ab5c8f91b + depends: + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 218500 + timestamp: 1745825989535 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libogg-1.3.5-h48c0fde_1.conda + sha256: 28bd1fe20fe43da105da41b95ac201e95a1616126f287985df8e86ddebd1c3d8 + md5: 29b8b11f6d7e6bd0e76c029dcf9dd024 + depends: + - __osx >=11.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 216719 + timestamp: 1745826006052 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda + sha256: a396a2d1aa267f21c98717ac097138b32e41e4c40ae501729bded3801476eeb5 + md5: 9f0596e995efe372c470ff45c93131cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 6582302 + timestamp: 1772727204779 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-2026.0.0-h3e6d54f_1.conda + sha256: ffbd4a3c8540dfaddbdd68cf3073967a3c8faadd97d7df912f73734e53f9213e + md5: 8e140a6e2a1db294892a8da72c9afb0e + depends: + - __osx >=11.0 + - libcxx >=19 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 4515660 + timestamp: 1772716610278 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-arm-cpu-plugin-2026.0.0-h3e6d54f_1.conda + sha256: 352ebc24805cb756ef11afa5c9606b3e19da99e434afc35cddc356538b5ec49d + md5: 48f3117552be579619620f3b6768b52f + depends: + - __osx >=11.0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 8759182 + timestamp: 1772716648998 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda + sha256: 286de85805dc69ce0bd25367ae2a20c8096ddef35eb2483474eb246dacd5387e + md5: ee41df976413676f794af2785b291b0c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 114431 + timestamp: 1772727230331 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-auto-batch-plugin-2026.0.0-h2406d2e_1.conda + sha256: 1cbbf43149334ccf793f782bd0924e08e5952c667578ac33a33076a4ab54ad47 + md5: 6012967b53bf790c2ad9160c2779d7bc + depends: + - __osx >=11.0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 105710 + timestamp: 1772716704250 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.0.0-hd85de46_1.conda + sha256: 9988ed6339a5eb044ae8d079e2b22f5a310c41e49a0cf716057f30b21ef9cec2 + md5: ca025fa5c42ba94453636a2ae333de6b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 249056 + timestamp: 1772727247597 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-auto-plugin-2026.0.0-h2406d2e_1.conda + sha256: fa6c01a897ccc92998cae1e75ac65c68f311ad0834182801d5d3139ac307309f + md5: 52839e682c6bde645a9f4cdcdfc33639 + depends: + - __osx >=11.0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 213574 + timestamp: 1772716732087 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.0.0-hd41364c_1.conda + sha256: c7db498aeda5b0f36b347f4211b93b66ba108faaf54157a08bae8fa3c3af5f81 + md5: 07a23e96db38f63d9763f666b2db66aa + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 211582 + timestamp: 1772727264950 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-hetero-plugin-2026.0.0-h85cbfa6_1.conda + sha256: 18e6b6d061d27049e2a34fbd1a633209294eb700aa7eee7a3d2877ce4d45888b + md5: 77d314ff80fb262dbe061527dec60263 + depends: + - __osx >=11.0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 184975 + timestamp: 1772716757394 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.0.0-hb56ce9e_1.conda + sha256: 01a28c0bd1f205b3800e7759e30bc8e8a75836e0d5a73a745b4da42837bbb174 + md5: b43b96578573ddbcc8d084ae6e44c964 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 13173323 + timestamp: 1772727282718 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.0.0-hb56ce9e_1.conda + sha256: 720b87e1d5f1a10c577e040d4bf425072a978e925c6dfab8b1551bc848007c94 + md5: 26e8e92c90d1a22af6eac8e9507d9b8f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + - ocl-icd >=2.3.3,<3.0a0 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 11402462 + timestamp: 1772727323957 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.0.0-hb56ce9e_1.conda + sha256: df7eb2b23a1af38f2cd2281353309f2e2a04da1374ecedc7c6745c2a67ba617c + md5: 01ba8b179ac45b2b37fe2d4225dddcc7 + depends: + - __glibc >=2.17,<3.0.a0 + - level-zero >=1.28.2,<2.0a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2022.3.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1994640 + timestamp: 1772727360780 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.0.0-hd41364c_1.conda + sha256: 8e7356b0b80b3f180615e264694d6811d388b210155d419553ff64e42f78ffa0 + md5: aa002c4d343b01cdcc458c95cd071d1b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 192778 + timestamp: 1772727380069 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-ir-frontend-2026.0.0-h85cbfa6_1.conda + sha256: 166792875fe62f90a528a4931f29ea18cf74694469870e98c8772460f92fc653 + md5: c7f37a124ab9a53444d213a3db5f9747 + depends: + - __osx >=11.0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 172169 + timestamp: 1772716782643 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.0.0-h7a07914_1.conda + sha256: 35a68214201e807bd9a31f94e618cb6a5385198e89eef46dde6c122cff77da58 + md5: 218084544c2e7e78e4b8877ec37b8cdb + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1860687 + timestamp: 1772727397981 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-onnx-frontend-2026.0.0-h41365f2_1.conda + sha256: eb307ee1ad8eb47aa011d03d77995bfd1153b80893ab5880fd928093ad50cab4 + md5: 8d32df9ac0c17ba2735e26be190399f6 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1425474 + timestamp: 1772716809587 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.0.0-h7a07914_1.conda + sha256: cb37b717480207a66443a93d4342cf88210a74c0820fc0edd70e4fc791a64779 + md5: 74915e5e271ef76a89f711eff5959a75 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 684224 + timestamp: 1772727417276 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-paddle-frontend-2026.0.0-h41365f2_1.conda + sha256: e3ca93158beac502b65256ae78736889e8b40184b0dc938a1b8136ae2a0c3a4d + md5: 6c821b72c8e5b0467f3d39a33e357064 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + - libprotobuf >=6.33.5,<6.33.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 434092 + timestamp: 1772716839090 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.0.0-hecca717_1.conda + sha256: 086469e5cd8bfde48975fe8641a7d6924e3da00d75dd06c99e03a78df03a0568 + md5: 559ef86008749861a53025f669004f18 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1185558 + timestamp: 1772727435039 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-pytorch-frontend-2026.0.0-hf6b4638_1.conda + sha256: c694e5dc1bbb2ea876e65c8c33b148a24f56b5f7a60f8449ca62b159d9020709 + md5: 7cd9c1d466e5be74f5cb32f545b1b887 + depends: + - __osx >=11.0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 823766 + timestamp: 1772716865028 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.0.0-h78e8023_1.conda + sha256: 3a9a404bc9fd39e7395d49f4bd8facb58a01a31aeceabe8723a9d4f8eb5cc381 + md5: fb20f4234bc0e29af1baa13d35e36785 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - libstdcxx >=14 + - snappy >=1.2.2,<1.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1257870 + timestamp: 1772727453738 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-tensorflow-frontend-2026.0.0-hc295da0_1.conda + sha256: f680809aef09ca68d7446e3f1810ca3f3d9f744cbfe3a8d8ec9bd807f17d80fd + md5: 09d1d2b4e5648afd706e2252299087f4 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.1,<20260108.0a0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + - libprotobuf >=6.33.5,<6.33.6.0a0 + - snappy >=1.2.2,<1.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 910147 + timestamp: 1772716892527 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.0.0-hecca717_1.conda + sha256: e7cee37c92ed0b62c0458c13937b6ad66319f1879f236a31c3a67391a999f429 + md5: 0f0281435478b981f672a44d0029018c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 456585 + timestamp: 1772727473378 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenvino-tensorflow-lite-frontend-2026.0.0-hf6b4638_1.conda + sha256: 3079cdc940a7e0b84376845accefd084f9a01c37af5901083ae47cc02fd5723d + md5: 361b9eb57e71939cf3d35fa1145a6325 + depends: + - __osx >=11.0 + - libcxx >=19 + - libopenvino 2026.0.0 h3e6d54f_1 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 379126 + timestamp: 1772716918802 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda + sha256: f1061a26213b9653bbb8372bfa3f291787ca091a9a3060a10df4d5297aad74fd + md5: 2446ac1fe030c2aa6141386c1f5a6aed + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 324993 + timestamp: 1768497114401 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopus-1.6.1-h1a92334_0.conda + sha256: 5c95a5f7712f543c59083e62fc3a95efec8b7f3773fbf4542ad1fb87fbf51ff4 + md5: 7f414dd3fd1cb7a76e51fec074a9c49e + depends: + - __osx >=11.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 308000 + timestamp: 1768497248058 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda + sha256: 0bd91de9b447a2991e666f284ae8c722ffb1d84acb594dbd0c031bd656fa32b2 + md5: 70e3400cbbfa03e96dcde7fc13e38c7b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 28424 + timestamp: 1749901812541 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + sha256: 26cbbd3d7b91801826c779c3f7e87d071856d5cbe3d55b22777ca0d984fb02ed + md5: e6324dfe6c02e0736bb9235f8ef3c8a6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libdovi >=3.3.2,<4.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - lcms2 >=2.19,<3.0a0 + - shaderc >=2026.2,<2026.3.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 549348 + timestamp: 1777835950707 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libplacebo-7.360.1-h176d363_0.conda + sha256: e9b39572e2feaef496167ba9f4ab75ed3afa4c16c3aeb0bb8c71adc515a74536 + md5: 7402fdef0c155dcd18c0ff4c5853c4b2 + depends: + - __osx >=11.0 + - libcxx >=19 + - libdovi >=3.3.2,<4.0a0 + - shaderc >=2026.2,<2026.3.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - lcms2 >=2.19,<3.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 529463 + timestamp: 1777836126438 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + sha256: 377cfe037f3eeb3b1bf3ad333f724a64d32f315ee1958581fc671891d63d3f89 + md5: eba48a68a1a2b9d3c0d9511548db85db + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 317729 + timestamp: 1776315175087 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.58-h132b30e_0.conda + sha256: 66eae34546df1f098a67064970c92aa14ae7a7505091889e00468294d2882c36 + md5: 2259ae0949dbe20c0665850365109b27 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 289546 + timestamp: 1776315246750 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda + sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429 + md5: 11ac478fa72cf12c214199b8a96523f4 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3638698 + timestamp: 1769749419271 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-6.33.5-h4a5acfd_0.conda + sha256: 626852cd50690526c9eac216a9f467edd4cbb01060d0efe41b7def10b54bdb08 + md5: b839e3295b66434f20969c8b940f056a + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20260107.0,<20260108.0a0 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2713660 + timestamp: 1769748299578 +- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.1-h4c96295_0.conda + sha256: dc4698b32b2ca3fc0715d7d307476a71622bee0f2f708f9dadec8af21e1047c8 + md5: a4b87f1fbcdbb8ad32e99c2611120f2e + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.5,<3.0a0 + - harfbuzz >=13.1.1 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libxml2-16 >=2.14.6 + - pango >=1.56.4,<2.0a0 + constrains: + - __glibc >=2.17 + license: LGPL-2.1-or-later + purls: [] + size: 3474421 + timestamp: 1773814909137 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.62.1-he8aa2a2_0.conda + sha256: 4d28ad0213fca6f93624c27f13493b986ce63e05386d2ff7a2ad723c4e7c7cec + md5: 4766fd69e64e477b500eb901dbe7bb6b + depends: + - __osx >=11.0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.5,<3.0a0 + - harfbuzz >=13.1.1 + - libglib >=2.86.4,<3.0a0 + - libxml2-16 >=2.14.6 + - pango >=1.56.4,<2.0a0 + constrains: + - __osx >=11.0 + license: LGPL-2.1-or-later + purls: [] + size: 2402915 + timestamp: 1773816188394 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_19.conda + sha256: 8766de5423b0a510e2b1bdd1963d0554bdad2119f3e31d8fbd4189af434235ca + md5: 007796e5a595bbc7df4a5e1580d72e1a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14.3.0 + - libstdcxx >=14.3.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 7947790 + timestamp: 1778268494844 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsigtool-0.1.3-h98dc951_0.conda + sha256: 421f7bd7caaa945d9cd5d374cc3f01e75637ca7372a32d5e7695c825a48a30d1 + md5: c08557d00807785decafb932b5be7ef5 + depends: + - __osx >=11.0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 36416 + timestamp: 1767045062496 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda + sha256: 57cb5f92110324c04498b96563211a1bca6a74b2918b1e8df578bfed03cc32e4 + md5: 067590f061c9f6ea7e61e3b2112ed6b3 + depends: + - __glibc >=2.17,<3.0.a0 + - lame >=3.100,<3.101.0a0 + - libflac >=1.5.0,<1.6.0a0 + - libgcc >=14 + - libogg >=1.3.5,<1.4.0a0 + - libopus >=1.5.2,<2.0a0 + - libstdcxx >=14 + - libvorbis >=1.3.7,<1.4.0a0 + - mpg123 >=1.32.9,<1.33.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 355619 + timestamp: 1765181778282 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.1-h0c1763c_0.conda + sha256: 54cdcd3214313b62c2a8ee277e6f42150d9b748264c1b70d958bf735e420ef8d + md5: 7dc38adcbf71e6b38748e919e16e0dce + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 954962 + timestamp: 1777986471789 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.1-h1b79a29_0.conda + sha256: 49daec7c83e70d4efc17b813547824bc2bcf2f7256d84061d24fbfe537da9f74 + md5: 6681822ea9d362953206352371b6a904 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 920047 + timestamp: 1777987051643 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 + md5: eecce068c7e4eddeb169591baac20ac4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 304790 + timestamp: 1745608545575 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + sha256: 8bfe837221390ffc6f111ecca24fa12d4a6325da0c8d131333d63d6c37f27e0a + md5: b68e8f66b94b44aaa8de4583d3d4cc40 + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.5.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 279193 + timestamp: 1745608793272 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc + md5: 5794b3bdc38177caf969dabd3af08549 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_19 + constrains: + - libstdcxx-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5852044 + timestamp: 1778269036376 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.3.0-h9f08a49_119.conda + sha256: 1b4263aa5d8c8c659e8e38b66868f42867347e0c8941513ee77269afc00a5186 + md5: d1a866495b9654ccfef5392b8541dc58 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 20199810 + timestamp: 1778268389428 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + sha256: 0672b6b6e1791c92e8eccad58081a99d614fcf82bca5841f9dfa3c3e658f83b9 + md5: e5ce228e579726c07255dbf90dc62101 + depends: + - libstdcxx 15.2.0 h934c35e_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27776 + timestamp: 1778269074600 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda + sha256: c5008b602cb5c819f7b52d418b3ed17e1818cbbf6705b189e7ab36bb70cce3d8 + md5: 8ee3cb7f64be0e8c4787f3a4dbe024e6 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.77,<2.78.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 492799 + timestamp: 1773797095649 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 + md5: cd5a90476766d53e901500df9215e927 + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 435273 + timestamp: 1762022005702 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda + sha256: e9248077b3fa63db94caca42c8dbc6949c6f32f94d1cafad127f9005d9b1507f + md5: e2a72ab2fa54ecb6abab2b26cde93500 + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=19 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.1.0,<4.0a0 + - liblzma >=5.8.1,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + purls: [] + size: 373892 + timestamp: 1762022345545 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-hd0affe5_0.conda + sha256: 1a1e367c04d66030aa93b4d33905f7f6fbb59cfc292e816fe3e9c1e8b3f4d1e2 + md5: 2c2270f93d6f9073cbf72d821dfc7d72 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.77,<2.78.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 145087 + timestamp: 1773797108513 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + sha256: 71c8b9d5c72473752a0bb6e91b01dd209a03916cb71f36cc6a564e3a2a132d7a + md5: e179a69edd30d75c0144d7a380b88f28 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 75995 + timestamp: 1757032240102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + sha256: 3d17b7aa90610afc65356e9e6149aeac0b2df19deda73a51f0a09cf04fd89286 + md5: 56f65185b520e016d29d01657ac02c0d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 154203 + timestamp: 1770566529700 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda + sha256: 89c84f5b26028a9d0f5c4014330703e7dff73ba0c98f90103e9cef6b43a5323c + md5: d17e3fb595a9f24fa9e149239a33475d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libudev1 >=257.4 + license: LGPL-2.1-or-later + purls: [] + size: 89551 + timestamp: 1748856210075 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libusb-1.0.29-hbc156a2_0.conda + sha256: 5eee9a2bf359e474d4548874bcfc8d29ebad0d9ba015314439c256904e40aaad + md5: f6654e9e96e9d973981b3b2f898a5bfa + depends: + - __osx >=11.0 + license: LGPL-2.1-or-later + purls: [] + size: 83849 + timestamp: 1748856224950 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda + sha256: bc1b08c92626c91500fd9f26f2c797f3eb153b627d53e9c13cd167f1e12b2829 + md5: 38ffe67b78c9d4de527be8315e5ada2c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 40297 + timestamp: 1775052476770 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b + md5: 0f03292cc56bf91a077a134ea8747118 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 895108 + timestamp: 1753948278280 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689 + md5: c0d87c3c8e075daf1daf6c31b53e8083 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 421195 + timestamp: 1753948426421 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda + sha256: 255c7d00b54e26f19fad9340db080716bced1d8539606e2b8396c57abd40007c + md5: 25813fe38b3e541fc40007592f12bae5 + depends: + - __glibc >=2.17,<3.0.a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libglx >=1.7.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - wayland >=1.24.0,<2.0a0 + - wayland-protocols + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 221308 + timestamp: 1765652453244 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + sha256: ca494c99c7e5ecc1b4cd2f72b5584cef3d4ce631d23511184411abcbb90a21a5 + md5: b4ecbefe517ed0157c37f8182768271c + depends: + - libogg + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - libogg >=1.3.5,<1.4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 285894 + timestamp: 1753879378005 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libvorbis-1.3.7-h81086ad_2.conda + sha256: 95768e4eceaffb973081fd986d03da15d93aa10609ed202e6fd5ca1e490a3dce + md5: 719e7653178a09f5ca0aa05f349b41f7 + depends: + - libogg + - libcxx >=19 + - __osx >=11.0 + - libogg >=1.3.5,<1.4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 259122 + timestamp: 1753879389702 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda + sha256: 38850657dd6835613ef16b34895a54bea98bc7639db6a649c886b331635714fc + md5: 9f6b0090c3902b2c763a16f7dace7b6e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - intel-media-driver >=26.1.2,<26.2.0a0 + - libva >=2.23.0,<3.0a0 + license: MIT + license_family: MIT + purls: [] + size: 287992 + timestamp: 1772980546550 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda + sha256: 8e1119977f235b488ab32d540c018d3fd1eccefc3dd3859921a0ff555d8c10d2 + md5: 10f5008f1c89a40b09711b5a9cdbd229 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1070048 + timestamp: 1762010217363 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libvpx-1.15.2-ha759d40_0.conda + sha256: d21729b04fe101d1b2f8cdd607faacf1070abba3702db699787a3fe026eeaca6 + md5: 0d2febd301e25a48e00447b300d68f9c + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1192913 + timestamp: 1762010603501 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + sha256: a68280d57dfd29e3d53400409a39d67c4b9515097eba733aa6fe00c880620e2b + md5: 31ad065eda3c2d88f8215b1289df9c89 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + constrains: + - libvulkan-headers 1.4.341.0.* + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 199795 + timestamp: 1770077125520 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libvulkan-loader-1.4.341.0-h3feff0a_0.conda + sha256: d2790dafc9149b1acd45b9033d02cfa3f3e9ee5af97bd61e0a5718c414a0a135 + md5: 6b4c9a5b130759136a0dde0c373cb0ea + depends: + - __osx >=11.0 + - libcxx >=19 + constrains: + - libvulkan-headers 1.4.341.0.* + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 180304 + timestamp: 1770077143460 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b + md5: aea31d2e5b1091feca96fcfe945c3cf9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 429011 + timestamp: 1752159441324 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda + sha256: a4de3f371bb7ada325e1f27a4ef7bcc81b2b6a330e46fac9c2f78ac0755ea3dd + md5: e5e7d467f80da752be17796b87fe6385 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 294974 + timestamp: 1752159906788 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda + sha256: d2195b5fbcb0af1ff7b345efdf89290c279b8d1d74f325ae0ac98148c375863c + md5: 2bca1fbb221d9c3c8e3a155784bbc2e9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative + license_family: MIT + purls: [] + size: 837922 + timestamp: 1764794163823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + sha256: 3bc5551720c58591f6ea1146f7d1539c734ed1c40e7b9f5cb8cb7e900c509aba + md5: 995d8c8bad2a3cc8db14675a153dec2b + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 hca6bf5a_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 46810 + timestamp: 1776376751152 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.3-h5654f7c_0.conda + sha256: 2fe1d8de0854342ae9cabe408b476935f82f5636e153b3b497456264dc8ff3a1 + md5: 8e037d73747d6fe34e12d7bcac10cf21 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h5ef1a60_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 41102 + timestamp: 1776377119495 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + sha256: 3d44f737c5ae52d5af32682cc1530df433f401f8e58a7533926536244127572a + md5: e79d2c2f24b027aa8d5ab1b1ba3061e7 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + size: 559775 + timestamp: 1776376739004 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.3-h5ef1a60_0.conda + sha256: ff75b84cdb9e8d123db2fa694a8ac2c2059516b6cbc98ac21fb68e235d0fd354 + md5: 19edaa53885fc8205614b03da2482282 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + size: 466360 + timestamp: 1776377102261 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 + md5: d87ff7921124eccd67248aa483c23fec + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 63629 + timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 + md5: bc5a5721b6439f2f62a84f2548136082 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.2 *_2 + license: Zlib + license_family: Other + purls: [] + size: 47759 + timestamp: 1774072956767 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.5-hc7d1edf_1.conda + sha256: 2cd49562feda2bf324651050b2b035080fd635ed0f1c96c9ce7a59eff3cc0029 + md5: 8a4e2a54034b35bc6fa5bf9282913f45 + depends: + - __osx >=11.0 + constrains: + - openmp 22.1.5|22.1.5.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + purls: [] + size: 285806 + timestamp: 1778447786965 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19.1.7-h855ad52_2.conda + sha256: 09750c33b5d694c494cad9eafda56c61a62622264173d760341b49fb001afe82 + md5: 3e3ac06efc5fdc1aa675ca30bf7d53df + depends: + - __osx >=11.0 + - libllvm19 19.1.7 h8e0c9ce_2 + - llvm-tools-19 19.1.7 h91fd4e7_2 + constrains: + - llvm 19.1.7 + - llvmdev 19.1.7 + - clang-tools 19.1.7 + - clang 19.1.7 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 88390 + timestamp: 1757353535760 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-19-19.1.7-h91fd4e7_2.conda + sha256: 73f9506f7c32a448071340e73a0e8461e349082d63ecc4849e3eb2d1efc357dd + md5: 8237b150fcd7baf65258eef9a0fc76ef + depends: + - __osx >=11.0 + - libcxx >=19 + - libllvm19 19.1.7 h8e0c9ce_2 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 16376095 + timestamp: 1757353442671 +- conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda + sha256: d652c7bd4d3b6f82b0f6d063b0d8df6f54cc47531092d7ff008e780f3261bdda + md5: 33405d2a66b1411db9f7242c8b97c9e7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 513088 + timestamp: 1727801714848 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/make-4.4.1-hc9fafa5_2.conda + sha256: 90ca65e788406d9029ae23ad4bd944a8b5353ad5f59bd6ce326f980cde46f37e + md5: 9f44ef1fea0a25d6a3491c58f3af8460 + depends: + - __osx >=11.0 + license: GPL-3.0-or-later + license_family: GPL + purls: [] + size: 274048 + timestamp: 1727801725384 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + sha256: 39c4700fb3fbe403a77d8cc27352fa72ba744db487559d5d44bf8411bb4ea200 + md5: c7f302fd11eeb0987a6a5e1f3aed6a21 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: LGPL-2.1-only + license_family: LGPL + purls: [] + size: 491140 + timestamp: 1730581373280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 + md5: fc21868a1a5aacc937e7a18747acb8a5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: X11 AND BSD-3-Clause + purls: [] + size: 918956 + timestamp: 1777422145199 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda + sha256: 4ea6c620b87bd1d42bb2ccc2c87cd2483fa2d7f9e905b14c223f11ff3f4c455d + md5: 343d10ed5b44030a2f67193905aea159 + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 805509 + timestamp: 1777423252320 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.22.2-h273caaf_0.conda + sha256: 96b2973e280a867f1ad96fdb4413e4a24e2953487fd4cfce579214712b92f452 + md5: 81a057418ed2da9bd0463429d94ee140 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.28,<3.0.a0 + - openssl >=3.5.5,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - icu >=78.3,<79.0a0 + - libuv >=1.51.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 24131706 + timestamp: 1774516679471 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.22.2-h2e6c367_0.conda + sha256: 2e8b09512a2a6a196c632c3b4c51d29cf90127b5e08e165448d22eb636ca9931 + md5: 898ab7075e4194872ee28742645de9ea + depends: + - __osx >=11.0 + - libcxx >=19 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.5,<4.0a0 + - icu >=78.3,<79.0a0 + license: MIT + license_family: MIT + purls: [] + size: 16675444 + timestamp: 1774518175001 +- pypi: https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl + name: numpy + version: 2.2.6 + sha256: 8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: numpy + version: 2.2.6 + sha256: fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda + sha256: 2254dae821b286fb57c61895f2b40e3571a070910fdab79a948ff703e1ea807b + md5: 56f8947aa9d5cf37b0b3d43b83f34192 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - opencl-headers >=2024.10.24 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 106742 + timestamp: 1743700382939 +- pypi: https://files.pythonhosted.org/packages/9d/1c/5d43735b2553baae2a5e899dcbcd0670a86930d993184d72ca909bf11c9b/openai-2.36.0-py3-none-any.whl + name: openai + version: 2.36.0 + sha256: 143f6194b548dbc2c921af1f1b03b9f14c85fed8a75b5b516f5bcc11a2a50c63 + requires_dist: + - anyio>=3.5.0,<5 + - distro>=1.7.0,<2 + - httpx>=0.23.0,<1 + - jiter>=0.10.0,<1 + - pydantic>=1.9.0,<3 + - sniffio + - tqdm>4 + - typing-extensions>=4.11,<5 + - typing-extensions>=4.14,<5 + - aiohttp ; extra == 'aiohttp' + - httpx-aiohttp>=0.1.9 ; extra == 'aiohttp' + - numpy>=1 ; extra == 'datalib' + - pandas-stubs>=1.1.0.11 ; extra == 'datalib' + - pandas>=1.2.3 ; extra == 'datalib' + - websockets>=13,<16 ; extra == 'realtime' + - numpy>=2.0.2 ; extra == 'voice-helpers' + - sounddevice>=0.5.1 ; extra == 'voice-helpers' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + sha256: 8de2f0cd8a659b01abf86e7fbb8cea4f28ada62fd288429a2bbc040db1b98dd0 + md5: c930c8052d780caa41216af7de472226 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 55754 + timestamp: 1773844383536 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda + sha256: 3f231f2747a37a58471c82a9a8a80d92b7fece9f3fce10901a5ac888ce00b747 + md5: b28cf020fd2dead0ca6d113608683842 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 731471 + timestamp: 1739400677213 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openh264-2.6.0-hb5b2745_0.conda + sha256: fbea05722a8e8abfb41c989e2cec7ba6597eabe27cb6b88ff0b6443a5abb9069 + md5: 6ff0890a94972aca7cc7f8f8ef1ff142 + depends: + - __osx >=11.0 + - libcxx >=18 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 601538 + timestamp: 1739400923874 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb + md5: da1b85b6a87e141f5140bb9924cecab0 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3167099 + timestamp: 1775587756857 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.2-hd24854e_0.conda + sha256: c91bf510c130a1ea1b6ff023e28bac0ccaef869446acd805e2016f69ebdc49ea + md5: 25dcccd4f80f1638428613e0d7c9b4e1 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3106008 + timestamp: 1775587972483 +- conda: https://conda.anaconda.org/conda-forge/linux-64/opusfile-0.12-h3358134_2.conda + sha256: f4df9df880e405e5c856383f869d5b9d434f78fb7c234c9e7b099ab604fb7fc3 + md5: 5931bcae00b98f952696b6bcdd0be34b + depends: + - libgcc-ng >=12 + - libogg >=1.3.4,<1.4.0a0 + - libopus >=1.3.1,<2.0a0 + - openssl >=3.0.7,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 65901 + timestamp: 1670387479735 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/opusfile-0.12-h5643135_2.conda + sha256: 108dbee936a8e3c21d2aa5618326343844df8f1fe14067c4dc5a731d7945ecc0 + md5: e34e472ae04beeb642c5e937a2aeeebf + depends: + - libogg >=1.3.4,<1.4.0a0 + - libopus >=1.3.1,<2.0a0 + - openssl >=3.0.7,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 80128 + timestamp: 1670387790769 +- pypi: https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + name: orjson + version: 3.11.9 + sha256: 135869ef917b8704ea0a94e01620e0c05021c15c52036e4663baffe75e72f8ce + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2a/56/d54152b67b63a0b3e556cfc549d6ce84f74d7f425ddeadc6c8a74d913da7/orjson-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: orjson + version: 3.11.9 + sha256: 71f3db16e69b667b132e0f305a833d5497da302d801508cbb051ed9a9819da47 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/72/30/a436be9ce27d693d4e19fa94900028067133779f09fc45776db3f689c822/ormsgpack-1.12.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ormsgpack + version: 1.12.2 + sha256: 9e4459c3f27066beadb2b81ea48a076a417aafffff7df1d3c11c519190ed44f2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/93/fa/a91f70829ebccf6387c4946e0a1a109f6ba0d6a28d65f628bedfad94b890/ormsgpack-1.12.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + name: ormsgpack + version: 1.12.2 + sha256: c1429217f8f4d7fcb053523bbbac6bed5e981af0b85ba616e6df7cce53c19657 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl + name: packaging + version: '26.2' + sha256: 5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda + sha256: 315b52bfa6d1a820f4806f6490d472581438a28e21df175290477caec18972b0 + md5: d53ffc0edc8eabf4253508008493c5bc + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.1 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 458036 + timestamp: 1774281947855 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.56.4-hf80efc4_1.conda + sha256: b57c59cf5abb06d407b3a79017b990ca5bfb10c15a10c62fc29e113f2b12d9a9 + md5: 4b433508ebb295c05dd3d03daf27f7bb + depends: + - __osx >=11.0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.1 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 425743 + timestamp: 1774282709773 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1222481 + timestamp: 1763655398280 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-h30297fc_0.conda + sha256: 5e2e443f796f2fd92adf7978286a525fb768c34e12b1ee9ded4000a41b2894ba + md5: 9b4190c4055435ca3502070186eba53a + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 850231 + timestamp: 1763655726735 +- conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda + build_number: 7 + sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 + md5: f2cfec9406850991f4e3d960cc9e3321 + depends: + - libgcc-ng >=12 + - libxcrypt >=4.4.36 + license: GPL-1.0-or-later OR Artistic-1.0-Perl + purls: [] + size: 13344463 + timestamp: 1703310653947 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda + build_number: 7 + sha256: b0c55040d2994fd6bf2f83786561d92f72306d982d6ea12889acad24a9bf43b8 + md5: ba3cbe93f99e896765422cc5f7c3a79e + license: GPL-1.0-or-later OR Artistic-1.0-Perl + purls: [] + size: 14439531 + timestamp: 1703311335652 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a + md5: c01af13bdc553d1a8fbfff6e8db075f0 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 450960 + timestamp: 1754665235234 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda + sha256: 29c9b08a9b8b7810f9d4f159aecfd205fce051633169040005c0b7efad4bc718 + md5: 17c3d745db6ea72ae2fce17e7338547f + depends: + - __osx >=11.0 + - libcxx >=19 + license: MIT + license_family: MIT + purls: [] + size: 248045 + timestamp: 1754665282033 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h4bc722e_1009.conda + sha256: c9601efb1af5391317e04eca77c6fe4d716bf1ca1ad8da2a05d15cb7c28d7d4e + md5: 1bee70681f504ea424fb07cdb090c001 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 115175 + timestamp: 1720805894943 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-hde07d2e_1009.conda + sha256: d82f4655b2d67fe12eefe1a3eea4cd27d33fa41dbc5e9aeab5fd6d3d2c26f18a + md5: b4f41e19a8c20184eec3aaf0f0953293 + depends: + - __osx >=11.0 + - libglib >=2.80.3,<3.0a0 + - libiconv >=1.17,<2.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 49724 + timestamp: 1720806128118 +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl + name: protobuf + version: 6.33.6 + sha256: e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5c/01/a3c3ed5cd186f39e7880f8303cc51385a198a81469d53d0fdecf1f64d929/protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl + name: protobuf + version: 6.33.6 + sha256: 9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda + sha256: 23c98a5000356e173568dc5c5770b53393879f946f3ace716bbdefac2a8b23d2 + md5: b11a4c6bf6f6f44e5e143f759ffa2087 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: MIT + license_family: MIT + purls: [] + size: 118488 + timestamp: 1736601364156 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pugixml-1.15-hd3d436d_0.conda + sha256: 5ad8d036040b095f85d23c70624d3e5e1e4c00bc5cea97831542f2dcae294ec9 + md5: b9a4004e46de7aeb005304a13b35cb94 + depends: + - __osx >=11.0 + - libcxx >=18 + license: MIT + license_family: MIT + purls: [] + size: 91283 + timestamp: 1736601509593 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda + sha256: 0a0858c59805d627d02bdceee965dd84fde0aceab03a2f984325eec08d822096 + md5: b8ea447fdf62e3597cb8d2fae4eb1a90 + depends: + - __glibc >=2.17,<3.0.a0 + - dbus >=1.16.2,<2.0a0 + - libgcc >=14 + - libglib >=2.86.1,<3.0a0 + - libiconv >=1.18,<2.0a0 + - libsndfile >=1.2.2,<1.3.0a0 + - libsystemd0 >=257.10 + - libxcb >=1.17.0,<2.0a0 + constrains: + - pulseaudio 17.0 *_3 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 750785 + timestamp: 1763148198088 +- pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl + name: pydantic + version: 2.13.4 + sha256: 45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba + requires_dist: + - annotated-types>=0.6.0 + - pydantic-core==2.46.4 + - typing-extensions>=4.14.1 + - typing-inspection>=0.4.2 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl + name: pydantic-core + version: 2.46.4 + sha256: da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5 + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pydantic-core + version: 2.46.4 + sha256: 395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + name: pygments + version: 2.20.0 + sha256: 81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl + name: pytest + version: 9.0.3 + sha256: 2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9 + requires_dist: + - colorama>=0.4 ; sys_platform == 'win32' + - exceptiongroup>=1 ; python_full_version < '3.11' + - iniconfig>=1.0.1 + - packaging>=22 + - pluggy>=1.5,<2 + - pygments>=2.7.2 + - tomli>=1 ; python_full_version < '3.11' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e5/35/f8b19922b6a25bc0880171a2f1a003eaeb93657475193ab516fd87cac9da/pytest_asyncio-1.3.0-py3-none-any.whl + name: pytest-asyncio + version: 1.3.0 + sha256: 611e26147c7f77640e6d0a92a38ed17c3e9848063698d5c93d5aa7aa11cebff5 + requires_dist: + - backports-asyncio-runner>=1.1,<2 ; python_full_version < '3.11' + - pytest>=8.2,<10 + - typing-extensions>=4.12 ; python_full_version < '3.13' + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.20-h3c07f61_0_cpython.conda + sha256: 8ff2ce308faf2588b69c65b120293f59a8f2577b772b34df4e817d220b09e081 + md5: 5d4e2b00d99feacd026859b7fa239dc0 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libuuid >=2.41.3,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.10.* *_cp310 + license: Python-2.0 + purls: [] + size: 25455342 + timestamp: 1772729810280 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.20-h1b19095_0_cpython.conda + sha256: f0f6fcbb6cfdee5a6b9c03b5b94d2bbe737f3b17a618006c7685cc48992ae667 + md5: 55ec25b0d09379eb11c32dbe09ee28c4 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.4,<4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.10.* *_cp310 + license: Python-2.0 + purls: [] + size: 12468674 + timestamp: 1772730636766 +- pypi: https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl + name: pyyaml + version: 6.0.3 + sha256: 02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: 9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 + md5: d7d95fc8287ea7bf33e0e7116d2b95ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 345073 + timestamp: 1765813471974 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 + md5: f8381319127120ce51e081dce4865cf4 + depends: + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 313930 + timestamp: 1765813902568 +- pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl + name: requests + version: 2.33.1 + sha256: 4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.26,<3 + - certifi>=2023.5.7 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + name: requests-toolbelt + version: 1.0.0 + sha256: cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 + requires_dist: + - requests>=2.0.1,<3.0.0 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: scipy + version: 1.15.3 + sha256: 9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40 + requires_dist: + - numpy>=1.23.5,<2.5 + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.0,<2.1.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - mypy==1.10.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.0.292 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + - rich-click ; extra == 'dev' + - doit>=0.36.0 ; extra == 'dev' + - pydevtool ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl + name: scipy + version: 1.15.3 + sha256: ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253 + requires_dist: + - numpy>=1.23.5,<2.5 + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.0,<2.1.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - mypy==1.10.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.0.292 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + - rich-click ; extra == 'dev' + - doit>=0.36.0 ; extra == 'dev' + - pydevtool ; extra == 'dev' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/sdkroot_env_osx-arm64-26.0-ha3f98da_7.conda + sha256: fabfe031ede99898cb2b0b805f6c0d64fcc24ecdb444de3a83002d8135bf4804 + md5: 5f0ebbfea12d8e5bddff157e271fdb2f + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4971 + timestamp: 1771434195389 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda + sha256: 987ad072939fdd51c92ea8d3544b286bb240aefda329f9b03a51d9b7e777f9de + md5: cdd138897d94dc07d99afe7113a07bec + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libgl >=1.7.0,<2.0a0 + - sdl3 >=3.2.22,<4.0a0 + - libegl >=1.7.0,<2.0a0 + license: Zlib + purls: [] + size: 589145 + timestamp: 1757842881 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sdl2-2.32.56-h248ca61_0.conda + sha256: 704c5cae4bc839a18c70cbf3387d7789f1902828c79c6ddabcd34daf594f4103 + md5: 092c5b693dc6adf5f409d12f33295a2a + depends: + - libcxx >=19 + - __osx >=11.0 + - sdl3 >=3.2.22,<4.0a0 + license: Zlib + purls: [] + size: 542508 + timestamp: 1757842919681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.8-hdeec2a5_0.conda + sha256: bec327fffc08369afe4c1384a5b50cac9b38e7af42ebdf5f89628633bd980dbd + md5: 508bad511e617479f0ad60cc49fba903 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - libgl >=1.7.0,<2.0a0 + - libunwind >=1.8.3,<1.9.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + - libudev1 >=257.13 + - xorg-libxext >=1.3.7,<2.0a0 + - libusb >=1.0.29,<2.0a0 + - wayland >=1.25.0,<2.0a0 + - xorg-libxi >=1.8.2,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - liburing >=2.14,<2.15.0a0 + - xorg-libxscrnsaver >=1.2.4,<2.0a0 + - dbus >=1.16.2,<2.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libdrm >=2.4.125,<2.5.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + license: Zlib + purls: [] + size: 2146080 + timestamp: 1777693555942 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sdl3-3.4.8-h6fa9c73_0.conda + sha256: 0c15a7f3f46d175c70ca7b032cee3eee9ef602492688a79a6e734f2efc466dad + md5: 53311362c6da21e58442bfb959991455 + depends: + - __osx >=11.0 + - libcxx >=19 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libusb >=1.0.29,<2.0a0 + - dbus >=1.16.2,<2.0a0 + license: Zlib + purls: [] + size: 1561566 + timestamp: 1777693640800 +- pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl + name: setuptools + version: 82.0.1 + sha256: a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb + requires_dist: + - pytest>=6,!=8.1.* ; extra == 'test' + - virtualenv>=13.0.0 ; extra == 'test' + - wheel>=0.44.0 ; extra == 'test' + - pip>=19.1 ; extra == 'test' + - packaging>=24.2 ; extra == 'test' + - jaraco-envs>=2.2 ; extra == 'test' + - pytest-xdist>=3 ; extra == 'test' + - jaraco-path>=3.7.2 ; extra == 'test' + - build[virtualenv]>=1.0.3 ; extra == 'test' + - filelock>=3.4.0 ; extra == 'test' + - ini2toml[lite]>=0.14 ; extra == 'test' + - tomli-w>=1.0.0 ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' + - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' + - pytest-home>=0.5 ; extra == 'test' + - pytest-subprocess ; extra == 'test' + - pyproject-hooks!=1.1 ; extra == 'test' + - jaraco-test>=5.5 ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pygments-github-lexers==0.0.5 ; extra == 'doc' + - sphinx-favicon ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-reredirects ; extra == 'doc' + - sphinxcontrib-towncrier ; extra == 'doc' + - sphinx-notfound-page>=1,<2 ; extra == 'doc' + - pyproject-hooks!=1.1 ; extra == 'doc' + - towncrier<24.7 ; extra == 'doc' + - packaging>=24.2 ; extra == 'core' + - more-itertools>=8.8 ; extra == 'core' + - jaraco-text>=3.7 ; extra == 'core' + - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' + - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' + - wheel>=0.43.0 ; extra == 'core' + - jaraco-functools>=4 ; extra == 'core' + - more-itertools ; extra == 'core' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - ruff>=0.13.0 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + - mypy==1.18.* ; extra == 'type' + - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' + - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + sha256: c6e3280867e54c97996a4fedda0ab72c92d48d1d69258bddf910130df72c169d + md5: 6438976979721e2f60ec47327d8d38df + depends: + - __glibc >=2.17,<3.0.a0 + - glslang >=16,<17.0a0 + - libgcc >=14 + - libstdcxx >=14 + - spirv-tools >=2026,<2027.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 113684 + timestamp: 1777360595361 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/shaderc-2026.2-hf31e910_0.conda + sha256: 97870b15002b9e78a169681655a148049cd1763d4062114155268e84b3ef8793 + md5: 6e50dd641e624d5921f25a82aea39ae9 + depends: + - __osx >=11.0 + - glslang >=16,<17.0a0 + - libcxx >=19 + - spirv-tools >=2026,<2027.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 112111 + timestamp: 1777361061717 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-codesign-0.1.3-h98dc951_0.conda + sha256: f3d006e2441f110160a684744d90921bbedbffa247d7599d7e76b5cd048116dc + md5: ade77ad7513177297b1d75e351e136ce + depends: + - __osx >=11.0 + - libsigtool 0.1.3 h98dc951_0 + - openssl >=3.5.4,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 114331 + timestamp: 1767045086274 +- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + sha256: 48f3f6a76c34b2cfe80de9ce7f2283ecb55d5ed47367ba91e8bb8104e12b8f11 + md5: 98b6c9dc80eb87b2519b97bcf7e578dd + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 45829 + timestamp: 1762948049098 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda + sha256: cb9305ede19584115f43baecdf09a3866bfcd5bcca0d9e527bd76d9a1dbe2d8d + md5: fca4a2222994acd7f691e57f94b750c5 + depends: + - libcxx >=19 + - __osx >=11.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 38883 + timestamp: 1762948066818 +- pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + name: sniffio + version: 1.3.1 + sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/soxr-0.1.3-h0b41bf4_3.conda + sha256: 141e3364d26f162bfeae8491787c0d8796ada6c29a8cd567c1cd17c3c6b418f9 + md5: e8d261785be19b1575d23ccbbeae4ddd + depends: + - _openmp_mutex >=4.5 + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 131370 + timestamp: 1674059502792 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/soxr-0.1.3-h5008568_3.conda + sha256: b3028eab2df50ebfbfbf7e21074d4862a8aa12867272ae363c0b415c6119ebe7 + md5: 02fbc2cdd53ed18f8a4dbf36125d8b7d + depends: + - llvm-openmp >=14.0.6 + license: LGPL-2.1-or-later + purls: [] + size: 90088 + timestamp: 1674122598089 +- conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.1-hb700be7_0.conda + sha256: 003180b3a2e0c6490b1f3461cf9e0ed740b1bbf88ee4b73ee177b94bea0dc95d + md5: 8809e0bd5ec279bfe4bb6651c3ed2730 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - spirv-headers >=1.4.341.0,<1.4.341.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2296977 + timestamp: 1770089626195 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/spirv-tools-2026.1-h4ddebb9_0.conda + sha256: 8c7b7b1f7a42f1a878f08e44ee94023285eb51ba8e5042f28d61dce305b10242 + md5: 2e34a5f251c18163da9bfbb4733cc1d9 + depends: + - __osx >=11.0 + - libcxx >=19 + constrains: + - spirv-headers >=1.4.341.0,<1.4.341.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1613001 + timestamp: 1770089883327 +- pypi: https://files.pythonhosted.org/packages/6f/ad/6afd073b0f817b3e03f9e37ad626ae341805891f23c74b5292818f49ac63/sqlite_vec-0.1.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux1_x86_64.whl + name: sqlite-vec + version: 0.1.9 + sha256: 1515727990b49e79bcaf75fdee2ffc7d461f8b66905013231251f1c8938e7786 +- pypi: https://files.pythonhosted.org/packages/a4/3d/3677e0cd2f92e5ebc43cd29fbf565b75582bff1ccfa0b8327c7508e1084f/sqlite_vec-0.1.9-py3-none-macosx_11_0_arm64.whl + name: sqlite-vec + version: 0.1.9 + sha256: 1d52e30513bae4cc9778ddbf6145610434081be4c3afe57cd877893bad9f6b6c +- pypi: https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl + name: starlette + version: 1.0.0 + sha256: d3ec55e0bb321692d275455ddfd3df75fff145d009685eb40dc91fc66b03d38b + requires_dist: + - anyio>=3.6.2,<5 + - typing-extensions>=4.10.0 ; python_full_version < '3.13' + - httpx>=0.27.0,<0.29.0 ; extra == 'full' + - itsdangerous ; extra == 'full' + - jinja2 ; extra == 'full' + - python-multipart>=0.0.18 ; extra == 'full' + - pyyaml ; extra == 'full' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + sha256: 4a1d2005153b9454fc21c9bad1b539df189905be49e851ec62a6212c2e045381 + md5: 2a2170a3e5c9a354d09e4be718c43235 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2619743 + timestamp: 1769664536467 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-4.0.1-h0cb729a_0.conda + sha256: bdef3c1c4d2a396ad4f7dc64c5e9a02d4c5a21ff93ed07a33e49574de5d2d18d + md5: 8badc3bf16b62272aa2458f138223821 + depends: + - __osx >=11.0 + - libcxx >=19 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 1456245 + timestamp: 1769664727051 +- conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + sha256: c47299fe37aebb0fcf674b3be588e67e4afb86225be4b0d452c7eb75c086b851 + md5: 13dc3adbc692664cd3beabd216434749 + depends: + - __glibc >=2.28 + - kernel-headers_linux-64 4.18.0 he073ed8_9 + - tzdata + license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later + license_family: GPL + purls: [] + size: 24008591 + timestamp: 1765578833462 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1600.0.11.8-h997e182_2.conda + sha256: de6893e53664e769c1b1c4103a666d436e3d307c0eb6a09a164e749d116e80f7 + md5: 555070ad1e18b72de36e9ee7ed3236b3 + depends: + - libcxx >=19.0.0.a0 + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: NCSA + purls: [] + size: 200192 + timestamp: 1775657222120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-h51de99f_1.conda + sha256: 131a764e9c890bbe0b6c4d36e5349a6a873e09cbfc494549dd6cc85815b88ab2 + md5: 6383c1684badc0d94408b12850cf07f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libhwloc >=2.12.2,<2.12.3.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 181400 + timestamp: 1777976294854 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tbb-2023.0.0-h124206c_1.conda + sha256: 777c3cb0069134e656698c6795f72c32e4b5ea9a7bdc66eaae844b1ccd70a1a3 + md5: e9dda701eaf24dc3bfeb39ff6b65b457 + depends: + - __osx >=11.0 + - libcxx >=19 + - libhwloc >=2.12.2,<2.12.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 121971 + timestamp: 1777976847894 +- pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + name: tenacity + version: 9.1.4 + sha256: 6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 + requires_dist: + - reno ; extra == 'doc' + - sphinx ; extra == 'doc' + - pytest ; extra == 'test' + - tornado>=4.5 ; extra == 'test' + - typeguard ; extra == 'test' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac + md5: cffd3bdd58090148f4cfcd831f4b26ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3301196 + timestamp: 1769460227866 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 + md5: a9d86bc62f39b94c4661716624eb21b0 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3127137 + timestamp: 1769460817696 +- pypi: https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl + name: tomli + version: 2.4.1 + sha256: 0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + name: tqdm + version: 4.67.3 + sha256: ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf + requires_dist: + - colorama ; sys_platform == 'win32' + - importlib-metadata ; python_full_version < '3.8' + - pytest>=6 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - pytest-asyncio>=0.24 ; extra == 'dev' + - nbval ; extra == 'dev' + - requests ; extra == 'discord' + - slack-sdk ; extra == 'slack' + - requests ; extra == 'telegram' + - ipywidgets>=6 ; extra == 'notebook' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + name: typing-extensions + version: 4.15.0 + sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + name: typing-inspection + version: 0.4.2 + sha256: 4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 + requires_dist: + - typing-extensions>=4.12.0 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + purls: [] + size: 119135 + timestamp: 1767016325805 +- pypi: https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl + name: urllib3 + version: 2.7.0 + sha256: 9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 + requires_dist: + - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2d/21/a39274fba701f7ff9f1f5f4a88f9be21b50ab88d0a47e287fa6b9df70ad6/uuid_utils-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: uuid-utils + version: 0.15.0 + sha256: 493a11c466e9e670bd8f3856f0c715d9bc12d27bf0510379fbbb21a10f38e553 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ff/19/428d181d89678be61f30eb812c66f42e6dfe4f9aee911f4db4450b55459c/uuid_utils-0.15.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + name: uuid-utils + version: 0.15.0 + sha256: 87b999e827a01681015068ae54c6c6ab8076b0f8bff6b4139eabdb2cd079d267 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/31/a3/5b1562db76a5a488274b2332a97199b32d0442aca0ed193697fd47786316/uvicorn-0.46.0-py3-none-any.whl + name: uvicorn + version: 0.46.0 + sha256: bbebbcbed972d162afca128605223022bedd345b7bc7855ce66deb31487a9048 + requires_dist: + - click>=7.0 + - h11>=0.8 + - typing-extensions>=4.0 ; python_full_version < '3.11' + - colorama>=0.4 ; sys_platform == 'win32' and extra == 'standard' + - httptools>=0.6.3 ; extra == 'standard' + - python-dotenv>=0.13 ; extra == 'standard' + - pyyaml>=5.1 ; extra == 'standard' + - uvloop>=0.15.1 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' and extra == 'standard' + - watchfiles>=0.20 ; extra == 'standard' + - websockets>=10.4 ; extra == 'standard' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + sha256: ea374d57a8fcda281a0a89af0ee49a2c2e99cc4ac97cf2e2db7064e74e764bdb + md5: 996583ea9c796e5b915f7d7580b51ea6 + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 334139 + timestamp: 1773959575393 +- conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda + sha256: 9ab2c12053ea8984228dd573114ffc6d63df42c501d59fda3bf3aeb1eaa1d23e + md5: 7da1571f560d4ba3343f7f4c48a79c76 + license: MIT + license_family: MIT + purls: [] + size: 140476 + timestamp: 1765821981856 +- pypi: https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl + name: websockets + version: '16.0' + sha256: 583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: websockets + version: '16.0' + sha256: 7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 + sha256: 175315eb3d6ea1f64a6ce470be00fa2ee59980108f246d3072ab8b977cb048a5 + md5: 6c99772d483f566d59e25037fea2c4b1 + depends: + - libgcc-ng >=12 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 897548 + timestamp: 1660323080555 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/x264-1!164.3095-h57fd34a_2.tar.bz2 + sha256: debdf60bbcfa6a60201b12a1d53f36736821db281a28223a09e0685edcce105a + md5: b1f6dccde5d3a1f911960b6e567113ff + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 717038 + timestamp: 1660323292329 +- conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 + sha256: 76c7405bcf2af639971150f342550484efac18219c0203c5ee2e38b8956fe2a0 + md5: e7f6ed84d4623d52ee581325c1587a6b + depends: + - libgcc-ng >=10.3.0 + - libstdcxx-ng >=10.3.0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 3357188 + timestamp: 1646609687141 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 + sha256: 2fed6987dba7dee07bd9adc1a6f8e6c699efb851431bcb6ebad7de196e87841d + md5: b1f7f2780feffe310b068c021e8ff9b2 + depends: + - libcxx >=12.0.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1832744 + timestamp: 1646609481185 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 + md5: b56e0c8432b56decafae7e78c5f29ba5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 399291 + timestamp: 1772021302485 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b + md5: fb901ff28063514abb6046c9ec2c4a45 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 58628 + timestamp: 1734227592886 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + sha256: 277841c43a39f738927145930ff963c5ce4c4dacf66637a3d95d802a64173250 + md5: 1c74ff8c35dcadf952a16f752ca5aa49 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 27590 + timestamp: 1741896361728 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + sha256: 516d4060139dbb4de49a4dcdc6317a9353fb39ebd47789c14e6fe52de0deee42 + md5: 861fb6ccbc677bb9a9fb2468430b9c6a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 839652 + timestamp: 1770819209719 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + sha256: 6bc6ab7a90a5d8ac94c7e300cc10beb0500eeba4b99822768ca2f2ef356f731b + md5: b2895afaf55bf96a8c8282a2e47a5de0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 15321 + timestamp: 1762976464266 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a + md5: 2ccd714aa2242315acaf0a67faea780b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 32533 + timestamp: 1730908305254 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 + md5: 1dafce8548e38671bea82e3f5c6ce22f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20591 + timestamp: 1762976546182 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f + md5: 34e54f03dfea3e7a2dcf1453a85f1085 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 50326 + timestamp: 1769445253162 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + sha256: 83c4c99d60b8784a611351220452a0a85b080668188dce5dfa394b723d7b64f4 + md5: ba231da7fccf9ea1e768caf5c7099b84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20071 + timestamp: 1759282564045 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + sha256: 1a724b47d98d7880f26da40e45f01728e7638e6ec69f35a3e11f92acd05f9e7a + md5: 17dcc85db3c7886650b8908b183d6876 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 47179 + timestamp: 1727799254088 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + sha256: 80ed047a5cb30632c3dc5804c7716131d767089f65877813d4ae855ee5c9d343 + md5: e192019153591938acf7322b6459d36e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 30456 + timestamp: 1769445263457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + sha256: 044c7b3153c224c6cedd4484dd91b389d2d7fd9c776ad0f4a34f099b3389f4a1 + md5: 96d57aba173e878a2089d5638016dc5e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 33005 + timestamp: 1734229037766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda + sha256: 58e8fc1687534124832d22e102f098b5401173212ac69eb9fd96b16a3e2c8cb2 + md5: 303f7a0e9e0cd7d250bb6b952cecda90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14412 + timestamp: 1727899730073 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + sha256: 752fdaac5d58ed863bbf685bb6f98092fe1a488ea8ebb7ed7b606ccfce08637a + md5: 7bbe9a0cc0df0ac5f5a8ad6d6a11af2f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxi >=1.7.10,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 32808 + timestamp: 1727964811275 +- pypi: https://files.pythonhosted.org/packages/07/61/40f0155b0b09988eb6cdbfc52652f2f371810b0c58163208cb05667757bd/xxhash-3.7.0-cp310-cp310-macosx_11_0_arm64.whl + name: xxhash + version: 3.7.0 + sha256: 85f5c0e26d945b5bb475e0a3d95193117498130baa7619357bdc7869c2391b5a + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a4/db/268012153eb7f6bf2c8a0491fdcde11e093f166990821a2ab754fe95537d/xxhash-3.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: xxhash + version: 3.7.0 + sha256: 12c249621af6d50a05d9f10af894b404157b15819878e18f75fcbb0213a77d07 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/96/34/ef34ef77f1ee38fc8e4f9775217a613b452916e633c4f1d98f31db52c4a5/zstandard-0.25.0-cp310-cp310-macosx_11_0_arm64.whl + name: zstandard + version: 0.25.0 + sha256: 4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7 + requires_dist: + - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' + - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: zstandard + version: 0.25.0 + sha256: 4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0 + requires_dist: + - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' + - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 601375 + timestamp: 1764777111296 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 + md5: ab136e4c34e97f34fb621d2592a393d8 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 433413 + timestamp: 1764777166076 diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 0000000..bb7377a --- /dev/null +++ b/pixi.toml @@ -0,0 +1,65 @@ +[workspace] +authors = ["CyberVerse contributors"] +channels = ["conda-forge"] +name = "cyberverse" +platforms = ["osx-arm64", "linux-64"] +version = "0.1.0" + +[feature.macos-arm] +platforms = ["osx-arm64"] + +[feature.macos-arm.dependencies] +bash = ">=5.2.37,<6" +c-compiler = ">=1.11.0,<2" +ffmpeg = ">=8.1.1,<9" +git = ">=2.54.0,<3" +go = "1.25.*" +libopus = ">=1.6.1,<2" +make = ">=4.4.1,<5" +nodejs = "22.*" +opusfile = ">=0.12,<0.13" +pkg-config = ">=0.29.2,<0.30" +python = "3.10.*" +soxr = ">=0.1.3,<0.2" + +[feature.macos-arm.pypi-dependencies] +cyberverse = { path = ".", editable = true, extras = ["dev", "inference", "agent", "llm", "tts", "omni", "voice_llm", "qwen"] } + +[feature.linux-x86] +platforms = ["linux-64"] + +[feature.linux-x86.dependencies] +bash = ">=5.2.37,<6" +c-compiler = ">=1.11.0,<2" +ffmpeg = ">=8.1.1,<9" +git = ">=2.54.0,<3" +go = "1.25.*" +libopus = ">=1.6.1,<2" +make = ">=4.4.1,<5" +nodejs = "22.*" +opusfile = ">=0.12,<0.13" +pkg-config = ">=0.29.2,<0.30" +python = "3.10.*" +soxr = ">=0.1.3,<0.2" + +[feature.linux-x86.pypi-dependencies] +cyberverse = { path = ".", editable = true, extras = ["dev", "inference", "agent", "llm", "tts", "omni", "voice_llm", "qwen"] } + +[feature.common.tasks] +proto = "./scripts/generate_proto.sh" +python-test = { cmd = "python -m pytest tests/unit -v", depends-on = ["proto"] } +python-agent-test = "python -m pytest tests/unit/test_agent_runtime_llm.py tests/unit/test_persona_agent_plugin.py -q" +frontend-install = "npm install --prefix frontend" +frontend-build = "npm run --prefix frontend build" +frontend-dev = "npm run --prefix frontend dev" +agent-worker = "uvicorn agent_runtime.server:app --host 127.0.0.1 --port 8090" +go-test = { cmd = "go test ./... -v", cwd = "server", env = { CGO_ENABLED = "1", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } +go-build = { cmd = "go build -tags livekit -o ../bin/cyberverse-server ./cmd/cyberverse-server/", cwd = "server", env = { CGO_ENABLED = "1", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } +server = { cmd = "go run -tags livekit ./cmd/cyberverse-server/ --config ../cyberverse_config.yaml", cwd = "server", env = { CGO_ENABLED = "1", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } +dev = { cmd = "bash -lc 'set -euo pipefail; if [ ! -f cyberverse_config.yaml ]; then echo \"[dev] missing cyberverse_config.yaml; copy infra/cyberverse_config.example.yaml first\" >&2; exit 1; fi; if [ -f .env ]; then set -a; . ./.env; set +a; fi; export CGO_ENABLED=1; export PKG_CONFIG_PATH=\"$CONDA_PREFIX/lib/pkgconfig:${PKG_CONFIG_PATH:-}\"; export DYLD_LIBRARY_PATH=\"$CONDA_PREFIX/lib:${DYLD_LIBRARY_PATH:-}\"; export LD_LIBRARY_PATH=\"$CONDA_PREFIX/lib:${LD_LIBRARY_PATH:-}\"; pids=\"\"; cleanup() { status=${1:-$?}; trap - INT TERM EXIT; if [ -n \"$pids\" ]; then kill $pids 2>/dev/null || true; wait $pids 2>/dev/null || true; fi; exit \"$status\"; }; trap \"cleanup 130\" INT; trap \"cleanup 143\" TERM; trap \"cleanup $?\" EXIT; echo \"[dev] starting inference, server, and frontend\"; bash ./scripts/inference.sh cyberverse_config.yaml & pids=\"$pids $!\"; (cd server && go run -tags livekit ./cmd/cyberverse-server/ --config ../cyberverse_config.yaml) & pids=\"$pids $!\"; npm install --prefix frontend && npm run --prefix frontend dev & pids=\"$pids $!\"; wait -n $pids; cleanup $?'" } +test = [{ task = "python-test" }, { task = "go-test" }] +build = [{ task = "go-build" }, { task = "frontend-build" }] + +[environments] +macos-arm = { features = ["common", "macos-arm"], no-default-feature = true } +linux-x86 = { features = ["common", "linux-x86"], no-default-feature = true } diff --git a/server/internal/api/handlers.go b/server/internal/api/handlers.go index 9ee9689..0e65684 100644 --- a/server/internal/api/handlers.go +++ b/server/internal/api/handlers.go @@ -304,7 +304,14 @@ func (r *Router) handleCreateSession(w http.ResponseWriter, req *http.Request) { } func (r *Router) handleDeleteSession(w http.ResponseWriter, req *http.Request) { - id := req.PathValue("id") + r.closeSession(w, req.PathValue("id")) +} + +func (r *Router) handleCloseSession(w http.ResponseWriter, req *http.Request) { + r.closeSession(w, req.PathValue("id")) +} + +func (r *Router) closeSession(w http.ResponseWriter, id string) { if _, err := r.sessionMgr.Get(id); err != nil { writeJSON(w, http.StatusNotFound, ErrorResponse{Error: err.Error()}) return diff --git a/server/internal/api/handlers_test.go b/server/internal/api/handlers_test.go index 08f50ba..c248326 100644 --- a/server/internal/api/handlers_test.go +++ b/server/internal/api/handlers_test.go @@ -282,6 +282,25 @@ func TestDeleteSession(t *testing.T) { } } +func TestCloseSessionViaPost(t *testing.T) { + r := newTestRouter() + + req := httptest.NewRequest("POST", "/api/v1/sessions", strings.NewReader(`{"mode":"omni"}`)) + w := httptest.NewRecorder() + r.Handler().ServeHTTP(w, req) + + var resp CreateSessionResponse + json.NewDecoder(w.Body).Decode(&resp) + + req2 := httptest.NewRequest("POST", "/api/v1/sessions/"+resp.SessionID+"/close", nil) + w2 := httptest.NewRecorder() + r.Handler().ServeHTTP(w2, req2) + + if w2.Code != http.StatusNoContent { + t.Errorf("expected 204, got %d", w2.Code) + } +} + func TestDeleteSessionNotFound(t *testing.T) { r := newTestRouter() req := httptest.NewRequest("DELETE", "/api/v1/sessions/nonexistent", nil) diff --git a/server/internal/api/router.go b/server/internal/api/router.go index 53075d0..fca6588 100644 --- a/server/internal/api/router.go +++ b/server/internal/api/router.go @@ -61,6 +61,7 @@ func (r *Router) registerRoutes() { r.mux.HandleFunc("GET /api/v1/components", r.handleListComponents) r.mux.HandleFunc("POST /api/v1/sessions", r.handleCreateSession) r.mux.HandleFunc("DELETE /api/v1/sessions/{id}", r.handleDeleteSession) + r.mux.HandleFunc("POST /api/v1/sessions/{id}/close", r.handleCloseSession) r.mux.HandleFunc("POST /api/v1/sessions/{id}/message", r.handleSendMessage) r.mux.HandleFunc("GET /api/v1/sessions/{id}/tasks", r.handleListSessionTasks) r.mux.HandleFunc("GET /api/v1/sessions", r.handleListSessions) From 0343e4b0cd57d9ede567fd05de62eae67b3b01c3 Mon Sep 17 00:00:00 2001 From: Zeng Lingyu <49749136+hotwa@users.noreply.github.com> Date: Tue, 12 May 2026 21:51:07 +0800 Subject: [PATCH 2/6] fix(pixi): set go proxy for reproducible tests Configure Pixi Go tasks with GOPROXY and GOSUMDB so linux-x86 environments can download Go modules on the remote Ubuntu host.\n\nVerification:\n- pixi install -e macos-arm\n- remote pixi install -e linux-x86\n- remote pixi run -e linux-x86 python-agent-test\n- remote pixi run -e linux-x86 go-test\n- pixi run -e macos-arm go-test --- pixi.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pixi.toml b/pixi.toml index bb7377a..9f0f6f0 100644 --- a/pixi.toml +++ b/pixi.toml @@ -53,9 +53,9 @@ frontend-install = "npm install --prefix frontend" frontend-build = "npm run --prefix frontend build" frontend-dev = "npm run --prefix frontend dev" agent-worker = "uvicorn agent_runtime.server:app --host 127.0.0.1 --port 8090" -go-test = { cmd = "go test ./... -v", cwd = "server", env = { CGO_ENABLED = "1", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } -go-build = { cmd = "go build -tags livekit -o ../bin/cyberverse-server ./cmd/cyberverse-server/", cwd = "server", env = { CGO_ENABLED = "1", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } -server = { cmd = "go run -tags livekit ./cmd/cyberverse-server/ --config ../cyberverse_config.yaml", cwd = "server", env = { CGO_ENABLED = "1", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } +go-test = { cmd = "go test ./... -v", cwd = "server", env = { CGO_ENABLED = "1", GOPROXY = "https://goproxy.cn,direct", GOSUMDB = "sum.golang.google.cn", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } +go-build = { cmd = "go build -tags livekit -o ../bin/cyberverse-server ./cmd/cyberverse-server/", cwd = "server", env = { CGO_ENABLED = "1", GOPROXY = "https://goproxy.cn,direct", GOSUMDB = "sum.golang.google.cn", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } +server = { cmd = "go run -tags livekit ./cmd/cyberverse-server/ --config ../cyberverse_config.yaml", cwd = "server", env = { CGO_ENABLED = "1", GOPROXY = "https://goproxy.cn,direct", GOSUMDB = "sum.golang.google.cn", PKG_CONFIG_PATH = "$CONDA_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH", DYLD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$DYLD_LIBRARY_PATH", LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" } } dev = { cmd = "bash -lc 'set -euo pipefail; if [ ! -f cyberverse_config.yaml ]; then echo \"[dev] missing cyberverse_config.yaml; copy infra/cyberverse_config.example.yaml first\" >&2; exit 1; fi; if [ -f .env ]; then set -a; . ./.env; set +a; fi; export CGO_ENABLED=1; export PKG_CONFIG_PATH=\"$CONDA_PREFIX/lib/pkgconfig:${PKG_CONFIG_PATH:-}\"; export DYLD_LIBRARY_PATH=\"$CONDA_PREFIX/lib:${DYLD_LIBRARY_PATH:-}\"; export LD_LIBRARY_PATH=\"$CONDA_PREFIX/lib:${LD_LIBRARY_PATH:-}\"; pids=\"\"; cleanup() { status=${1:-$?}; trap - INT TERM EXIT; if [ -n \"$pids\" ]; then kill $pids 2>/dev/null || true; wait $pids 2>/dev/null || true; fi; exit \"$status\"; }; trap \"cleanup 130\" INT; trap \"cleanup 143\" TERM; trap \"cleanup $?\" EXIT; echo \"[dev] starting inference, server, and frontend\"; bash ./scripts/inference.sh cyberverse_config.yaml & pids=\"$pids $!\"; (cd server && go run -tags livekit ./cmd/cyberverse-server/ --config ../cyberverse_config.yaml) & pids=\"$pids $!\"; npm install --prefix frontend && npm run --prefix frontend dev & pids=\"$pids $!\"; wait -n $pids; cleanup $?'" } test = [{ task = "python-test" }, { task = "go-test" }] build = [{ task = "go-build" }, { task = "frontend-build" }] From 5d8ab5dcc8a39722dd27e3a4f90db9bb3b84a7de Mon Sep 17 00:00:00 2001 From: Zeng Lingyu <49749136+hotwa@users.noreply.github.com> Date: Wed, 13 May 2026 21:51:32 +0800 Subject: [PATCH 3/6] feat(memory): add Hindsight persona memory Connect Hindsight retain and recall into PersonaAgent and the standard digital-human pipeline. Add local shadow fallback, text-input TTS/avatar rendering, deploy configuration, frontend task i18n, and focused Go/Python tests. --- README.md | 14 + README.zh-CN.md | 14 + deploy/gpu/.env.example | 21 +- deploy/gpu/Dockerfile.inference | 2 +- deploy/gpu/Dockerfile.server | 1 + deploy/gpu/README.zh-CN.md | 12 +- deploy/gpu/cyberverse_config.gpu.yaml | 27 +- deploy/gpu/docker-compose.yml | 5 - ...-05-11-langgraph-agent-development-plan.md | 747 ++++++++++++++---- frontend/src/components/AvatarUpload.vue | 5 +- frontend/src/components/CharacterCard.vue | 5 +- frontend/src/components/TaskProgressCard.vue | 30 +- frontend/src/composables/useChat.ts | 52 +- frontend/src/i18n/messages.ts | 90 +++ frontend/src/pages/LaunchConfigPage.vue | 8 +- frontend/src/pages/SessionPage.vue | 36 +- frontend/src/services/api.ts | 14 + frontend/vite.config.ts | 41 +- inference/plugins/voice_llm/persona/memory.py | 386 +++++++++ .../plugins/voice_llm/persona/runtime.py | 18 +- .../voice_llm/persona/subagents/agent.py | 3 +- .../persona/subagents/default_tools.py | 2 +- .../plugins/voice_llm/persona/supervisor.py | 2 + inference/plugins/voice_llm/persona_agent.py | 209 ++++- infra/.env.example | 15 +- infra/cyberverse_config.example.yaml | 11 + pixi.lock | 174 ++-- pixi.toml | 3 +- server/internal/orchestrator/memory.go | 450 +++++++++++ server/internal/orchestrator/memory_test.go | 84 ++ server/internal/orchestrator/orchestrator.go | 149 +++- .../orchestrator/orchestrator_memory_test.go | 152 ++++ .../orchestrator_voice_recording_test.go | 50 +- tests/unit/test_hindsight_memory.py | 324 ++++++++ tests/unit/test_persona_agent_plugin.py | 255 +++++- tests/unit/test_persona_subagent_tools.py | 107 +++ 36 files changed, 3139 insertions(+), 379 deletions(-) create mode 100644 inference/plugins/voice_llm/persona/memory.py create mode 100644 server/internal/orchestrator/memory.go create mode 100644 server/internal/orchestrator/memory_test.go create mode 100644 server/internal/orchestrator/orchestrator_memory_test.go create mode 100644 tests/unit/test_hindsight_memory.py create mode 100644 tests/unit/test_persona_subagent_tools.py diff --git a/README.md b/README.md index ec7bbcb..8d8bf45 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,14 @@ pixi run -e macos-arm python-test pixi run -e macos-arm go-test ``` +After copying `infra/cyberverse_config.example.yaml` to `cyberverse_config.yaml` and configuring `.env`, you can start the local Mac-side services in one foreground process: + +```bash +pixi run -e macos-arm dev +``` + +`Ctrl+C` stops the inference process, Go server, and frontend dev server. For weak Mac hardware, keep GPU/avatar inference on the remote Ubuntu deployment and point the local config or frontend environment at that remote API. + On Linux x86_64: ```bash @@ -172,10 +180,16 @@ Edit `.env`, fill in your API keys: ``` DOUBAO_ACCESS_TOKEN=your_doubao_access_token # ByteDance Doubao omni model DOUBAO_APP_ID=your_doubao_app_id +HINDSIGHT_API_KEY=your_hindsight_api_key # Optional PersonaAgent long-term memory +HINDSIGHT_USER_TAG=openclaw # Stable cross-session memory tag ``` Doubao Voice: get **App ID** / **API Key** per [Volcengine quick start](https://www.volcengine.com/docs/6561/2119699?lang=zh) → `DOUBAO_APP_ID` / `DOUBAO_ACCESS_TOKEN`. +PersonaAgent can use Hindsight for cross-session memory when `HINDSIGHT_API_KEY` and `HINDSIGHT_USER_TAG` are set in your local `.env`. The default endpoint is `https://hindsight.lucky.jmsu.top` and the default bank is `openclaw`; override them with `HINDSIGHT_BASE_URL` and `HINDSIGHT_BANK_ID` if needed. Keep real Hindsight keys only in `.env`; do not commit them. + +For the PersonaAgent digital-human path, the required external interfaces are the realtime omni model credentials, the text LLM credentials used by local subagents, optional `ZHIHU_ACCESS_SECRET` for research tools, optional Hindsight memory credentials, and the local or remote Go/API + avatar inference endpoints. + After the stack is running, you can change these values (and other API keys / service endpoints) from the web UI at **`/settings`** instead of editing `.env` only. ### Step 4: Download model weights diff --git a/README.zh-CN.md b/README.zh-CN.md index a33532d..09fe95a 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -134,6 +134,14 @@ pixi run -e macos-arm python-test pixi run -e macos-arm go-test ``` +复制 `infra/cyberverse_config.example.yaml` 为 `cyberverse_config.yaml` 并配置 `.env` 后,可以用一个前台进程启动本地 Mac 侧服务: + +```bash +pixi run -e macos-arm dev +``` + +按 `Ctrl+C` 会停止 inference、Go server 和前端 dev server。Mac 性能较弱时,把 GPU/avatar 推理留在远程 Ubuntu 部署上,本地配置或前端环境指向远程 API 即可。 + x86_64 Linux: ```bash @@ -174,10 +182,16 @@ cp infra/.env.example .env ``` DOUBAO_ACCESS_TOKEN=your_doubao_access_token # ByteDance Doubao 语音 LLM DOUBAO_APP_ID=your_doubao_app_id +HINDSIGHT_API_KEY=your_hindsight_api_key # 可选:PersonaAgent 长期记忆 +HINDSIGHT_USER_TAG=openclaw # 跨会话稳定记忆 tag ``` 豆包语音:按 [火山引擎快速入门](https://www.volcengine.com/docs/6561/2119699?lang=zh) 获取 **App ID** / **API Key**,填入 `DOUBAO_APP_ID` / `DOUBAO_ACCESS_TOKEN`。 +PersonaAgent 在本地 `.env` 配置 `HINDSIGHT_API_KEY` 和 `HINDSIGHT_USER_TAG` 后,会使用 Hindsight 做跨会话长期记忆。默认端点是 `https://hindsight.lucky.jmsu.top`,默认 bank 是 `openclaw`;如需调整,可设置 `HINDSIGHT_BASE_URL` 与 `HINDSIGHT_BANK_ID`。真实 Hindsight key 只放本地 `.env`,不要提交到代码仓库。 + +PersonaAgent 数字人链路需要的外部接口包括:实时 omni 模型凭证、本地 subagent 使用的文本 LLM 凭证、可选的 `ZHIHU_ACCESS_SECRET` 调研工具凭证、可选的 Hindsight 记忆凭证,以及本地或远程 Go/API + avatar inference endpoint。 + 服务启动后,你也可以在 Web UI 的 **`/settings`** 页面修改这些值(以及其他 API Key / 服务端点),而不必只依赖编辑 `.env`。 ### 第 4 步:下载模型权重 diff --git a/deploy/gpu/.env.example b/deploy/gpu/.env.example index 9c335f9..135e2b1 100644 --- a/deploy/gpu/.env.example +++ b/deploy/gpu/.env.example @@ -4,13 +4,24 @@ DASHSCOPE_BASE_URL=https://dashscope-intl.aliyuncs.com/compatible-mode/v1 # Direct WebRTC TURN relay secret. Change this before opening the service. TURN_PASSWORD=replace_with_a_long_random_password -# Optional internal token shared by Go Server and Agent Worker. +# Optional Go internal task API token. Leave empty for local development; set a +# nonempty value before exposing internal task endpoints in production. AGENT_INTERNAL_TOKEN= +# Optional PersonaAgent task/search tools. +ZHIHU_ACCESS_SECRET=your_zhihu_access_secret + +# Optional PersonaAgent long-term memory. Keep real keys only in .env. +HINDSIGHT_ENABLED=true +HINDSIGHT_BASE_URL=https://hindsight.lucky.jmsu.top +HINDSIGHT_API_KEY=your_hindsight_api_key +HINDSIGHT_BANK_ID=openclaw +HINDSIGHT_USER_TAG=openclaw +HINDSIGHT_TIMEOUT_SECONDS=30 +HINDSIGHT_RECALL_MAX_RESULTS=5 +HINDSIGHT_RECALL_MAX_TOKENS=4096 +HINDSIGHT_RETAIN_MAX_CHARS=6000 + # Optional Hugging Face settings for weight download. # HF_ENDPOINT=https://hf-mirror.com # HF_TOKEN= - -# Reserved for the later long-term memory integration. -HINDSIGHT_BASE_URL= -HINDSIGHT_API_KEY= diff --git a/deploy/gpu/Dockerfile.inference b/deploy/gpu/Dockerfile.inference index e048d75..a430978 100644 --- a/deploy/gpu/Dockerfile.inference +++ b/deploy/gpu/Dockerfile.inference @@ -47,6 +47,6 @@ RUN python -m pip install --upgrade pip setuptools wheel \ HEALTHCHECK --interval=30s --timeout=5s --retries=20 --start-period=600s \ CMD python -c "import grpc; ch = grpc.insecure_channel('127.0.0.1:50051'); grpc.channel_ready_future(ch).result(timeout=3)" || exit 1 -EXPOSE 50051 8090 +EXPOSE 50051 CMD ["python", "-m", "inference.server", "--config", "/workspace/deploy/gpu/cyberverse_config.gpu.yaml"] diff --git a/deploy/gpu/Dockerfile.server b/deploy/gpu/Dockerfile.server index ad4d02c..efd8f5f 100644 --- a/deploy/gpu/Dockerfile.server +++ b/deploy/gpu/Dockerfile.server @@ -37,6 +37,7 @@ RUN set -eux; \ apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ + ffmpeg \ libopus0 \ libopusfile0 \ libsoxr0 \ diff --git a/deploy/gpu/README.zh-CN.md b/deploy/gpu/README.zh-CN.md index 4ac0066..e62cbf1 100644 --- a/deploy/gpu/README.zh-CN.md +++ b/deploy/gpu/README.zh-CN.md @@ -8,11 +8,11 @@ flowchart LR Mac["macOS Frontend / Browser"] -->|"HTTP / WebSocket / WebRTC"| API["Remote Go Server :8080"] API -->|"gRPC"| INF["Python Inference :50051"] - API -->|"HTTP task callbacks"| AGENT["Embedded LangGraph Agent Worker :8090"] - INF --> AGENT + INF --> PERSONA["PersonaAgent + LocalTaskRuntime + LangGraph subagent"] INF -->|"CUDA logical cuda:0"| GPU["Host RTX 5090 physical GPU 1"] INF -->|"DashScope realtime/text/TTS/ASR"| QWEN["Qwen / DashScope APIs"] - AGENT -. "future memory" .-> HINDSIGHT["Hindsight API"] + PERSONA -->|"recall / retain"| HINDSIGHT["Hindsight API"] + PERSONA -->|"optional tools"| ZHIHU["Zhihu API"] ``` ## GPU 选择 @@ -44,8 +44,12 @@ cp deploy/gpu/.env.example .env ```bash DASHSCOPE_API_KEY=... TURN_PASSWORD=... +HINDSIGHT_API_KEY=... +HINDSIGHT_USER_TAG=openclaw ``` +如果需要知乎任务工具,再填 `ZHIHU_ACCESS_SECRET`。真实 Hindsight / Zhihu key 只放远程 `.env`,不要提交。 + 下载 FlashHead 权重: ```bash @@ -79,7 +83,7 @@ VITE_API_BASE=http://122.205.95.186:8080/api/v1 VITE_WS_BASE=ws://122.205.95.186:8080 ``` -远程机器需要开放 TCP `8080` 和 `8443`。`50051` 和 `8090` 只在 docker compose 内部网络使用,不需要对公网开放。 +远程机器需要开放 TCP `8080` 和 `8443`。`50051` 只在 docker compose 内部网络使用,不需要对公网开放。 连通性检查: diff --git a/deploy/gpu/cyberverse_config.gpu.yaml b/deploy/gpu/cyberverse_config.gpu.yaml index 7889414..abb8ecb 100644 --- a/deploy/gpu/cyberverse_config.gpu.yaml +++ b/deploy/gpu/cyberverse_config.gpu.yaml @@ -62,13 +62,26 @@ inference: plugin_class: "inference.plugins.voice_llm.persona_agent.PersonaAgentPlugin" model_provider: "qwen_omni" checkpoint_db_path: "/workspace/data/tasks/langgraph_checkpoints.db" - - agent_worker: - enabled: true - host: "0.0.0.0" - port: 8090 - llm: - provider: "qwen" + llm: + provider: "qwen" + memory: + hindsight: + enabled: "${HINDSIGHT_ENABLED}" + base_url: "${HINDSIGHT_BASE_URL}" + api_key: "${HINDSIGHT_API_KEY}" + bank_id: "${HINDSIGHT_BANK_ID}" + user_tag: "${HINDSIGHT_USER_TAG}" + timeout_seconds: "${HINDSIGHT_TIMEOUT_SECONDS}" + recall_max_results: "${HINDSIGHT_RECALL_MAX_RESULTS}" + recall_max_tokens: "${HINDSIGHT_RECALL_MAX_TOKENS}" + retain_max_chars: "${HINDSIGHT_RETAIN_MAX_CHARS}" + tools: + zhihu: + access_secret: "${ZHIHU_ACCESS_SECRET}" + api_base: "https://developer.zhihu.com" + timeout_seconds: 30 + zhida_model: "zhida-fast-1p5" + max_agent_iterations: 100 llm: default: "qwen" diff --git a/deploy/gpu/docker-compose.yml b/deploy/gpu/docker-compose.yml index b840f8a..ba2d43a 100644 --- a/deploy/gpu/docker-compose.yml +++ b/deploy/gpu/docker-compose.yml @@ -38,9 +38,6 @@ services: - NVIDIA_VISIBLE_DEVICES=1 - NVIDIA_DRIVER_CAPABILITIES=compute,utility,video - CYBERVERSE_CONFIG_DIR=/workspace - - CYBERVERSE_SERVER_URL=http://cyberverse-server:8080/api/v1 - - AGENT_WORKER_HOST=0.0.0.0 - - AGENT_WORKER_PORT=8090 - LANGGRAPH_CHECKPOINT_DB=/workspace/data/tasks/langgraph_checkpoints.db - HF_HOME=/workspace/.hf-cache - HF_HUB_ENABLE_HF_TRANSFER=0 @@ -52,7 +49,6 @@ services: - ../../.hf-cache:/workspace/.hf-cache expose: - "50051" - - "8090" ulimits: memlock: -1 stack: 67108864 @@ -70,7 +66,6 @@ services: required: false environment: - GRPC_INFERENCE_ADDR=cyberverse-inference:50051 - - AGENT_WORKER_URL=http://cyberverse-inference:8090 volumes: - ./cyberverse_config.gpu.yaml:/app/cyberverse_config.yaml:ro - ../../data:/app/data diff --git a/docs/zh-CN/features/2026-05-11-langgraph-agent-development-plan.md b/docs/zh-CN/features/2026-05-11-langgraph-agent-development-plan.md index 98d0472..7e642b1 100644 --- a/docs/zh-CN/features/2026-05-11-langgraph-agent-development-plan.md +++ b/docs/zh-CN/features/2026-05-11-langgraph-agent-development-plan.md @@ -1,295 +1,702 @@ -# LangGraph Agent Development Plan + + + +# PersonaAgent + LocalTaskRuntime + LangGraph + Hindsight Development Plan > **For agentic workers:** REQUIRED: Use `superpowers:subagent-driven-development` if subagents are available, or `superpowers:executing-plans` to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking. -**Goal:** 在现有 `features` 分支的 PersonaAgent 和 Agent Worker 基础上,继续用 LangGraph 补齐可落地的后台任务能力。 +**Decision status:** 2026-05-13 已确认改为当前架构:`PersonaAgentPlugin + LocalTaskRuntime + LangGraph subagent + Hindsight v1`。本节是新的权威计划;下方 Appendix A 保留旧计划与 `/autoplan` 审查记录,仅作为历史背景,不应继续按旧 Agent Worker / `agent_runtime/server.py` 方向实现。 + +**Goal:** 把 Hindsight 作为 PersonaAgent 数字人长期记忆层,并围绕当前本地 `LocalTaskRuntime` 与 LangGraph subagent 路径,补齐可验证的数字人后台任务、记忆、部署和故障恢复能力。 -**Architecture:** 当前分支已经不是从零接入 LangGraph:`agent_runtime/graph.py` 已实现后台 research graph,`inference/plugins/voice_llm/persona_agent.py` 已用 PersonaAgent 包装实时 Omni provider,并用工具调用创建后台任务。后续开发应保持 Go TaskService 管状态、Python LangGraph Worker 执行任务、PersonaAgent 负责实时语音编排的边界。 +**Architecture:** 当前 `features` 分支的真实执行边界是 Python 进程内 PersonaAgent:`PersonaAgentPlugin` 负责实时对话与隐藏工具,`HindsightMemoryClient` 负责长期记忆,`PersonaSupervisor` 与 `LocalTaskRuntime` 负责本地任务调度,`persona/subagents` 负责 LangGraph 长任务执行;Go `server` 保持 session、WebSocket、API 转发、task event 投影和历史落盘职责。`agent_runtime/*` 当前视为兼容 shim,不作为新功能主入口。 -**Tech Stack:** Python 3.10+, FastAPI, LangGraph, langgraph-checkpoint-sqlite, OpenAI-compatible LLM, Go TaskService, SQLite, Vue frontend. +**Tech Stack:** Python 3.10+, httpx, LangGraph, OpenAI-compatible realtime/text LLM, Go server, Vue frontend, Pixi, Hindsight API, remote GPU/avatar inference endpoints. + +```mermaid +flowchart LR + U["User / Browser"] --> F["Vue frontend"] + F --> G["Go server: session, WebSocket, APIs"] + G --> P["Python inference: PersonaAgentPlugin"] + P --> M["HindsightMemoryClient"] + M --> H["Hindsight bank: openclaw"] + P --> S["PersonaSupervisor"] + S --> R["LocalTaskRuntime"] + R --> L["LangGraph subagent"] + L --> T["Task tools: Zhihu, report artifact"] + P --> A["Remote/avatar + realtime model endpoints"] + R --> G +``` --- ## Current Understanding -- 当前本地分支为 `features`,跟踪 `origin/features`。 -- `pyproject.toml` 的 `agent` extra 已包含 `langgraph>=0.2.0`、`langgraph-checkpoint-sqlite>=2.0.0`、`aiosqlite>=0.20`。 -- `agent_runtime/graph.py` 已有 `classify_task -> plan_task -> run_research -> draft_artifact -> finalize` 的 LangGraph research graph。 -- `agent_runtime/llm.py` 已有 OpenAI-compatible 文本 LLM 客户端,默认支持从 CyberVerse 配置读取 Qwen/OpenAI 兼容参数。 -- `agent_runtime/tools.py` 当前只有 `NullSearchTool` 和 `MockSearchTool`,真实搜索适配仍是缺口。 -- `inference/plugins/voice_llm/persona_agent.py` 已实现 Omni 包装、hidden tools、后台任务异步启动、任务终态回灌 Omni session。 -- Go 侧 `server/internal/agenttask` 已负责任务持久化、事件、artifact、worker dispatch 和取消。 -- 已有文档 `docs/zh-CN/features/2026-05-11-persona-agent-task-mvp.md` 记录了 MVP 主链路。 +- `git pull --ff-only` 在 2026-05-13 因本地与远程各有提交而拒绝快进;已通过 `git fetch` 后 `git rebase origin/features` 接入远程最新 `origin/features`。 +- 当前 `features` 本地分支在 rebase 后仍领先 `origin/features` 2 个本地提交。 +- 恢复本地未提交改动时,`inference/plugins/voice_llm/persona_agent.py` 出现一次冲突;冲突解决原则是同时保留远程 task event 并发监听逻辑与本地 Hindsight source text 记忆采集逻辑。 +- Hindsight v1 代码已经在工作区实现: + - `inference/plugins/voice_llm/persona/memory.py` + - `inference/plugins/voice_llm/persona_agent.py` + - `tests/unit/test_hindsight_memory.py` + - `tests/unit/test_persona_agent_plugin.py` + - `infra/.env.example` + - `infra/cyberverse_config.example.yaml` + - `README.md` + - `README.zh-CN.md` +- Hindsight v1 的设计边界保持最小:不改 Go API,不改 gRPC,不做 QMD,不把真实 key 写进仓库。 +- LangGraph 后续工作应围绕 `inference/plugins/voice_llm/persona/subagents/` 的现有任务路径,而不是旧 `agent_runtime/server.py`。 ## Development Assumptions -- 不重写已经存在的 PersonaAgent、TaskService 或 LangGraph MVP 主链路。 -- 短期任务类型继续聚焦 `research`,避免提前抽象多 Agent 类型。 -- 搜索能力优先通过一个真实 `SearchTool` 适配器接入,而不是把搜索逻辑写进 graph 节点。 -- checkpoint 继续使用 SQLite,先保证本地开发和单机部署稳定。 -- 前端改动如涉及用户可见文本,需要同时维护中文和英文 i18n 文案。 +- v1 只接入 PersonaAgent 数字人路径;Standard mode 暂不加长期记忆。 +- v1 使用固定 `HINDSIGHT_USER_TAG` 做跨会话隔离,不引入登录态。 +- v1 每个完成回合保存简洁 `用户: ...\n助手: ...` 文本,不额外调用 LLM 做摘要或分类。 +- Hindsight 服务异常不能阻塞主对话;recall 失败返回空记忆,retain 失败只记录 warning。 +- 真实 Hindsight key 只放本地 `.env`,不得提交;由于 key 已在聊天上下文出现,生产/长期 key 应轮换一次。 +- Go server 继续承担对外 API/WebSocket/session 职责;Python `LocalTaskRuntime` 是当前活动任务运行时,生产级持久化作为后续单独决策。 +- 前端若涉及用户可见文本,必须同时维护中文和英文 i18n。 ## File Map -- Modify: `agent_runtime/tools.py` - 增加真实搜索工具适配器,保留 `NullSearchTool` 作为默认降级。 -- Modify: `agent_runtime/server.py` - 根据配置选择 `SearchTool`,避免默认永远使用 `NullSearchTool`。 -- Modify: `agent_runtime/graph.py` - 只在需要时补充节点事件、错误路径或更清晰的状态字段。 -- Modify: `agent_runtime/llm.py` - 如有必要,收紧 JSON 输出解析和错误提示。 -- Modify: `inference/plugins/voice_llm/persona_agent.py` - 只修正 PersonaAgent 工具调用和任务回灌的明确缺陷。 -- Modify: `server/internal/agenttask/*.go` - 只在任务状态、取消、artifact API 有真实需求时小范围修改。 -- Modify: `frontend/src/i18n/messages.ts` and related task UI files - 仅当任务进度或 artifact 展示需要补齐时修改。 -- Test: `tests/unit/test_agent_runtime_*.py` - 覆盖 LangGraph、LLM、SearchTool、Callback 行为。 -- Test: `tests/unit/test_persona_agent_plugin.py` - 覆盖 PersonaAgent 工具调用、半句等待、任务回灌。 -- Test: `server/internal/agenttask/*_test.go` and `server/internal/api/*_test.go` - 覆盖 Go 任务状态和 API。 +- Keep/extend: `inference/plugins/voice_llm/persona/memory.py` - Hindsight 配置、recall、retain、错误降级和结果兼容。 +- Modify if needed: `inference/plugins/voice_llm/persona_agent.py` - PersonaAgent 隐藏记忆工具、system prompt、final 后异步 retain、task event 并发输出。 +- Modify if needed: `inference/plugins/voice_llm/persona/runtime.py` - 当前本地任务状态、事件、artifact、取消和 shutdown 行为。 +- Modify if needed: `inference/plugins/voice_llm/persona/supervisor.py` - hidden tool 路由和任务启动 ACK 语义。 +- Modify if needed: `inference/plugins/voice_llm/persona/subagents/*.py` - LangGraph 长任务、工具调用、终态 artifact 和失败路径。 +- Modify if needed: `server/internal/api/tasks.go` - 仅在任务 API/auth 明确缺口时小范围修改。 +- Modify if needed: `frontend/src/composables/useChat.ts`, `frontend/src/components/TaskProgressCard.vue`, `frontend/src/i18n/messages.ts` - 任务可见性与 i18n。 +- Config/docs: `infra/.env.example`, `infra/cyberverse_config.example.yaml`, `README.md`, `README.zh-CN.md`. +- Tests: `tests/unit/test_hindsight_memory.py`, `tests/unit/test_persona_agent_plugin.py`, Go `server/internal/*` tests. -## Chunk 1: Baseline Verification +## Chunk 0: Post-Pull Baseline -### Task 1: Verify existing LangGraph MVP behavior +### Task 0: Resolve pull/rebase state and verify no conflict markers -**Files:** -- Read: `agent_runtime/graph.py` -- Read: `agent_runtime/server.py` -- Read: `inference/plugins/voice_llm/persona_agent.py` -- Test: existing unit tests +- [x] **Step 1: Fetch and integrate latest `origin/features`** -- [ ] **Step 1: Run focused Python tests** +Completed on 2026-05-13 with `git rebase origin/features`. Fast-forward pull was not possible because local and remote branches had diverged. -Run: +- [x] **Step 2: Resolve PersonaAgent conflict** -```bash -python -m pytest tests/unit/test_agent_runtime_llm.py tests/unit/test_persona_agent_plugin.py -q -``` +Resolution keeps both: -Expected: PASS. If it fails due missing optional dependencies, install the project with `agent` extra or document the exact missing package. +- upstream task event queue / concurrent model-event handling; +- local `remember_source_text` callback used by Hindsight retain. -- [ ] **Step 2: Run focused Go task tests** +- [x] **Step 3: Verify conflict cleanup** Run: ```bash -go test ./server/internal/agenttask ./server/internal/api +rg -n "<<<<<<<|=======|>>>>>>>" inference/plugins/voice_llm/persona_agent.py +git diff --check ``` -Expected: PASS. +Result on 2026-05-13: no conflict markers and no whitespace errors. + +## Chunk 1: Hindsight v1 Closure -- [ ] **Step 3: Record current gaps** +### Task 1: Verify PersonaAgent memory path after rebase -Expected gaps: +**Files:** +- `inference/plugins/voice_llm/persona/memory.py` +- `inference/plugins/voice_llm/persona_agent.py` +- `tests/unit/test_hindsight_memory.py` +- `tests/unit/test_persona_agent_plugin.py` -- `NullSearchTool` means research artifacts cannot include live external search yet. -- Agent Worker search provider is not configuration-driven yet. -- End-to-end task flow depends on runtime config and real LLM credentials. +- [x] **Step 1: Keep Hindsight config optional** -## Chunk 2: Search Tool Adapter +Required `.env` contract: -### Task 2: Add a real configurable SearchTool +```bash +HINDSIGHT_ENABLED=true +HINDSIGHT_BASE_URL=https://hindsight.lucky.jmsu.top +HINDSIGHT_API_KEY=your_hindsight_api_key +HINDSIGHT_BANK_ID=openclaw +HINDSIGHT_USER_TAG=openclaw +HINDSIGHT_TIMEOUT_SECONDS=30 +HINDSIGHT_RECALL_MAX_RESULTS=5 +HINDSIGHT_RECALL_MAX_TOKENS=4096 +HINDSIGHT_RETAIN_MAX_CHARS=6000 +``` -**Files:** -- Modify: `agent_runtime/tools.py` -- Modify: `agent_runtime/server.py` -- Test: `tests/unit/test_agent_runtime_tools.py` +Expected: missing or placeholder key disables memory without breaking conversation. + +- [x] **Step 2: Keep recall as hidden tool** -- [ ] **Step 1: Write failing tests for provider selection** +PersonaAgent exposes `recall_memory` only when Hindsight is enabled. Realtime model should call it after complete user intent, before final answer. -Create tests that assert: +- [x] **Step 3: Keep retain nonblocking** -- default config returns `NullSearchTool`; -- explicit mock config returns deterministic mock results; -- future real provider config can be selected without changing graph code. +After assistant final response, PersonaAgent schedules retain in the background and drains/cancels tasks during shutdown. + +- [x] **Step 4: Re-run focused unit tests after pull** Run: ```bash -python -m pytest tests/unit/test_agent_runtime_tools.py -q +pixi run -e macos-arm python -m pytest tests/unit/test_hindsight_memory.py tests/unit/test_persona_agent_plugin.py -q ``` -Expected: FAIL until factory code exists. +Result on 2026-05-13: PASS with `16 passed, 1 warning`. -- [ ] **Step 2: Implement minimal factory** +- [ ] **Step 5: Manual Hindsight smoke** -Add a small factory such as `build_search_tool_from_runtime_config(config)` in `agent_runtime/tools.py`. +With local `.env` configured and without committing secrets: -Keep it simple: +1. Say: `记住我喜欢用 Pixi 管理环境。` +2. Wait for final response. +3. In a new session ask: `我之前说过我喜欢怎么管理环境吗?` -- support `provider: "null"`; -- support `provider: "mock"` for tests and local demos; -- leave real provider implementation behind one narrow class when credentials/API are known. +Expected: PersonaAgent recalls the Pixi preference naturally. If Hindsight is unavailable, normal conversation continues without memory. -- [ ] **Step 3: Wire Agent Worker dependency** +Status on 2026-05-13: Hindsight live recall smoke passed after adding local `.env`; client enabled and returned 5 recall results. Full digital-human conversation smoke still needs DashScope/Qwen and remote avatar/inference configuration. -Change `agent_runtime/server.py:get_search_tool()` or app state initialization so the worker uses the configured tool. +## Chunk 2: PersonaAgent + LocalTaskRuntime Reliability -Do not modify `agent_runtime/graph.py` for provider-specific behavior. +### Task 2: Make the active digital-human task path measurable -- [ ] **Step 4: Verify** +**Files:** +- `inference/plugins/voice_llm/persona_agent.py` +- `inference/plugins/voice_llm/persona/runtime.py` +- `inference/plugins/voice_llm/persona/supervisor.py` +- `inference/plugins/voice_llm/persona/subagents/` +- `tests/unit/test_persona_agent_plugin.py` -Run: +- [x] **Step 1: Preserve nonblocking ACK behavior** -```bash -python -m pytest tests/unit/test_agent_runtime_tools.py tests/unit/test_agent_runtime_llm.py -q -``` +Acceptance: -Expected: PASS. +- `create_task` returns accepted tool result before task completion; +- assistant final ACK happens before background task start when applicable; +- task event queue can emit progress while model stream is still open. -## Chunk 3: LangGraph Robustness +Result on 2026-05-13: `LocalTaskRuntime.create_task()` now only creates a queued task. PersonaAgent schedules `start_task()` after assistant ACK final, and tests assert ACK appears before `task.started`. -### Task 3: Make graph failure states explicit +- [x] **Step 2: Define terminal task behavior** -**Files:** -- Modify: `agent_runtime/graph.py` -- Test: `tests/unit/test_agent_runtime_graph.py` +Acceptance: -- [ ] **Step 1: Add tests for node failures** +- completed task emits `task.completed` and artifact payload if created; +- failed task emits `task.failed` with actionable reason; +- cancelled task emits `task.cancelled`; +- if model never calls terminal artifact tool, bounded iteration/timeout marks failure instead of hanging. -Cover: +Result on 2026-05-13: tests cover completed artifact flow, explicit failure, cancellation, and missing terminal report -> `task.failed`. -- LLM classification returns invalid JSON; -- search tool raises an exception; -- artifact callback fails. +- [x] **Step 3: Verify cancellation** -Expected behavior should be explicit: either emit `task.failed` through `agent_runtime/server.py` or emit a graph-level blocked event before failing. +Acceptance: -- [ ] **Step 2: Implement the smallest error-path improvement** +- user cancellation targets latest active session task; +- background work stops or becomes terminal quickly; +- digital human acknowledges cancellation in normal language. -Prefer one of these scoped options: +Result on 2026-05-13: `test_local_task_runtime_cancels_active_task` verifies latest active task cancellation emits `task.cancelled`. -- let `_run_task()` own final failure events and keep graph nodes straightforward; -- or emit a specific `research.blocked` event only for search-provider unavailable cases. +- [x] **Step 4: Add focused tests only where gaps are found** -Avoid broad retry frameworks until a concrete transient failure is observed. +Do not refactor runtime structure unless a test exposes an actual failure. -- [ ] **Step 3: Verify** +Result on 2026-05-13: added focused tests in `tests/unit/test_persona_agent_plugin.py`; no broad runtime refactor. -Run: +## Chunk 3: LangGraph Subagent Trust Path -```bash -python -m pytest tests/unit/test_agent_runtime_graph.py tests/unit/test_inference_server.py -q -``` +### Task 3: Prove one useful task before abstracting providers + +**Files:** +- `inference/plugins/voice_llm/persona/subagents/agent.py` +- `inference/plugins/voice_llm/persona/subagents/default_tools.py` +- related tests under `tests/unit/` + +- [x] **Step 1: Keep current tool path first** + +Use the existing `ZhihuToolExecutor` + `create_html_report` path for the first end-to-end task. Do not prioritize generic `SearchTool` factory until this path is trustworthy. + +Result on 2026-05-13: kept the existing Zhihu/default tool path and added tests around `create_html_report`. + +- [x] **Step 2: Add no-source and weak-source behavior** + +Acceptance: + +- no results produce a visible no-source explanation or small artifact; +- weak/conflicting results are not presented as strong facts; +- tool credential failures produce clear failed task events. + +Result on 2026-05-13: subagent prompt now requires a terminal report even on empty/tool-error results, with caveats instead of pretending weak evidence is fact. Tests verify no-source HTML artifact and clear missing `ZHIHU_ACCESS_SECRET` error. + +- [x] **Step 3: Artifact handoff** + +Acceptance: + +- generated HTML/markdown artifact has stable title, MIME type, and URL; +- frontend can open it from task event payload; +- digital human final message can reference completion without dumping the full artifact. -Expected: PASS. +Result on 2026-05-13: tests verify HTML artifact type, MIME type, source count, tool trace metadata, and `task.completed` payload with `artifact_id`. -## Chunk 4: PersonaAgent Task UX +## Chunk 4: Frontend Task Visibility And i18n -### Task 4: Confirm voice task flow stays non-blocking +### Task 4: Make task state understandable in Chinese and English **Files:** -- Modify: `inference/plugins/voice_llm/persona_agent.py` -- Test: `tests/unit/test_persona_agent_plugin.py` +- `frontend/src/composables/useChat.ts` +- `frontend/src/components/TaskProgressCard.vue` +- `frontend/src/i18n/messages.ts` -- [ ] **Step 1: Add tests before behavior changes** +- [x] **Step 1: Audit hardcoded visible strings** -Add or extend tests for: +Current task UI contains Chinese literals. If this plan touches task UI, move visible strings behind existing i18n. -- `create_task` returns an accepted tool result before task completion; -- task completion prompt is injected only after assistant acknowledgement final event; -- cancelled or failed task produces a short natural-language final prompt. +Result on 2026-05-13: task status, event titles, current step, timeline labels, artifact labels, and artifact actions now use the `task` i18n namespace in Chinese and English. -- [ ] **Step 2: Patch only failing behavior** +- [x] **Step 2: Verify task card states** -If tests expose a bug, patch only the relevant branch in `converse_stream()` or task monitoring helpers. +Acceptance: -Do not change tool schemas unless the real Omni provider requires it. +- queued/running/completed/failed/cancelled states are visible; +- artifact link is visible and stable; +- long task titles and messages do not overflow on mobile or desktop. -- [ ] **Step 3: Verify** +Result on 2026-05-13: task card still exposes queued/running/completed/failed/cancelled states and artifact links; existing CSS keeps task titles and artifact titles constrained with ellipsis. + +- [x] **Step 3: Build only if frontend changes** Run: ```bash -python -m pytest tests/unit/test_persona_agent_plugin.py -q +npm run --prefix frontend build ``` -Expected: PASS. +Result on 2026-05-13: PASS. -## Chunk 5: Frontend Task Visibility +## Chunk 5: Deployment, `.env`, And Remote GPU/Avatar Smoke -### Task 5: Ensure task events and artifacts are visible in the UI +### Task 5: Keep Mac development lightweight and remote inference explicit **Files:** -- Inspect: `frontend/src/services/api.ts` -- Inspect: `frontend/src/composables/useChat.ts` -- Inspect: `frontend/src/components/ChatPanel.vue` -- Modify: `frontend/src/i18n/messages.ts` only if new user-facing text is needed. +- `infra/.env.example` +- `infra/cyberverse_config.example.yaml` +- `README.md` +- `README.zh-CN.md` +- optional deployment docs -- [ ] **Step 1: Verify existing UI support** +- [x] **Step 1: Document required interfaces** -Check whether WebSocket `task_event` payloads are rendered and whether artifact links can be opened. +The local Mac needs: -- [ ] **Step 2: Add missing minimal UI behavior** +- OpenAI-compatible LLM URL/key/model for PersonaAgent; +- Hindsight URL/key/bank/tag for memory; +- remote avatar/inference API URL(s) if the digital-human model runs on Ubuntu GPU; +- Go server/frontend local URLs; +- optional search/Zhihu credentials for task tools. -If missing, add only: +Result on 2026-05-13: root README, Chinese README, `infra/.env.example`, `infra/cyberverse_config.example.yaml`, and `deploy/gpu/*` document PersonaAgent LLM, Hindsight, Zhihu, local API, and remote GPU/avatar endpoints. -- a task progress message in chat; -- an artifact link when `artifact_id` appears; -- Chinese and English i18n entries for new visible text. +- [x] **Step 2: Keep secrets local** -- [ ] **Step 3: Verify** +Expected: -Run: +- `.env` is ignored by git; +- docs use placeholders only; +- exposed Hindsight development key is not copied into docs or source. + +Result on 2026-05-13: secret scan found no copied real Hindsight key fragments; docs and examples use placeholders only. + +- [x] **Step 3: One-command local startup** + +Use or maintain the Pixi dev command that starts local services in the foreground and terminates child processes on `Ctrl+C`. + +Expected: ```bash -cd frontend && npm run build +pixi run -e macos-arm dev ``` -Expected: PASS. +starts the local Mac-side CyberVerse services that call remote GPU/avatar endpoints through `.env`. -## Chunk 6: End-to-End Local Run +Result on 2026-05-13: `pixi run -e macos-arm dev` is documented in README/README.zh-CN and maintained in `pixi.toml`; full service smoke still depends on local `.env` and remote GPU/avatar availability. -### Task 6: Validate local task flow +## Chunk 6: Final Verification -**Files:** -- Read/Modify only if needed: `infra/cyberverse_config.example.yaml` -- Read: `README.md` -- Read: `README.zh-CN.md` +Run after implementation or conflict resolution: -- [ ] **Step 1: Start services** +```bash +pixi run -e macos-arm python-agent-test +pixi run -e macos-arm go-test +git diff --check +``` -Run the project-standard local commands from RTK or README. Expected services: +Run frontend build only if frontend files were changed: -- inference service with PersonaAgent; -- Go server with task service enabled; -- frontend dev server. +```bash +npm run --prefix frontend build +``` -- [ ] **Step 2: Trigger a research request** +Expected: all relevant commands pass. If an external service is unavailable, document the exact missing dependency and whether the failure blocks local development. -Use a PersonaAgent session and ask a research-style request, for example: +Result on 2026-05-13: -```text -帮我查一下今天知乎有哪些热门信息,并整理成简短报告。 -``` +- `pixi run -e macos-arm python-agent-test`: PASS, `23 passed, 1 warning`. +- `pixi run -e macos-arm go-test`: PASS. +- `npm run --prefix frontend build`: PASS. +- `git diff --check`: PASS. +- YAML parse check for `infra/cyberverse_config.example.yaml` and `deploy/gpu/cyberverse_config.gpu.yaml`: PASS. +- Real Hindsight recall smoke: PASS after local `.env` was added. +- Full digital-human conversation smoke: blocked by missing DashScope/Qwen and remote avatar/inference configuration; does not block unit/local regression coverage. -Expected: +## Future Decisions -- digital human first acknowledges quickly; -- Go task event stream reports queued/running/completed; -- LangGraph creates a markdown artifact; -- final voice reply summarizes completion. +- Whether active task state should remain Python in-memory or move to Go as a durable source of truth. +- Whether QMD/local markdown memory adds value after Hindsight v1 is stable. +- Whether generic search provider abstraction is worth adding after the current Zhihu/report path is proven. +- Whether production deployment should split PersonaAgent, task runtime, and avatar inference into separate services. -- [ ] **Step 3: Verify cancellation** +--- -Start a task, then ask to stop it. +## Appendix A: Superseded Legacy Plan (Do Not Implement) -Expected: +The previous 2026-05-11 plan targeted the old Agent Worker and `agent_runtime/server.py` architecture. It has been intentionally replaced by the current PersonaAgent + LocalTaskRuntime + LangGraph subagent + Hindsight v1 plan above. Restore details are available from the two `/autoplan restore point` comments at the top of this file. -- latest active task becomes `cancelled`; -- frontend receives task event; -- PersonaAgent produces a short cancellation reply. +## GSTACK Autoplan Review Report -## Final Verification +### Phase 1: CEO Premise Review -Run: +**Scope detected** -```bash -python -m pytest tests/unit/test_agent_runtime_llm.py tests/unit/test_persona_agent_plugin.py -q -go test ./server/internal/agenttask ./server/internal/api -cd frontend && npm run build +- UI scope: yes. Task progress and artifact visibility touch `frontend/src/composables/useChat.ts`, `frontend/src/components/TaskProgressCard.vue`, and i18n copy. +- DX scope: yes. The plan depends on API wiring, Pixi startup, `.env` configuration, and repeatable local/remote runtime setup. +- Review voices: Claude subagent completed; Codex CLI review timed out after partial code inspection, but its partial finding matched the main blocker below. + +**Primary blocker** + +This plan is stale against the current branch. It describes an older Agent Worker HTTP boundary and `agent_runtime/server.py`, but the current code has moved the agent runtime in-process: + +- `agent_runtime/graph.py` is now a compatibility re-export shim. +- `agent_runtime/tools.py` is now a compatibility re-export shim. +- `agent_runtime/server.py` does not exist. +- `inference/plugins/voice_llm/persona/runtime.py` owns `LocalTaskRuntime`. +- `inference/plugins/voice_llm/persona/supervisor.py` owns PersonaAgent supervisor routing. +- `inference/plugins/voice_llm/persona/subagents/agent.py` owns the LangGraph subagent path. +- `inference/plugins/voice_llm/persona/subagents/default_tools.py` owns the default task tools, including `create_html_report`. + +The plan should not add work to the old Worker boundary unless the product decision is to reintroduce that boundary intentionally. + +**Product premise challenge** + +The strongest product objective is not "build a generic LangGraph research agent." It is: + +```text +The digital human can acknowledge a user request immediately, continue speaking naturally, +run a bounded long task through LangGraph, surface progress and artifacts, and recover from +missing tools, missing credentials, cancellation, and remote runtime failures. ``` -Expected: all commands pass, or any unavailable dependency is documented with the exact missing package and command that failed. +The avatar only matters if the user sees embodied task progress: quick acknowledgment, interruptible work, visible state, and a finished artifact that the digital human can reference. + +**Existing leverage map** + +| Area | Current code to preserve | Review note | +| --- | --- | --- | +| Persona turn handling | `PersonaAgentPlugin` | Keep voice/chat response fast; do not block avatar turns on long tasks. | +| Task runtime | `LocalTaskRuntime` | This is the current execution boundary; inject memory and Hindsight here first if needed. | +| Supervisor | `PersonaSupervisor` | Keep structured tool calls as the control path. | +| Subagent | `run_subagent`, `run_task_with_langgraph` | Add acceptance limits around iterations, terminal artifact creation, and failure paths. | +| Tools | `ZhihuToolExecutor`, `create_html_report` | Prove the existing Zhihu/report path before building a generic search provider factory. | +| Go task API | `server/internal/agenttask`, `server/internal/api/tasks.go` | Keep one task surface for frontend state. | +| Frontend | `useChat`, `TaskProgressCard.vue` | Needs i18n and remote API image URL handling if changed. | +| Environment | Pixi, `.env`, docs | Runtime keys and remote GPU endpoints must be documented as required startup inputs. | + +**Dream-state ladder** -## Notes +```text +CURRENT + Digital human can run locally wired PersonaAgent code, and remote GPU services can be reached. + Task execution exists, but the plan references older architecture and acceptance criteria are loose. + +THIS PLAN, FIXED + Plan targets current in-process PersonaAgent runtime. + One research task can be started, tracked, cancelled, completed, and displayed with an artifact. + Missing secrets, missing search results, and remote failures have explicit user-visible fallbacks. + +12-MONTH IDEAL + Digital human has durable user memory through Hindsight or a local memory layer. + Long tasks are resumable, auditable, and privacy-aware. + The avatar becomes the interaction surface for progress, interruption, and task handoff. +``` + +### Alternatives + +| Option | Decision | Reason | +| --- | --- | --- | +| Patch the old Agent Worker plan | Reject | It targets missing files and conflicts with current code. | +| Reframe around current PersonaAgent local runtime | Recommended | Lowest-risk path and matches the branch. | +| Reintroduce external Agent Worker now | Defer | Larger scope; only worth doing if deployment isolation becomes a hard requirement. | +| Build a generic search provider factory first | Defer | Current tool path already uses `ZhihuToolExecutor`; prove one real path before generalizing. | +| Add QMD local memory now | Defer | User marked QMD optional; Hindsight boundary should be specified first. | + +### Selective Expansion + +The plan should expand only in the areas that protect the user-visible digital-human workflow: + +- Update architecture sections to current PersonaAgent/LocalTaskRuntime code. +- Add explicit `.env` contract for LLM, Hindsight, Zhihu/search, remote inference, and avatar endpoints. +- Add acceptance criteria for acknowledgment latency, task event emission, artifact creation, cancellation, and no-source fallback. +- Add i18n requirements for every frontend string touched by task progress UI. +- Add a later memory-injection chunk that stores/retrieves through Hindsight at the PersonaAgent runtime boundary. + +Do not expand into a second orchestrator, a provider marketplace, or a local QMD memory system in this pass. + +### Temporal Interrogation + +| Horizon | What must be true | +| --- | --- | +| Hour 1 | Plan no longer references `agent_runtime/server.py`; all chunks point to current runtime files. | +| Hour 6 | One real PersonaAgent task can produce progress events and an artifact against configured services. | +| Day 2 | Frontend build passes with i18n task strings and clear failure/cancellation states. | +| Week 2 | Hindsight integration point is implemented or specified with privacy and deletion behavior. | +| Month 6 | Memory improves continuity without leaking private history into unrelated sessions. | + +### Dual-Voice Review + +| Voice | Result | +| --- | --- | +| Claude subagent | Strong objection: plan solves yesterday's architecture; recommended reframing around in-process PersonaAgent runtime. | +| Codex CLI | Timed out before final response; partial inspection independently found the same Agent Worker mismatch. | +| Consensus | The premise must change before detailed engineering review continues. | + +### Findings + +| Area | Risk | Finding | +| --- | --- | --- | +| Architecture | Critical | Plan targets old Agent Worker files and graph stages that are not present in the current branch. | +| Error rescue | High | Missing explicit fallbacks for missing keys, no search results, no terminal report tool call, and remote service failure. | +| Product | High | Generic research-agent framing underuses the digital human; progress, interruption, and artifact handoff are the defensible workflow. | +| Tests | High | Current plan needs tests for cancellation, failed task events, missing credentials, no terminal artifact, and frontend i18n build behavior. | +| Security | Medium | Hindsight keys, LLM keys, search credentials, and persisted memory need privacy boundaries before implementation. | +| Data flow | Medium | Artifact and character image URLs may need normalization when the Mac frontend talks to a remote API. | +| Observability | Medium | Need correlation IDs or task IDs in logs across PersonaAgent, task runtime, Go API, and frontend events. | +| Performance | Medium | `max_agent_iterations` exists, but plan should also define wall-clock bounds and first-ack latency. | +| UX | Medium | `TaskProgressCard.vue` currently contains Chinese literals; any touched visible text needs Chinese and English entries. | +| Deployment | Medium | Remote GPU service is separate from local Mac Pixi startup; `.env` must distinguish local UI/API from remote inference/avatar endpoints. | + +### Error And Rescue Registry + +| Failure | Required behavior | +| --- | --- | +| Missing LLM URL/key/model | Refuse task start with a visible configuration error; do not hang the avatar turn. | +| Missing Hindsight URL/key | Continue without durable memory if memory is optional; log degraded mode. | +| Missing Zhihu/search credentials | Return a no-tool fallback response and a failed task event with actionable reason. | +| No search results | Complete with a short no-source artifact or user-visible explanation. | +| Model never calls terminal artifact tool | Stop after bounded iterations and mark task failed with a clear reason. | +| User cancels active task | Emit `task.cancelled`, stop background work, and let the digital human acknowledge cancellation. | +| Remote GPU/avatar endpoint unavailable | Keep frontend/API alive and show connection failure without crashing task UI. | + +### Failure Modes To Test + +| Test target | Case | +| --- | --- | +| PersonaAgent runtime | Task start returns quickly while background task continues. | +| LangGraph subagent | Fake model calls tools then `create_html_report`. | +| LangGraph subagent | Fake model exceeds iteration cap without terminal report. | +| Task runtime | Exception emits `task.failed`. | +| Task runtime | Cancellation emits `task.cancelled`. | +| Frontend | Task progress and artifact UI build in Chinese and English. | +| Remote Mac-to-Ubuntu flow | Mac frontend/API can reach remote inference and avatar URLs from `.env`. | + +### Not In Scope For This Plan + +- Reintroducing a separate Agent Worker HTTP service. +- Adding a second task orchestrator beside the current Go task API and `LocalTaskRuntime`. +- Building a generic search provider marketplace. +- Implementing QMD local memory in this pass. +- Replacing PersonaAgent tool-call routing with visible JSON parsing. +- Expanding Standard mode task behavior unless required by the current PersonaAgent path. + +### Decision Audit Trail + +| Decision | Status | Reason | +| --- | --- | --- | +| Use Selective Expansion | Proposed | Existing core runtime exists, but the plan must be corrected. | +| Reframe to current in-process PersonaAgent runtime | Proposed | Matches current code and avoids resurrecting missing Worker files. | +| Prove existing Zhihu/report tool path first | Proposed | It is already wired; generic search abstraction can wait. | +| Require i18n before touching task UI | Proposed | Project guidelines require Chinese and English user-facing text. | +| Defer QMD memory | Proposed | Hindsight integration is the minimal durable-memory path requested by the user. | + +### Premise Gate + +Before Phase 2 engineering review continues, confirm the core premise: + +> Should this plan be rewritten around the current `PersonaAgentPlugin` + `LocalTaskRuntime` + LangGraph subagent architecture, instead of the old Agent Worker / `agent_runtime/server.py` architecture? + +## GSTACK Autoplan Review Report - 2026-05-13 Hindsight Implementation Pass + +### Scope + +- Review mode: Phase 1 CEO / founder premise review. +- UI scope detected: yes. The task card and chat stream are part of the visible product path. +- DX scope detected: yes. Pixi, `.env`, backend services, remote GPU/avatar URLs, and Hindsight configuration affect first-run reliability. +- Current implementation status: Hindsight v1 memory code has been added to the PersonaAgent path and unit/regression tests passed locally before this review. + +### 0A. Premises Under Review + +| Premise | Verdict | Reason | +| --- | --- | --- | +| `agent_runtime/graph.py` owns the research graph | False | Current `agent_runtime/graph.py` is a compatibility re-export shim. The active runtime is under `inference/plugins/voice_llm/persona/`. | +| `agent_runtime/server.py` is the worker/API boundary | False | That file does not exist in this branch. Continuing to target it would recreate an old boundary. | +| Search provider factory is the next highest-leverage work | Weak | The active path uses `ZhihuToolExecutor` and `create_html_report`; generic provider selection is not the current blocker. | +| Go TaskService owns active task state | Unresolved | The visible Go API exists, but `LocalTaskRuntime` currently stores task state/events/artifacts in memory. | +| Hindsight memory should be PersonaAgent-only in v1 | Strong | This matches the implemented digital-human path and avoids changing Go/gRPC protocol for the first durable-memory pass. | + +### 0B. Existing Code Leverage Map + +| Area | Current asset | How to leverage | +| --- | --- | --- | +| Digital-human brain | `inference/plugins/voice_llm/persona_agent.py` | Keep memory/tool orchestration in the active PersonaAgent path. | +| Long-term memory | `inference/plugins/voice_llm/persona/memory.py` | Use Hindsight recall before response and nonblocking retain after final response. | +| Task orchestration | `inference/plugins/voice_llm/persona/runtime.py` and `supervisor.py` | Treat `LocalTaskRuntime` as the current source of active task execution until persistence is deliberately redesigned. | +| LangGraph task work | `inference/plugins/voice_llm/persona/subagents/` | Prove the existing Zhihu-to-HTML-report workflow before abstracting providers. | +| Go/API layer | `server/internal/api/tasks.go` | Keep it as session/WebSocket/task projection layer unless a durability project is opened. | +| Frontend task UI | `frontend/src/components/TaskProgressCard.vue`, `frontend/src/composables/useChat.ts` | Make progress, cancellation, failure, and artifacts bilingual before shipping task UI changes. | + +### 0C. Dream State Delta + +```mermaid +flowchart LR + A["Current: PersonaAgent + LocalTaskRuntime + Hindsight v1 code exists, but plan text still targets old worker files"] --> B["This Plan: rewrite around current PersonaAgent runtime, smoke real Hindsight recall/retain, define task reliability gates"] + B --> C["12-Month Ideal: durable private memory, resumable long tasks, reliable avatar progress/cancel/artifact flow, clear privacy controls"] +``` -- Keep changes narrow. The current branch already contains the core LangGraph architecture. -- Do not introduce a second task orchestrator beside Go TaskService. -- Do not make PersonaAgent parse visible JSON from model text; keep structured tool calls as the control path. -- Keep code comments in English. -- For frontend text, maintain both Chinese and English translations. +### 0C-bis. Alternatives + +| Option | Decision | Why | +| --- | --- | --- | +| Rewrite around current PersonaAgent runtime | Recommended | Matches the branch and the implemented Hindsight work. | +| Preserve old Agent Worker architecture | Reject | It points at missing/obsolete files and adds avoidable architecture. | +| Move task source of truth into Go now | Defer | Important for production durability, but larger than Hindsight v1. | +| Build generic search provider factory now | Defer | The immediate product risk is task trust/reliability, not provider variety. | + +### 0D. Mode Selection + +Mode: Selective Expansion. + +Approved expansion: +- Correct the plan to current PersonaAgent runtime files. +- Keep Hindsight memory v1 in PersonaAgent only. +- Add real-service Hindsight smoke verification. +- Add explicit failure/cancel/no-source acceptance criteria. +- Treat task UI i18n and internal API auth posture as ship gates. + +Deferred: +- Separate Agent Worker service. +- QMD local memory. +- Generic search provider marketplace. +- Full Go-owned durable task persistence. + +### 0E. Temporal Interrogation + +| Horizon | What must be true | +| --- | --- | +| Hour 1 | The plan no longer targets `agent_runtime/server.py`; all chunks name the current PersonaAgent files. | +| Hour 6 | Hindsight recall/retain can be smoke-tested against configured `.env` without committing secrets. | +| Day 2 | One end-to-end digital-human task can show progress, cancellation/failure, and artifact handoff. | +| Week 2 | Memory privacy behavior, user tag isolation, and deletion/rotation guidance are documented. | +| Month 6 | Users trust the avatar because it remembers relevant context without leaking unrelated private history. | + +### 0F. Premise Gate + +Phase 2 should not continue until the user confirms the plan should be rewritten around `PersonaAgentPlugin + LocalTaskRuntime + LangGraph subagent`, with Hindsight memory v1 as the current shipped path. + +### Dual-Voice Review + +| Voice | Result | +| --- | --- | +| Claude subagent | Critical objection: the plan solves yesterday's architecture and should reframe around the in-process PersonaAgent runtime. | +| Codex CLI | Premise gate failed: `agent_runtime/graph.py` and `tools.py` are shims, `agent_runtime/server.py` is absent, and the active runtime is `persona/runtime.py`. | +| Consensus | Do not implement the old plan as written. Rewrite the plan around the current branch and prove one real digital-human task/memory flow. | + +### Consensus Dimensions + +| Dimension | Result | +| --- | --- | +| Architecture | Current plan is stale; active orchestration is in-process PersonaAgent, not old Worker files. | +| Product | The differentiated product is embodied long-running work with memory, progress, interruption, and artifact handoff. | +| Scope | Hindsight v1 and task reliability are appropriate; search-provider abstraction is premature. | +| Risk | Persistence, auth, privacy, and weak/no-source task outcomes need explicit treatment. | +| UX | Task UI must be bilingual and measurable on first ACK, progress, cancel, failure, and artifact visibility. | +| DX | `.env` examples and Pixi commands are useful, but live smoke commands and remote endpoint assumptions need to be explicit. | + +### Required Review Sections + +1. Architecture: rewrite around `PersonaAgentPlugin`, `HindsightMemoryClient`, `LocalTaskRuntime`, `PersonaSupervisor`, and `run_task_with_langgraph`. Treat `agent_runtime/*` as compatibility surface unless proven otherwise. +2. Error/rescue: Hindsight failure is correctly designed as nonblocking, but task flow still needs acceptance behavior for missing credentials, no sources, model never producing an artifact, cancellation, and remote avatar/GPU outage. +3. Product: a generic research agent is not enough. The product promise is a digital human that remembers, acknowledges quickly, works in the background, and returns a trustworthy artifact. +4. Scope: keep v1 narrow: PersonaAgent memory plus one reliable task path. Defer QMD, new Go protocol, and provider marketplace. +5. Alternatives: do not add a SearchTool factory before proving the current Zhihu/report tool path and source-quality behavior. +6. Security/privacy: never commit Hindsight keys; rotate the exposed development key; document user tag isolation, retention, and production `AGENT_INTERNAL_TOKEN` expectations. +7. Data flow: user turn -> Hindsight recall -> realtime model/tool loop -> final assistant text -> async retain; task events/artifacts flow from Python runtime to Go/WebSocket/frontend. +8. Observability: add task IDs and memory operation warnings to logs; later add metrics for recall latency, retain failure, task terminal status, and artifact creation. +9. Performance: recall adds latency before response. Keep timeout/budget bounded and only force recall on complete user intent, not partial speech. +10. Deployment/DX: `.env` should distinguish local Mac services, remote GPU/avatar services, LLM endpoint, and Hindsight endpoint. Provide a smoke path that does not expose keys. +11. Design/UI: hardcoded task UI text must move behind existing i18n before task UI changes are considered complete. + +### Error And Rescue Registry + +| Failure | Required behavior | +| --- | --- | +| Hindsight URL/key missing | Disable memory and continue normal PersonaAgent conversation. | +| Hindsight recall timeout/error | Log warning, return empty memory, continue response. | +| Hindsight retain timeout/error | Log warning, do not block final response or leak background tasks. | +| Missing LLM/remote avatar config | Surface a clear configuration failure instead of hanging the avatar turn. | +| Search credentials missing | Emit failed task state with actionable reason. | +| No useful sources | Complete with transparent no-source explanation or artifact. | +| Terminal artifact tool never called | Stop after bounded iterations and mark the task failed. | +| User cancels | Emit `task.cancelled`, stop background work, and let the digital human acknowledge. | +| Internal task API unauthenticated in production | Require a nonempty token or document dev-only exposure. | + +### Failure Modes To Test + +| Target | Case | +| --- | --- | +| Hindsight client | recall payload includes query, world/experience types, mid budget, max tokens, tag, and `tags_match=any`. | +| Hindsight client | retain payload includes one `{content, context, tags}` item and `async=true`. | +| PersonaAgent | memory enabled exposes hidden `recall_memory`; disabled mode does not. | +| PersonaAgent | fake realtime model calls recall and receives memory tool result. | +| PersonaAgent | assistant final schedules retain and shutdown drains/cancels background tasks. | +| Task runtime | start returns quickly while background work continues. | +| Task runtime | failure and cancellation produce terminal events. | +| Frontend | task progress/artifact/failure labels are bilingual. | +| Remote deployment | Mac startup can reach remote inference/avatar endpoints from `.env`. | + +### Not In Scope + +- Recreating `agent_runtime/server.py`. +- Changing Go API or gRPC protocol for Hindsight v1. +- Building QMD local memory. +- Adding login/user identity beyond fixed `HINDSIGHT_USER_TAG`. +- Making generic search-provider abstraction the first follow-up. +- Promising durable task recovery across process restart before a source-of-truth decision. + +### What Already Exists + +- PersonaAgent-side Hindsight config/client and hidden recall tool. +- Async retain after assistant final response. +- `.env` and config example entries for Hindsight. +- Unit tests for Hindsight payloads/error tolerance and PersonaAgent memory wiring. +- Regression tests passed locally: Python agent tests, Go tests, and targeted unit tests. + +### Decision Audit Trail + +| Decision | Classification | Principle | Status | +| --- | --- | --- | --- | +| Selective Expansion | Mechanical | P1/P2: preserve current working runtime and expand only where needed | Proposed | +| Reframe to current PersonaAgent runtime | User Challenge | Old plan targets missing files and would waste engineering effort | Requires user confirmation | +| Keep Hindsight v1 PersonaAgent-only | Mechanical | P3/P5: minimum-change integration with no protocol churn | Proposed | +| Defer SearchTool factory | Mechanical | P4/P5: prove current product path before abstraction | Proposed | +| Defer Go-owned durable task state | Taste/Strategy | Production durability matters, but it is a larger separate design | Proposed | +| Require i18n/security smoke gates | Mechanical | P1: visible product and production safety should not regress | Proposed | + +### Phase 1 Completion Summary + +Phase 1 found a blocking premise mismatch. Both review voices agree that the plan should be rewritten before Phase 2 engineering review continues. The correct next decision is whether to make the current `PersonaAgentPlugin + LocalTaskRuntime + LangGraph subagent + Hindsight v1` path the official plan baseline. diff --git a/frontend/src/components/AvatarUpload.vue b/frontend/src/components/AvatarUpload.vue index 87998dc..d15e803 100644 --- a/frontend/src/components/AvatarUpload.vue +++ b/frontend/src/components/AvatarUpload.vue @@ -2,6 +2,7 @@ import { ref, computed, watch, nextTick, onBeforeUnmount } from 'vue' import { useI18n } from 'vue-i18n' import type { ImageInfo } from '../types' +import { resolveApiUrl } from '../services/api' interface DisplayImage { key: string // unique key for v-for @@ -109,9 +110,9 @@ const displayImages = computed(() => { for (const img of orderedImages) { list.push({ key: 'srv-' + img.filename, - src: img.url || (props.characterId + src: resolveApiUrl(img.url || (props.characterId ? `/api/v1/characters/${props.characterId}/images/${img.filename}` - : ''), + : '')), filename: img.filename, }) } diff --git a/frontend/src/components/CharacterCard.vue b/frontend/src/components/CharacterCard.vue index 255782d..e74451c 100644 --- a/frontend/src/components/CharacterCard.vue +++ b/frontend/src/components/CharacterCard.vue @@ -3,6 +3,7 @@ import { computed } from 'vue' import { useRouter } from 'vue-router' import { useI18n } from 'vue-i18n' import type { Character } from '../types' +import { resolveApiUrl } from '../services/api' import { formatVoiceTypeDisplay } from '../utils/voice' const router = useRouter() @@ -10,9 +11,9 @@ const { t, locale } = useI18n() const props = defineProps<{ character: Character }>() const emit = defineEmits<{ delete: [id: string] }>() const coverImage = computed(() => - props.character.active_image + resolveApiUrl(props.character.active_image ? `/api/v1/characters/${props.character.id}/images/${encodeURIComponent(props.character.active_image)}` - : props.character.avatar_image + : props.character.avatar_image) ) // Generate a gradient from character name hash diff --git a/frontend/src/components/TaskProgressCard.vue b/frontend/src/components/TaskProgressCard.vue index e18f7d1..8373658 100644 --- a/frontend/src/components/TaskProgressCard.vue +++ b/frontend/src/components/TaskProgressCard.vue @@ -1,11 +1,13 @@