Optimize MLA/GQA/MQA Triton decoding

Motivation
Optimize memory access for MLA/GQA/MQA decoding.
Modification
One block handle BLOCK_H q heads with shared k/v head. Inspired by https://github.com/InternLM/lmdeploy/pull/1649.

Tested on A100-80G:
DeepSeek-V2-Lite
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    128.0
Successful requests:                     5000
Benchmark duration (s):                  238.01
Total input tokens:                      1187865
Total generated tokens:                  1089941
Total generated tokens (retokenized):    1088588
Request throughput (req/s):              21.01
Input token throughput (tok/s):          4990.76
Output token throughput (tok/s):         4579.34
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   82822.78
Median E2E Latency (ms):                 79653.86
---------------Time to First Token----------------
Mean TTFT (ms):                          7167.67
Median TTFT (ms):                        4229.26
P99 TTFT (ms):                           21327.09
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          1073.28
Median TPOT (ms):                        473.77
P99 TPOT (ms):                           7907.65
---------------Inter-token Latency----------------
Mean ITL (ms):                           409.14
Median ITL (ms):                         165.46
P99 ITL (ms):                            1814.59
==================================================

subject: abstract_algebra, #q:100, acc: 0.270
subject: anatomy, #q:135, acc: 0.504
subject: astronomy, #q:152, acc: 0.572
subject: business_ethics, #q:100, acc: 0.600
subject: clinical_knowledge, #q:265, acc: 0.642
subject: college_biology, #q:144, acc: 0.653
subject: college_chemistry, #q:100, acc: 0.410
subject: college_computer_science, #q:100, acc: 0.440
subject: college_mathematics, #q:100, acc: 0.380
subject: college_medicine, #q:173, acc: 0.601
Total latency: 33.251
Average accuracy: 0.535

Llama-3-8B
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    128.0
Successful requests:                     1000
Benchmark duration (s):                  49.48
Total input tokens:                      213987
Total generated tokens:                  199779
Total generated tokens (retokenized):    198032
Request throughput (req/s):              20.21
Input token throughput (tok/s):          4324.67
Output token throughput (tok/s):         4037.53
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   20671.67
Median E2E Latency (ms):                 19467.73
---------------Time to First Token----------------
Mean TTFT (ms):                          3234.54
Median TTFT (ms):                        1188.96
P99 TTFT (ms):                           14154.28
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          186.30
Median TPOT (ms):                        90.10
P99 TPOT (ms):                           1976.89
---------------Inter-token Latency----------------
Mean ITL (ms):                           91.19
Median ITL (ms):                         61.85
P99 ITL (ms):                            308.93
==================================================

subject: abstract_algebra, #q:100, acc: 0.330
subject: anatomy, #q:135, acc: 0.696
subject: astronomy, #q:152, acc: 0.684
subject: business_ethics, #q:100, acc: 0.630
subject: clinical_knowledge, #q:265, acc: 0.751
subject: college_biology, #q:144, acc: 0.771
subject: college_chemistry, #q:100, acc: 0.460
subject: college_computer_science, #q:100, acc: 0.520
subject: college_mathematics, #q:100, acc: 0.340
subject: college_medicine, #q:173, acc: 0.636
Total latency: 41.592
Average accuracy: 0.618

Reproduce:
python3 -m sglang.launch_server --model-path DeepSeek-V2-Lite --port 30000 --trust-remote-code --disable-radix-cache --enable-mla --tp=1
python3 -m sglang.bench_serving --backend sglang --tokenizer DeepSeek-V2-Lite --dataset-path /workdir/datasets/ShareGPT_V3_unfiltered_cleaned_split.json --num-prompts 1000 --request-rate 128
python3 benchmark/mmlu/bench_sglang.py --nsub 10

python3 -m sglang.launch_server --model-path Meta-Llama-3-8B --port 30000 --trust-remote-code --disable-radix-cache --disable-flashinfer --tp=1
python3 -m sglang.bench_serving --backend sglang --tokenizer Meta-Llama-3-8B --dataset-path /workdir/datasets/ShareGPT_V3_unfiltered_cleaned_split.json --num-prompts 1000 --request-rate 128
python3 benchmark/mmlu/bench_sglang.py --nsub 10

Nice work! TLDR: Reuse from L2 to block. Is it right? @ispobock

Nice work! TLDR: Reuse from L2 to block. Is it right? @ispobock

@zhyncs Previous version reuses from L2 cache. This version reuses shared k/v head from SMEM.

Tested on A100-80G: DeepSeek-V2-Lite
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    128.0
Successful requests:                     5000
Benchmark duration (s):                  238.01
Total input tokens:                      1187865
Total generated tokens:                  1089941
Total generated tokens (retokenized):    1088588
Request throughput (req/s):              21.01
Input token throughput (tok/s):          4990.76
Output token throughput (tok/s):         4579.34
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   82822.78
Median E2E Latency (ms):                 79653.86
---------------Time to First Token----------------
Mean TTFT (ms):                          7167.67
Median TTFT (ms):                        4229.26
P99 TTFT (ms):                           21327.09
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          1073.28
Median TPOT (ms):                        473.77
P99 TPOT (ms):                           7907.65
---------------Inter-token Latency----------------
Mean ITL (ms):                           409.14
Median ITL (ms):                         165.46
P99 ITL (ms):                            1814.59
==================================================

subject: abstract_algebra, #q:100, acc: 0.270
subject: anatomy, #q:135, acc: 0.504
subject: astronomy, #q:152, acc: 0.572
subject: business_ethics, #q:100, acc: 0.600
subject: clinical_knowledge, #q:265, acc: 0.642
subject: college_biology, #q:144, acc: 0.653
subject: college_chemistry, #q:100, acc: 0.410
subject: college_computer_science, #q:100, acc: 0.440
subject: college_mathematics, #q:100, acc: 0.380
subject: college_medicine, #q:173, acc: 0.601
Total latency: 33.251
Average accuracy: 0.535

Llama-3-8B
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    128.0
Successful requests:                     1000
Benchmark duration (s):                  49.48
Total input tokens:                      213987
Total generated tokens:                  199779
Total generated tokens (retokenized):    198032
Request throughput (req/s):              20.21
Input token throughput (tok/s):          4324.67
Output token throughput (tok/s):         4037.53
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   20671.67
Median E2E Latency (ms):                 19467.73
---------------Time to First Token----------------
Mean TTFT (ms):                          3234.54
Median TTFT (ms):                        1188.96
P99 TTFT (ms):                           14154.28
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          186.30
Median TPOT (ms):                        90.10
P99 TPOT (ms):                           1976.89
---------------Inter-token Latency----------------
Mean ITL (ms):                           91.19
Median ITL (ms):                         61.85
P99 ITL (ms):                            308.93
==================================================

subject: abstract_algebra, #q:100, acc: 0.330
subject: anatomy, #q:135, acc: 0.696
subject: astronomy, #q:152, acc: 0.684
subject: business_ethics, #q:100, acc: 0.630
subject: clinical_knowledge, #q:265, acc: 0.751
subject: college_biology, #q:144, acc: 0.771
subject: college_chemistry, #q:100, acc: 0.460
subject: college_computer_science, #q:100, acc: 0.520
subject: college_mathematics, #q:100, acc: 0.340
subject: college_medicine, #q:173, acc: 0.636
Total latency: 41.592
Average accuracy: 0.618

Reproduce:
python3 -m sglang.launch_server --model-path DeepSeek-V2-Lite --port 30000 --trust-remote-code --disable-radix-cache --enable-mla --tp=1
python3 -m sglang.bench_serving --backend sglang --tokenizer DeepSeek-V2-Lite --dataset-path /workdir/datasets/ShareGPT_V3_unfiltered_cleaned_split.json --num-prompts 1000 --request-rate 128
python3 benchmark/mmlu/bench_sglang.py --nsub 10

python3 -m sglang.launch_server --model-path Meta-Llama-3-8B --port 30000 --trust-remote-code --disable-radix-cache --disable-flashinfer --tp=1
python3 -m sglang.bench_serving --backend sglang --tokenizer Meta-Llama-3-8B --dataset-path /workdir/datasets/ShareGPT_V3_unfiltered_cleaned_split.json --num-prompts 1000 --request-rate 128
python3 benchmark/mmlu/bench_sglang.py --nsub 10

ref https://github.com/sgl-project/sglang/pull/905#issuecomment-2267514917
After a brief look, the throughput has roughly doubled compared to the previous MLA version, great work! cc @merrymercy @Ying1123 @hnyls2002

@Xu-Chen @lxww302 I noticed that you have used the implementation of SGLang's DeepSeek V2 TP8 MLA before. Could you help verify the performance of the new version, for example, on devices you have like A100 TP8, A800 TP8, H100 TP8, etc.? Thanks very mauch!
git clone -b decode_gqa_opt https://github.com/ispobock/sglang.git
cd sglang

pip install --upgrade pip
pip install -e "python[all]"

pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/

python3 -m sglang.launch_server --model-path deepseek-ai/DeepSeek-V2 --port 30000 --trust-remote-code --disable-radix-cache --enable-mla --tp=8

python3 -m sglang.bench_serving --backend sglang

@Xu-Chen @lxww302 I noticed that you have used the implementation of SGLang's DeepSeek V2 TP8 MLA before. Could you help verify the performance of the new version, for example, on devices you have like A100 TP8, A800 TP8, H100 TP8, etc.? Thanks very mauch!
git clone -b decode_gqa_opt https://github.com/ispobock/sglang.git
cd sglang

pip install --upgrade pip
pip install -e "python[all]"

pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/

python3 -m sglang.launch_server --model-path deepseek-ai/DeepSeek-V2 --port 30000 --trust-remote-code --disable-radix-cache --enable-mla --tp=8

python3 -m sglang.bench_serving --backend sglang

I have 8Xh100s, I executed your command
============ Serving Benchmark Result ============ Backend:                                 sglang     Traffic request rate:                    inf        Successful requests:                     1000       Benchmark duration (s):                  182.31     Total input tokens:                      236142     Total generated tokens:                  215614     Total generated tokens (retokenized):    215037     Request throughput (req/s):              5.49       Input token throughput (tok/s):          1295.28    Output token throughput (tok/s):         1182.68    ----------------End-to-End Latency---------------- Mean E2E Latency (ms):                   75887.79   Median E2E Latency (ms):                 77685.35   ---------------Time to First Token---------------- Mean TTFT (ms):                          43446.36   Median TTFT (ms):                        39279.88   P99 TTFT (ms):                           104146.94  -----Time per Output Token (excl. 1st token)------ Mean TPOT (ms):                          181.96     Median TPOT (ms):                        161.47     P99 TPOT (ms):                           653.64     ---------------Inter-token Latency---------------- Mean ITL (ms):                           152.74     Median ITL (ms):                         99.26      P99 ITL (ms):                            465.58     ==================================================

Thanks! Is it H100 SXM or NVL? @81549361

May you collect the env info with python3 -m sglang.check_env. @81549361

Not sure if this could be helpful or not, but I ran llmperf for both main branch and incoming branch. Overall this PR seems to make things much faster:

GPU: NVIDIA A40 TP=2 DP=1
Model: Qwen/Qwen2-72B-Instruct-AWQ

llmperf command used
python token_benchmark_ray.py \
  --model "${MODEL}" \
  --mean-input-tokens 1500 \
  --stddev-input-tokens 150 \
  --mean-output-tokens 245 \
  --stddev-output-tokens 20 \
  --max-num-completed-requests "64" \
  --timeout 7200 \
  --num-concurrent-requests "8" \
  --llm-api openai \
  --additional-sampling-params '{}'

main branch
{
    "version": "2023-08-31",
    "mean_input_tokens": 1500,
    "stddev_input_tokens": 150,
    "mean_output_tokens": 245,
    "stddev_output_tokens": 20,
    "num_concurrent_requests": 8,
    "results_inter_token_latency_s_quantiles_p25": 0.03990331099470551,
    "results_inter_token_latency_s_quantiles_p50": 0.057948063652443406,
    "results_inter_token_latency_s_quantiles_p75": 0.08040066503004678,
    "results_inter_token_latency_s_quantiles_p90": 0.08383243498141633,
    "results_inter_token_latency_s_quantiles_p95": 0.08516111126646178,
    "results_inter_token_latency_s_quantiles_p99": 0.10164050496592587,
    "results_inter_token_latency_s_mean": 0.06027883582796916,
    "results_inter_token_latency_s_min": 0.03675615620323733,
    "results_inter_token_latency_s_max": 0.1020314351556132,
    "results_inter_token_latency_s_stddev": 0.0211621866217624,
    "results_ttft_s_quantiles_p25": 0.4133454477414489,
    "results_ttft_s_quantiles_p50": 1.016814228380099,
    "results_ttft_s_quantiles_p75": 11.284791270736605,
    "results_ttft_s_quantiles_p90": 11.749069100199268,
    "results_ttft_s_quantiles_p95": 11.803535583987832,
    "results_ttft_s_quantiles_p99": 11.955875016311182,
    "results_ttft_s_mean": 5.338054827436281,
    "results_ttft_s_min": 0.2691499590873718,
    "results_ttft_s_max": 12.148427874781191,
    "results_ttft_s_stddev": 5.495650480946165,
    "results_end_to_end_latency_s_quantiles_p25": 11.498506030999124,
    "results_end_to_end_latency_s_quantiles_p50": 15.51382327103056,
    "results_end_to_end_latency_s_quantiles_p75": 22.9230548851192,
    "results_end_to_end_latency_s_quantiles_p90": 23.657817971240732,
    "results_end_to_end_latency_s_quantiles_p95": 23.97725157707464,
    "results_end_to_end_latency_s_quantiles_p99": 24.61372328522615,
    "results_end_to_end_latency_s_mean": 16.84320118615142,
    "results_end_to_end_latency_s_min": 3.5896931253373623,
    "results_end_to_end_latency_s_max": 25.067169249989092,
    "results_end_to_end_latency_s_stddev": 6.076063540076458,
    "results_request_output_throughput_token_per_s_quantiles_p25": 12.432897921487776,
    "results_request_output_throughput_token_per_s_quantiles_p50": 17.950591526918625,
    "results_request_output_throughput_token_per_s_quantiles_p75": 25.023589881617227,
    "results_request_output_throughput_token_per_s_quantiles_p90": 25.61754857375858,
    "results_request_output_throughput_token_per_s_quantiles_p95": 26.080372795146523,
    "results_request_output_throughput_token_per_s_quantiles_p99": 27.12744569799552,
    "results_request_output_throughput_token_per_s_mean": 18.7890127702506,
    "results_request_output_throughput_token_per_s_min": 9.773737854436295,
    "results_request_output_throughput_token_per_s_max": 27.204481327432568,
    "results_request_output_throughput_token_per_s_stddev": 6.462698432888159,
    "results_number_input_tokens_quantiles_p25": 1419.75,
    "results_number_input_tokens_quantiles_p50": 1513.5,
    "results_number_input_tokens_quantiles_p75": 1585.25,
    "results_number_input_tokens_quantiles_p90": 1726.1000000000001,
    "results_number_input_tokens_quantiles_p95": 1812.2499999999998,
    "results_number_input_tokens_quantiles_p99": 1942.5299999999997,
    "results_number_input_tokens_mean": 1515.53125,
    "results_number_input_tokens_min": "1125",
    "results_number_input_tokens_max": "1986",
    "results_number_input_tokens_stddev":<PHONE_NUMBER>922921,
    "results_number_output_tokens_quantiles_p25": 271.25,
    "results_number_output_tokens_quantiles_p50": 287.0,
    "results_number_output_tokens_quantiles_p75": 304.5,
    "results_number_output_tokens_quantiles_p90": 318.0,
    "results_number_output_tokens_quantiles_p95": 326.4,
    "results_number_output_tokens_quantiles_p99": 340.37,
    "results_number_output_tokens_mean": 280.546875,
    "results_number_output_tokens_min": "78",
    "results_number_output_tokens_max": "341",
    "results_number_output_tokens_stddev": 43.62427229119711,
    "results_num_requests_started": 64,
    "results_error_rate": 0.0,
    "results_number_errors": 0,
    "results_error_code_frequency": "{}",
    "results_mean_output_throughput_token_per_s":<PHONE_NUMBER>5087381,
    "results_num_completed_requests": 64,
    "results_num_completed_requests_per_min": 26.288247263678944,
    "timestamp":<PHONE_NUMBER>
}

incoming branch
{
    "version": "2023-08-31",
    "mean_input_tokens": 1500,
    "stddev_input_tokens": 150,
    "mean_output_tokens": 245,
    "stddev_output_tokens": 20,
    "num_concurrent_requests": 8,
    "results_inter_token_latency_s_quantiles_p25": 0.04048058146969138,
    "results_inter_token_latency_s_quantiles_p50": 0.04134249718749723,
    "results_inter_token_latency_s_quantiles_p75": 0.042773683461634744,
    "results_inter_token_latency_s_quantiles_p90": 0.04477736409998821,
    "results_inter_token_latency_s_quantiles_p95": 0.04621570852103804,
    "results_inter_token_latency_s_quantiles_p99": 0.04943066709057319,
    "results_inter_token_latency_s_mean": 0.04202164194913325,
    "results_inter_token_latency_s_min": 0.03828613981456747,
    "results_inter_token_latency_s_max": 0.05096760665209523,
    "results_inter_token_latency_s_stddev": 0.0023344492257422154,
    "results_ttft_s_quantiles_p25": 0.3779949996387586,
    "results_ttft_s_quantiles_p50": 0.403224729700014,
    "results_ttft_s_quantiles_p75": 0.44007199979387224,
    "results_ttft_s_quantiles_p90": 0.4766438877210021,
    "results_ttft_s_quantiles_p95": 0.4872294148663059,
    "results_ttft_s_quantiles_p99": 0.49447528753429654,
    "results_ttft_s_mean": 0.4035295032663271,
    "results_ttft_s_min": 0.2787872082553804,
    "results_ttft_s_max": 0.49528229096904397,
    "results_ttft_s_stddev": 0.05853017613187361,
    "results_end_to_end_latency_s_quantiles_p25": 10.952284958562814,
    "results_end_to_end_latency_s_quantiles_p50": 11.724067542003468,
    "results_end_to_end_latency_s_quantiles_p75": 12.392438833485357,
    "results_end_to_end_latency_s_quantiles_p90": 12.949160708626732,
    "results_end_to_end_latency_s_quantiles_p95": 13.369823349895887,
    "results_end_to_end_latency_s_quantiles_p99": 13.602660472076385,
    "results_end_to_end_latency_s_mean": 11.063488117179077,
    "results_end_to_end_latency_s_min": 2.310943207703531,
    "results_end_to_end_latency_s_max": 13.658869832754135,
    "results_end_to_end_latency_s_stddev": 2.5735290879206163,
    "results_request_output_throughput_token_per_s_quantiles_p25": 23.376963498120137,
    "results_request_output_throughput_token_per_s_quantiles_p50": 24.13135072660546,
    "results_request_output_throughput_token_per_s_quantiles_p75": 24.70095651189223,
    "results_request_output_throughput_token_per_s_quantiles_p90": 25.105406335351436,
    "results_request_output_throughput_token_per_s_quantiles_p95": 25.318698051259776,
    "results_request_output_throughput_token_per_s_quantiles_p99": 26.00064578019821,
    "results_request_output_throughput_token_per_s_mean": 23.819321580789712,
    "results_request_output_throughput_token_per_s_min": 19.61920693264775,
    "results_request_output_throughput_token_per_s_max": 26.11816971864744,
    "results_request_output_throughput_token_per_s_stddev": 1.3040854008387603,
    "results_number_input_tokens_quantiles_p25": 1419.75,
    "results_number_input_tokens_quantiles_p50": 1513.5,
    "results_number_input_tokens_quantiles_p75": 1585.25,
    "results_number_input_tokens_quantiles_p90": 1726.1000000000001,
    "results_number_input_tokens_quantiles_p95": 1812.2499999999998,
    "results_number_input_tokens_quantiles_p99": 1942.5299999999997,
    "results_number_input_tokens_mean": 1515.53125,
    "results_number_input_tokens_min": "1125",
    "results_number_input_tokens_max": "1986",
    "results_number_input_tokens_stddev":<PHONE_NUMBER>922921,
    "results_number_output_tokens_quantiles_p25": 265.75,
    "results_number_output_tokens_quantiles_p50": 285.0,
    "results_number_output_tokens_quantiles_p75": 296.25,
    "results_number_output_tokens_quantiles_p90": 317.0,
    "results_number_output_tokens_quantiles_p95": 322.0,
    "results_number_output_tokens_quantiles_p99":<PHONE_NUMBER>9999997,
    "results_number_output_tokens_mean": 265.484375,
    "results_number_output_tokens_min": "47",
    "results_number_output_tokens_max": "342",
    "results_number_output_tokens_stddev": 66.06466101119273,
    "results_num_requests_started": 64,
    "results_error_rate": 0.0,
    "results_number_errors": 0,
    "results_error_code_frequency": "{}",
    "results_mean_output_throughput_token_per_s":<PHONE_NUMBER>9263228,
    "results_num_completed_requests": 64,
    "results_num_completed_requests_per_min": 36.77803923322394,
    "timestamp":<PHONE_NUMBER>
}

python3 -m sglang.check_env

Python: 3.12.3 | packaged by Anaconda, Inc. | (main, May  6 2024, 19:46:43) [GCC 11.2.0]
CUDA available: True
GPU 0,1,2,3,4,5,6,7: NVIDIA H100 80GB HBM3
GPU 0,1,2,3,4,5,6,7 Compute Capability: 9.0
CUDA_HOME: /usr/local/cuda
NVCC: Cuda compilation tools, release 12.1, V12.1.105
CUDA Driver Version: 535.183.01
PyTorch: 2.4.0+cu121
flashinfer: 0.1.5+cu121torch2.4
triton: 3.0.0
transformers: 4.44.0
requests: 2.32.3
tqdm: 4.66.5
numpy: 1.26.4
aiohttp: 3.10.3
fastapi: 0.112.1
hf_transfer: 0.1.8
huggingface_hub: 0.24.5
interegular: 0.3.3
packaging: 23.2
PIL: 10.3.0
psutil: 5.9.8
pydantic: 2.8.2
uvicorn: 0.30.6
uvloop: 0.20.0
zmq: 26.0.3
vllm: 0.5.4
multipart: 0.0.9
openai: 1.40.8
anthropic: 0.34.0
NVIDIA Topology:
        GPU0    GPU1    GPU2    GPU3    GPU4    GPU5    GPU6    GPU7    CPU Affinity    NUMA Affinity   GPU NUMA ID
GPU0     X      NV18    NV18    NV18    NV18    NV18    NV18    NV18    0-159   0               N/A
GPU1    NV18     X      NV18    NV18    NV18    NV18    NV18    NV18    0-159   0               N/A
GPU2    NV18    NV18     X      NV18    NV18    NV18    NV18    NV18    0-159   0               N/A
GPU3    NV18    NV18    NV18     X      NV18    NV18    NV18    NV18    0-159   0               N/A
GPU4    NV18    NV18    NV18    NV18     X      NV18    NV18    NV18    0-159   0               N/A
GPU5    NV18    NV18    NV18    NV18    NV18     X      NV18    NV18    0-159   0               N/A
GPU6    NV18    NV18    NV18    NV18    NV18    NV18     X      NV18    0-159   0               N/A
GPU7    NV18    NV18    NV18    NV18    NV18    NV18    NV18     X      0-159   0               N/A

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

ulimit soft: 1048576

Not sure if this could be helpful or not, but I ran llmperf for both main branch and incoming branch. Overall this PR seems to make things much faster:

GPU: NVIDIA A40 TP=2 DP=1
Model: Qwen/Qwen2-72B-Instruct-AWQ

llmperf command used
main branch
incoming branch

What is your startup command?
I don't see any noticeable improvement in llama3 8b FP8.

@81549361 Startup command I used for both are the same:
python3 -m sglang.launch_server \
  --model-path "${MODEL}" \
  --host <IP_ADDRESS> \
  --port 8080 \
  --context-length "4096" \
  --max-prefill-tokens "16384" \
  --mem-fraction-static "0.85" \
  --schedule-conservativeness "0.05" \
  --tp-size "2" \
  --dp-size "1" \
  --log-level-http warning

I don't see any noticeable improvement in llama3 8b FP8.

@81549361 Did you add --disable-flashinfer  for both branches on llama3?

Awesome! Will test it on 8*A800 next week.

@halexan You don’t need to set this
--mem-fraction-static 0.87 \
    --schedule-conservativeness 0.1 \
    --chunked-prefill-size 32768 \
    --max-prefill-tokens 163840 \

Tested DeepSeek-V2-Chat-0628 on 8*A800
server
/opt/conda/bin/python -m sglang.launch_server --model-path deepseek-ai/DeepSeek-V2-Chat-0628 --tp 8 --trust-remote-code --enable-mla --disable-radix-cache

test
/opt/conda/bin/python -m sglang.bench_serving --backend sglang --num-prompts 3000

This PR ( DeepSeek-V2-Lite-Chat  on 1 * A800-80G )
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    inf
Successful requests:                     3000
Benchmark duration (s):                  498.49
Total input tokens:                      714456
Total generated tokens:                  656556
Total generated tokens (retokenized):    653778
Request throughput (req/s):              6.02
Input token throughput (tok/s):          1433.23
Output token throughput (tok/s):         1317.08
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   204276.17
Median E2E Latency (ms):                 205499.99
---------------Time to First Token----------------
Mean TTFT (ms):                          165516.98
Median TTFT (ms):                        164192.44
P99 TTFT (ms):                           353364.53
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          187.10
Median TPOT (ms):                        186.48
P99 TPOT (ms):                           398.82
---------------Inter-token Latency----------------
Mean ITL (ms):                           180.25
Median ITL (ms):                         108.96
P99 ITL (ms):                            567.61
==================================================

@Xu-Chen
Does your 8*A800 has nvlink?

Yes

H100 SXM TP8 with DeepSeek V2
current PR
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    inf
Successful requests:                     5000
Benchmark duration (s):                  581.84
Total input tokens:                      1187865
Total generated tokens:                  1089941
Total generated tokens (retokenized):    1086980
Request throughput (req/s):              8.59
Input token throughput (tok/s):          2041.57
Output token throughput (tok/s):         1873.27
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   266797.24
Median E2E Latency (ms):                 272582.37
---------------Time to First Token----------------
Mean TTFT (ms):                          239227.95
Median TTFT (ms):                        248810.27
P99 TTFT (ms):                           488867.21
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          132.70
Median TPOT (ms):                        129.55
P99 TPOT (ms):                           281.64
---------------Inter-token Latency----------------
Mean ITL (ms):                           129.46
Median ITL (ms):                         78.23
P99 ITL (ms):                            453.92
==================================================

Compared to the main branch, it has improved by about 35%.
main branch
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    inf
Successful requests:                     5000
Benchmark duration (s):                  777.04
Total input tokens:                      1187865
Total generated tokens:                  1089941
Total generated tokens (retokenized):    1087011
Request throughput (req/s):              6.43
Input token throughput (tok/s):          1528.70
Output token throughput (tok/s):         1402.68
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   358316.01
Median E2E Latency (ms):                 365857.50
---------------Time to First Token----------------
Mean TTFT (ms):                          320752.33
Median TTFT (ms):                        323528.82
P99 TTFT (ms):                           670386.93
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          176.45
Median TPOT (ms):                        176.47
P99 TPOT (ms):                           272.25
---------------Inter-token Latency----------------
Mean ITL (ms):                           175.99
Median ITL (ms):                         128.65
P99 ITL (ms):                            517.99
==================================================

I plan to merge this PR first, and the compatibility support for fp8 will be completed in another PR. @ispobock @merrymercy @Ying1123 @hnyls2002

To further improve performance, both W8A8 (FP8) and FP8 KV Cache are necessary and should be supported for DeepSeek V2.

Furthermore, should pay attention to the MLA implementation of FlashInfer ( https://github.com/flashinfer-ai/flashinfer/issues/237)

Furthermore, should pay attention to the MLA implementation of FlashInfer ( flashinfer-ai/flashinfer#237)

@jon-chuang When do you expect to complete the support for MLA in FlashInfer? May you synchronize the approximate time? Thanks.

@microwish Yeah, we did the profiling first and found the decoding kernel took most of the time. And then we checked the kernel with ncu and get some directions for optimizing the memory access.


⚠ Bofrost.at has degraded performance

In 79d11f1, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1696 ms

Resolved: Bofrost.at performance has improved in b102ebc after 8 minutes.


Remove Unused Exception

Reopening since the last got automerged. As title. Diff is large, but I just removed the exception and unindented. We can add this back if we want to use it, but I'm pro simplifying code and not leaving in dead snippets. Fixes CO-864
From last PR:

Hmm I believe we needed this for the Benchmarker code to work, cc: @abhi-mosaic ? Is that still used for data collection?

I believe this was mostly used for the Benchmarker, but I also don't see that callback in the codebase anymore... so I guess it's OK to remove for now. I think since we now can modify state.timestamp we have other ways of quitting an epoch early.


Failed migration: 1.15.1 to 1.16

Migration failed with stack trace upgrading from 1.15.1 to 1.16
To Reproduce
Steps to reproduce the behavior:

Migrate 1.15.1 to 1.16

Relevant entries from the logs
pi@raspberrypi:~/dev/teslamate $ _build/prod/rel/teslamate/bin/teslamate eval "TeslaMate.Release.migrate"
23:20:45.079 [info] == Running<PHONE_NUMBER>0311 TeslaMate.Repo.Migrations.CascadeDelete.up/0 forward
23:20:45.087 [info] drop constraint cars_settings_id_fkey from table cars
23:20:45.093 [info] alter table cars
23:20:45.105 [info] drop constraint charges_charging_process_id_fkey from table charges
23:20:45.108 [info] alter table charges
23:20:45.227 [info] drop constraint charging_processes_car_id_fkey from table charging_processes
23:20:45.230 [info] drop constraint charging_processes_address_id_fkey from table charging_processes
23:20:45.233 [info] drop constraint charging_processes_geofence_id_fkey from table charging_processes
23:20:45.236 [info] alter table charging_processes
** (Postgrex.Error) ERROR 42P07 (duplicate_table) relation "charging_processes_car_id_index" already exists
(ecto_sql 3.3.4) lib/ecto/adapters/sql.ex:612: Ecto.Adapters.SQL.raise_sql_call_error/1
(elixir 1.10.0-dev) lib/enum.ex:1335: Enum."-map/2-lists^map/1-0-"/2
(ecto_sql 3.3.4) lib/ecto/adapters/sql.ex:699: Ecto.Adapters.SQL.execute_ddl/4
(ecto_sql 3.3.4) lib/ecto/migration/runner.ex:343: Ecto.Migration.Runner.log_and_execute_ddl/3
(ecto_sql 3.3.4) lib/ecto/migration/runner.ex:117: anonymous fn/6 in Ecto.Migration.Runner.flush/0
(elixir 1.10.0-dev) lib/enum.ex:1947: Enum."-reduce/3-lists^foldl/2-0-"/3
(ecto_sql 3.3.4) lib/ecto/migration/runner.ex:116: Ecto.Migration.Runner.flush/0
(stdlib 3.9) timer.erl:166: :timer.tc/1
Operating environment

TeslaMate Version: 1.15.1
Type of installation: Manual
OS: raspberrypi

See https://github.com/adriankumpf/teslamate/issues/446 for fixes (simplest one is: upgrade to the latest PostgreSQL, for example 12.x).

Thanks Niek!  I should have done a better job searching for a duplicate issue


Separate fetching into different object that AR shoud extend

Additional info
https://github.com/yiisoft/yii2/issues/10459

Closed in favor of #313 with additional information


Initial Semantics for Variadic Generics

Implements a variation of the semantics described in the initial pitch.
This patchset implements

Variadic type argument binding with structural saturation rules
AST for parameter packs, pack expansions, and their corresponding types
Type inference rules for variadic generic applies
Substitution rules for polyvariadic types with eager pack expansions
A pack-expansion-to-tuple conversion

Notably missing:

Syntax for null-bound variadic generic types e.g. Foo<> for Foo<T...>
Semantics for null-bound variadic generic functions func foo<T...>(_ xs: T...); foo()
Pack arity propagation along type equality constraints

The heart of this patchset is an inference scheme for variadic generic functions and associated pack expansions.
A traditional variadic function looks like
func foo<T>(_ xs: T...) {}

Along with the corresponding function type
<T>(T [variadic]) -> Void

which the constraint system only has to resolve one type for. Hence it opens <T> as a type variable and uses each argument to the function to try to solve for <T>. This approach cannot work for variadic generics as each argument would try to bind to the same <T> and the constraint system would lose coherency in the one case we need it: when the arguments all have different types.
Instead, notice when we encounter expansion types:
func print<T...>(_ xs: T...)
print("Macs say Hello in", 42, "different languages")

We open this type as
print : ($t0...) -> ($t0...)

Now for the brand new stuff: We need to create and bind a pack to $t0, which will trigger the expansion we need for CSApply to see a coherent view of the world. This means we need to examine the argument list and construct the pack type <$t1, $t2, $t3, ...> - one type variable per argument - and bind it to $t0. There's also the catch that each argument that references the opened type $t0 needs to have the same parallel structure, including its arity. The algorithm is thus:
For input type F : (... ($t0...), ..., ($tn..) ...) -> R and an apply site F(a0, ..., an) we walk the parameters of F and record an entry in a mapping for each opened variadic generic parameter. Now, for each argument ai in (a0, ..., an), we create a fresh type variable corresponding to the argument ai, and record an additional entry in the parameter pack type elements corresponding to that argument.
Concretely, suppose we have
func print2<T..., U...>(first: T..., second: U...) {}
print2(first: "", 42, (), second: [42])

We open print2 as
print2 : ($t0..., $t1...) -> Void

And construct a mapping
  $t0 => <$t2, $t3, $t4> // eventually <String, Int, Void>
  $t1 => <$t5> // eventually [Int]

We then yield the entries of this map back to the solver, which constructs bind constraints where each => occurs in the diagram above. The pack type thus is immediately substituted into the corresponding pack expansion type which produces a fully-expanded pack type of the correct arity that the solver can actually use to make forward progress.
Applying the solution is as simple as pulling out the pack type and coercing arguments element-wise into a pack expression.
You would think this would appear in the literature somewhere, but lo and behold I'm pretty sure nobody's thought to do this yet.

@swift-ci test

Build failed
Swift Test Linux Platform
Git Sha - 72d5678ac041e4437b3deff727042e7b4e2f2917

Build failed
Swift Test OS X Platform
Git Sha - 72d5678ac041e4437b3deff727042e7b4e2f2917

@swift-ci test

Build failed
Swift Test OS X Platform
Git Sha - d44d8ec043aeac0180a0cbd96ab03636ea70e2f7

@swift-ci test macOS platform

Build failed
Swift Test OS X Platform
Git Sha - d44d8ec043aeac0180a0cbd96ab03636ea70e2f7

@swift-ci smoke test macOS


Update Versioneer to 0.29

Required for Python 3.12.
SafeConfigParser has been removed in Python 3.12.
(has been deprecated since Python 3.2)

Someone will need to fix #577 before merging this though. I will probably just pin us to sympy<1.12.


Display errors at the end of the quiz

Store them while the user answers the questions, then display every error with their category and explanation

Done there 899c13ee252e967daabf27279c76bec172a9c9d1


Closing the log window with :q! remove syntax highlighting

As reported by Max Savchenko on Discord:

I'm observing strange behaviour: if I close conjure buffer with :q! and then open a new one—it lacks syntax colors although it has ft=clojure in it. it gets fixed with :set ft=clojure
if i close buffer with g:conjure#mapping#log_close_visible everything is fine of course

I suspect the ! suffix is killing the buffer in some way, or maybe clearing it's buffer local settings without deleting the buffer. It's some sort of half dead state so Conjure isn't re-creating the buffer with all of the right options set in this case like it normally would.

Interestingly, bdelete doesn't cause this issue. quit is fine too, it's only quit! that seems to break the buffer. The :help on this call is:
:q[uit]!		Quit without writing, also when the current buffer has
			changes.  The buffer is unloaded, also when it has
			'hidden' set.
			If this is the last window and there is a modified
			hidden buffer, the current buffer is abandoned and the
			first changed hidden buffer becomes the current
			buffer.
			Use ":qall!" to exit always.

It mentions that it unloads a buffer even if it has hidden set. So maybe it's "unloading" and not deleting the buffer?

Yep! :bunload reproduces the issue too! So we just have to check if the buffer is loaded or not. If it's not then we need to re-initialise.

thanks for taking care of this!


Supplying more arguments for npm install

In our CI build we run
npm ci --cache $CACHE_DIR/.npm --prefer-offline

This code outlines support for supplying more arguments for the install-step.
quarkus.quinoa.install-arguments=--cache $CACHE_DIR/.npm --prefer-offline

[INFO] --- quarkus-maven-plugin:2.10.1.Final:build (default) @ swarm-overview ---
[INFO] [io.quarkiverse.quinoa.deployment.PackageManager] Running Quinoa package manager install command: npm ci --cache $CACHE_DIR/.npm --prefer-offline
[INFO] [io.quarkiverse.quinoa.deployment.PackageManager]
[INFO] [io.quarkiverse.quinoa.deployment.PackageManager] added 1571 packages in 1m

Any feedback on this feature?
I guess the same change should be done for all steps in the process.

Thanks @computerlove, this is indeed a nice feature.
As the config is "hard" to change without impacting the consuming users, we shouldn't rush and consider the naming and usage carefully.
I've been thinking into improving the customization of package manager commands in the long run (and not just "install").
I believe it would be nice to have something close to the script section in the package.json:
quarkus:
  package-manager:
     install-frozen: "npm ci --cache $CACHE_DIR/.npm --prefer-offline"
     // install: npm install (would still be the default)
     build-prod: "npm build-prod"
     build-dev: "npm build-dev"
     dev: "npm dev" // default is "npm start"

Instead of just the argument it would allow to edit the entire command (including envs) for one or more the available "actions". If not set if would keep the default (what we currently have).
To allow this, we might need to use something like https://commons.apache.org/proper/commons-exec/ and be careful about os compat.
Any thoughts? Maybe we should move this to a GitHub discussion?

Looks like a better solution!
A GitHub discussion is probably a good idea :)


Orb disappeared while crafting

I went to craft a rune from blood magic and it made one but then the orb disappeared. I'm assuming that it thought the orb was supposed to disappear when you're supposed to use it over and over,

That is correct, I have to respect the IRecipe.


Find Video with soonest start time

Have each individual video server have an endpoint that returns the current seek time

In conjunction with #70


Bot doesn't properly triage various issues

Received an issue today that followed the template but wasn't properly categorized. The body is below:

Webhook POST Body
{
  "action": "opened",
  "issue": {
    "url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/35",
    "repository_url": "https://api.github.com/repos/firebase/firebase-js-sdk",
    "labels_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/35/labels{/name}",
    "comments_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/35/comments",
    "events_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/35/events",
    "html_url": "https://github.com/firebase/firebase-js-sdk/issues/35",
    "id": 233943662,
    "number": 35,
    "title": "`startAt()` does not respect 2nd parameter when ordering by child",
    "user": {
      "login": "tjwoon",
      "id": 5500559,
      "avatar_url": "https://avatars3.githubusercontent.com/u/5500559?v=3",
      "gravatar_id": "",
      "url": "https://api.github.com/users/tjwoon",
      "html_url": "https://github.com/tjwoon",
      "followers_url": "https://api.github.com/users/tjwoon/followers",
      "following_url": "https://api.github.com/users/tjwoon/following{/other_user}",
      "gists_url": "https://api.github.com/users/tjwoon/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/tjwoon/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/tjwoon/subscriptions",
      "organizations_url": "https://api.github.com/users/tjwoon/orgs",
      "repos_url": "https://api.github.com/users/tjwoon/repos",
      "events_url": "https://api.github.com/users/tjwoon/events{/privacy}",
      "received_events_url": "https://api.github.com/users/tjwoon/received_events",
      "type": "User",
      "site_admin": false
    },
    "labels": [

    ],
    "state": "open",
    "locked": false,
    "assignee": null,
    "assignees": [

    ],
    "milestone": null,
    "comments": 0,
    "created_at": "2017-06-06T16:05:27Z",
    "updated_at": "2017-06-06T16:05:27Z",
    "closed_at": null,
    "body": "### Describe your environment\r\n\r\n  * Operating System version: macOS 10.12.4\r\n  * Firebase SDK version: 4.1.1\r\n  * Firebase Product: database\r\n\r\n### Describe the problem\r\n\r\nUsing a query with `orderByChild()` and `startAt(null, 'some-key')`, I expect the results to be returned starting with the record with key `'some-key'`, however returned results start at the very first item to match any given filter.\r\n\r\n#### Steps to reproduce:\r\n\r\nStart with this data:\r\n\r\n```json\r\n{\r\n  \"products\" : {\r\n    \"-KlsqFgVWwUrA-j0VsZS\" : {\r\n      \"name\" : \"Product 4\",\r\n      \"price\" : 666\r\n    },\r\n    \"-Klst-cLSckuwAuNAJF8\" : {\r\n      \"name\" : \"Product 1\",\r\n      \"price\" : 100\r\n    },\r\n    \"-Klst7IINdt8YeMmauRz\" : {\r\n      \"name\" : \"Product 2\",\r\n      \"price\" : 50\r\n    },\r\n    \"-Klst9KfM2QWp8kXrOlR\" : {\r\n      \"name\" : \"Product 6\",\r\n      \"price\" : 30\r\n    },\r\n    \"-KlstB51ap1L2tcK8cL6\" : {\r\n      \"name\" : \"Product 5\",\r\n      \"price\" : 99\r\n    },\r\n    \"-KlstDR5cCayGH0XKtZ0\" : {\r\n      \"name\" : \"Product 3\",\r\n      \"price\" : 500\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nI retrieve the first three matching records from this list using this code:\r\n\r\n```javascript\r\nfirebase.database().ref('products')\r\n.orderByChild('price')\r\n.limitToFirst(3)\r\n.on('child_added', function (snapshot) {\r\n    var key = snapshot.key;\r\n    var data = snapshot.val();\r\n    console.log(key + ': ' + JSON.stringify(data))\r\n})\r\n```\r\n\r\nUsing the key of the 3rd record, I try to retrieve records number 3-5:\r\n\r\n```javascript\r\nfirebase.database().ref('products')\r\n.orderByChild('price')\r\n.startAt(null, '-KlstB51ap1L2tcK8cL6')   // this is the key of the 3rd matching record.\r\n.limitToFirst(3)\r\n.on('child_added', function (snapshot) {\r\n    var key = snapshot.key;\r\n    var data = snapshot.val();\r\n    console.log(key + ': ' + JSON.stringify(data))\r\n})\r\n```\r\n\r\n\r\nHowever, if I remove the line `.orderByChild('price')`, then I am able to use `.startAt()` to retrieve items starting at the given record, which is very weird, because the default ordering is `.orderByKey()`, which is not supposed to support startAt's 2nd parameter according to [the documentation](https://firebase.google.com/docs/reference/js/firebase.database.Query#startAt), and also according to [the source code](https://github.com/firebase/firebase-js-sdk/blob/v4.1.1/src/database/js-client/api/Query.js#L68)"
  },
  "repository": {
    "id": 89290483,
    "name": "firebase-js-sdk",
    "full_name": "firebase/firebase-js-sdk",
    "owner": {
      "login": "firebase",
      "id": 1335026,
      "avatar_url": "https://avatars1.githubusercontent.com/u/1335026?v=3",
      "gravatar_id": "",
      "url": "https://api.github.com/users/firebase",
      "html_url": "https://github.com/firebase",
      "followers_url": "https://api.github.com/users/firebase/followers",
      "following_url": "https://api.github.com/users/firebase/following{/other_user}",
      "gists_url": "https://api.github.com/users/firebase/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/firebase/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/firebase/subscriptions",
      "organizations_url": "https://api.github.com/users/firebase/orgs",
      "repos_url": "https://api.github.com/users/firebase/repos",
      "events_url": "https://api.github.com/users/firebase/events{/privacy}",
      "received_events_url": "https://api.github.com/users/firebase/received_events",
      "type": "Organization",
      "site_admin": false
    },
    "private": false,
    "html_url": "https://github.com/firebase/firebase-js-sdk",
    "description": "Firebase Javascript SDK",
    "fork": false,
    "url": "https://api.github.com/repos/firebase/firebase-js-sdk",
    "forks_url": "https://api.github.com/repos/firebase/firebase-js-sdk/forks",
    "keys_url": "https://api.github.com/repos/firebase/firebase-js-sdk/keys{/key_id}",
    "collaborators_url": "https://api.github.com/repos/firebase/firebase-js-sdk/collaborators{/collaborator}",
    "teams_url": "https://api.github.com/repos/firebase/firebase-js-sdk/teams",
    "hooks_url": "https://api.github.com/repos/firebase/firebase-js-sdk/hooks",
    "issue_events_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/events{/number}",
    "events_url": "https://api.github.com/repos/firebase/firebase-js-sdk/events",
    "assignees_url": "https://api.github.com/repos/firebase/firebase-js-sdk/assignees{/user}",
    "branches_url": "https://api.github.com/repos/firebase/firebase-js-sdk/branches{/branch}",
    "tags_url": "https://api.github.com/repos/firebase/firebase-js-sdk/tags",
    "blobs_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/blobs{/sha}",
    "git_tags_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/tags{/sha}",
    "git_refs_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/refs{/sha}",
    "trees_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/trees{/sha}",
    "statuses_url": "https://api.github.com/repos/firebase/firebase-js-sdk/statuses/{sha}",
    "languages_url": "https://api.github.com/repos/firebase/firebase-js-sdk/languages",
    "stargazers_url": "https://api.github.com/repos/firebase/firebase-js-sdk/stargazers",
    "contributors_url": "https://api.github.com/repos/firebase/firebase-js-sdk/contributors",
    "subscribers_url": "https://api.github.com/repos/firebase/firebase-js-sdk/subscribers",
    "subscription_url": "https://api.github.com/repos/firebase/firebase-js-sdk/subscription",
    "commits_url": "https://api.github.com/repos/firebase/firebase-js-sdk/commits{/sha}",
    "git_commits_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/commits{/sha}",
    "comments_url": "https://api.github.com/repos/firebase/firebase-js-sdk/comments{/number}",
    "issue_comment_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/comments{/number}",
    "contents_url": "https://api.github.com/repos/firebase/firebase-js-sdk/contents/{+path}",
    "compare_url": "https://api.github.com/repos/firebase/firebase-js-sdk/compare/{base}...{head}",
    "merges_url": "https://api.github.com/repos/firebase/firebase-js-sdk/merges",
    "archive_url": "https://api.github.com/repos/firebase/firebase-js-sdk/{archive_format}{/ref}",
    "downloads_url": "https://api.github.com/repos/firebase/firebase-js-sdk/downloads",
    "issues_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues{/number}",
    "pulls_url": "https://api.github.com/repos/firebase/firebase-js-sdk/pulls{/number}",
    "milestones_url": "https://api.github.com/repos/firebase/firebase-js-sdk/milestones{/number}",
    "notifications_url": "https://api.github.com/repos/firebase/firebase-js-sdk/notifications{?since,all,participating}",
    "labels_url": "https://api.github.com/repos/firebase/firebase-js-sdk/labels{/name}",
    "releases_url": "https://api.github.com/repos/firebase/firebase-js-sdk/releases{/id}",
    "deployments_url": "https://api.github.com/repos/firebase/firebase-js-sdk/deployments",
    "created_at": "2017-04-24T21:52:11Z",
    "updated_at": "2017-06-06T14:42:37Z",
    "pushed_at": "2017-06-05T20:13:13Z",
    "git_url": "git://github.com/firebase/firebase-js-sdk.git",
    "ssh_url": "git@github.com:firebase/firebase-js-sdk.git",
    "clone_url": "https://github.com/firebase/firebase-js-sdk.git",
    "svn_url": "https://github.com/firebase/firebase-js-sdk",
    "homepage": "https://firebase.google.com/docs/web/setup",
    "size": 10781,
    "stargazers_count": 384,
    "watchers_count": 384,
    "language": "JavaScript",
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": true,
    "has_pages": false,
    "forks_count": 19,
    "mirror_url": null,
    "open_issues_count": 10,
    "forks": 19,
    "open_issues": 10,
    "watchers": 384,
    "default_branch": "master"
  },
  "organization": {
    "login": "firebase",
    "id": 1335026,
    "url": "https://api.github.com/orgs/firebase",
    "repos_url": "https://api.github.com/orgs/firebase/repos",
    "events_url": "https://api.github.com/orgs/firebase/events",
    "hooks_url": "https://api.github.com/orgs/firebase/hooks",
    "issues_url": "https://api.github.com/orgs/firebase/issues",
    "members_url": "https://api.github.com/orgs/firebase/members{/member}",
    "public_members_url": "https://api.github.com/orgs/firebase/public_members{/member}",
    "avatar_url": "https://avatars1.githubusercontent.com/u/1335026?v=3",
    "description": ""
  },
  "sender": {
    "login": "tjwoon",
    "id": 5500559,
    "avatar_url": "https://avatars3.githubusercontent.com/u/5500559?v=3",
    "gravatar_id": "",
    "url": "https://api.github.com/users/tjwoon",
    "html_url": "https://github.com/tjwoon",
    "followers_url": "https://api.github.com/users/tjwoon/followers",
    "following_url": "https://api.github.com/users/tjwoon/following{/other_user}",
    "gists_url": "https://api.github.com/users/tjwoon/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/tjwoon/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/tjwoon/subscriptions",
    "organizations_url": "https://api.github.com/users/tjwoon/orgs",
    "repos_url": "https://api.github.com/users/tjwoon/repos",
    "events_url": "https://api.github.com/users/tjwoon/events{/privacy}",
    "received_events_url": "https://api.github.com/users/tjwoon/received_events",
    "type": "User",
    "site_admin": false
  }
}

The logs show that the label config was correctly detected:
{
    auth: {
        regex: 'Product:[\\s]+?[Aa]uth',
        email<EMAIL_ADDRESS>    },
    database: {
        regex: 'Product:[\\s]+?[Dd]atabase',
        email<EMAIL_ADDRESS>    },
    messaging: {
        regex: 'Product:[\\s]+?[Mm]essaging'
    },
    storage: {
        regex: 'Product:[\\s]+?[Ss]torage',
        email<EMAIL_ADDRESS>    }
}

I copied that webhook data into a local test and it passed immediately, choosing the 'database' label.  Yet the logs tell a different story.  So this one is a bit of a mystery for me.

I just had another one of these this morning, body is below.

Webhook POST Body
{
  "action": "opened",
  "issue": {
    "url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/59",
    "repository_url": "https://api.github.com/repos/firebase/firebase-js-sdk",
    "labels_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/59/labels{/name}",
    "comments_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/59/comments",
    "events_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/59/events",
    "html_url": "https://github.com/firebase/firebase-js-sdk/issues/59",
    "id": 236509053,
    "number": 59,
    "title": "[Messaging] onTokenRefresh never triggers",
    "user": {
      "login": "jsayol",
      "id": 2029586,
      "avatar_url": "https://avatars2.githubusercontent.com/u/2029586?v=3",
      "gravatar_id": "",
      "url": "https://api.github.com/users/jsayol",
      "html_url": "https://github.com/jsayol",
      "followers_url": "https://api.github.com/users/jsayol/followers",
      "following_url": "https://api.github.com/users/jsayol/following{/other_user}",
      "gists_url": "https://api.github.com/users/jsayol/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/jsayol/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/jsayol/subscriptions",
      "organizations_url": "https://api.github.com/users/jsayol/orgs",
      "repos_url": "https://api.github.com/users/jsayol/repos",
      "events_url": "https://api.github.com/users/jsayol/events{/privacy}",
      "received_events_url": "https://api.github.com/users/jsayol/received_events",
      "type": "User",
      "site_admin": false
    },
    "labels": [

    ],
    "state": "open",
    "locked": false,
    "assignee": null,
    "assignees": [

    ],
    "milestone": null,
    "comments": 0,
    "created_at": "2017-06-16T15:01:32Z",
    "updated_at": "2017-06-16T15:01:32Z",
    "closed_at": null,
    "body": "### [REQUIRED] Describe your environment\r\n\r\n  * Operating System version: Linux\r\n  * Firebase SDK version: 4.1.2\r\n  * Firebase Product: messaging\r\n\r\n### [REQUIRED] Describe the problem\r\nI noticed that nothing ever gets _next_'ed into `tokenRefreshObserver_`, meaning that the function or observer passed to `firebase.messaging.onTokenRefresh()` never gets triggered.\r\n\r\nSee: [src/messaging/controllers/window-controller.ts#L72-L75](https://github.com/firebase/firebase-js-sdk/blob/fd0728138d88c454f8e38a78f35d831d6365070c/src/messaging/controllers/window-controller.ts#L72-L75)\r\n\r\n#### Steps to reproduce:\r\nn/a\r\n\r\n#### Relevant Code:\r\nSee linked file.\r\n"
  },
  "repository": {
    "id": 89290483,
    "name": "firebase-js-sdk",
    "full_name": "firebase/firebase-js-sdk",
    "owner": {
      "login": "firebase",
      "id": 1335026,
      "avatar_url": "https://avatars1.githubusercontent.com/u/1335026?v=3",
      "gravatar_id": "",
      "url": "https://api.github.com/users/firebase",
      "html_url": "https://github.com/firebase",
      "followers_url": "https://api.github.com/users/firebase/followers",
      "following_url": "https://api.github.com/users/firebase/following{/other_user}",
      "gists_url": "https://api.github.com/users/firebase/gists{/gist_id}",
      "starred_url": "https://api.github.com/users/firebase/starred{/owner}{/repo}",
      "subscriptions_url": "https://api.github.com/users/firebase/subscriptions",
      "organizations_url": "https://api.github.com/users/firebase/orgs",
      "repos_url": "https://api.github.com/users/firebase/repos",
      "events_url": "https://api.github.com/users/firebase/events{/privacy}",
      "received_events_url": "https://api.github.com/users/firebase/received_events",
      "type": "Organization",
      "site_admin": false
    },
    "private": false,
    "html_url": "https://github.com/firebase/firebase-js-sdk",
    "description": "Firebase Javascript SDK",
    "fork": false,
    "url": "https://api.github.com/repos/firebase/firebase-js-sdk",
    "forks_url": "https://api.github.com/repos/firebase/firebase-js-sdk/forks",
    "keys_url": "https://api.github.com/repos/firebase/firebase-js-sdk/keys{/key_id}",
    "collaborators_url": "https://api.github.com/repos/firebase/firebase-js-sdk/collaborators{/collaborator}",
    "teams_url": "https://api.github.com/repos/firebase/firebase-js-sdk/teams",
    "hooks_url": "https://api.github.com/repos/firebase/firebase-js-sdk/hooks",
    "issue_events_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/events{/number}",
    "events_url": "https://api.github.com/repos/firebase/firebase-js-sdk/events",
    "assignees_url": "https://api.github.com/repos/firebase/firebase-js-sdk/assignees{/user}",
    "branches_url": "https://api.github.com/repos/firebase/firebase-js-sdk/branches{/branch}",
    "tags_url": "https://api.github.com/repos/firebase/firebase-js-sdk/tags",
    "blobs_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/blobs{/sha}",
    "git_tags_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/tags{/sha}",
    "git_refs_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/refs{/sha}",
    "trees_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/trees{/sha}",
    "statuses_url": "https://api.github.com/repos/firebase/firebase-js-sdk/statuses/{sha}",
    "languages_url": "https://api.github.com/repos/firebase/firebase-js-sdk/languages",
    "stargazers_url": "https://api.github.com/repos/firebase/firebase-js-sdk/stargazers",
    "contributors_url": "https://api.github.com/repos/firebase/firebase-js-sdk/contributors",
    "subscribers_url": "https://api.github.com/repos/firebase/firebase-js-sdk/subscribers",
    "subscription_url": "https://api.github.com/repos/firebase/firebase-js-sdk/subscription",
    "commits_url": "https://api.github.com/repos/firebase/firebase-js-sdk/commits{/sha}",
    "git_commits_url": "https://api.github.com/repos/firebase/firebase-js-sdk/git/commits{/sha}",
    "comments_url": "https://api.github.com/repos/firebase/firebase-js-sdk/comments{/number}",
    "issue_comment_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues/comments{/number}",
    "contents_url": "https://api.github.com/repos/firebase/firebase-js-sdk/contents/{+path}",
    "compare_url": "https://api.github.com/repos/firebase/firebase-js-sdk/compare/{base}...{head}",
    "merges_url": "https://api.github.com/repos/firebase/firebase-js-sdk/merges",
    "archive_url": "https://api.github.com/repos/firebase/firebase-js-sdk/{archive_format}{/ref}",
    "downloads_url": "https://api.github.com/repos/firebase/firebase-js-sdk/downloads",
    "issues_url": "https://api.github.com/repos/firebase/firebase-js-sdk/issues{/number}",
    "pulls_url": "https://api.github.com/repos/firebase/firebase-js-sdk/pulls{/number}",
    "milestones_url": "https://api.github.com/repos/firebase/firebase-js-sdk/milestones{/number}",
    "notifications_url": "https://api.github.com/repos/firebase/firebase-js-sdk/notifications{?since,all,participating}",
    "labels_url": "https://api.github.com/repos/firebase/firebase-js-sdk/labels{/name}",
    "releases_url": "https://api.github.com/repos/firebase/firebase-js-sdk/releases{/id}",
    "deployments_url": "https://api.github.com/repos/firebase/firebase-js-sdk/deployments",
    "created_at": "2017-04-24T21:52:11Z",
    "updated_at": "2017-06-16T05:41:47Z",
    "pushed_at": "2017-06-16T14:48:20Z",
    "git_url": "git://github.com/firebase/firebase-js-sdk.git",
    "ssh_url": "git@github.com:firebase/firebase-js-sdk.git",
    "clone_url": "https://github.com/firebase/firebase-js-sdk.git",
    "svn_url": "https://github.com/firebase/firebase-js-sdk",
    "homepage": "https://firebase.google.com/docs/web/setup",
    "size": 11149,
    "stargazers_count": 429,
    "watchers_count": 429,
    "language": "JavaScript",
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": true,
    "has_pages": false,
    "forks_count": 25,
    "mirror_url": null,
    "open_issues_count": 15,
    "forks": 25,
    "open_issues": 15,
    "watchers": 429,
    "default_branch": "master"
  },
  "organization": {
    "login": "firebase",
    "id": 1335026,
    "url": "https://api.github.com/orgs/firebase",
    "repos_url": "https://api.github.com/orgs/firebase/repos",
    "events_url": "https://api.github.com/orgs/firebase/events",
    "hooks_url": "https://api.github.com/orgs/firebase/hooks",
    "issues_url": "https://api.github.com/orgs/firebase/issues",
    "members_url": "https://api.github.com/orgs/firebase/members{/member}",
    "public_members_url": "https://api.github.com/orgs/firebase/public_members{/member}",
    "avatar_url": "https://avatars1.githubusercontent.com/u/1335026?v=3",
    "description": ""
  },
  "sender": {
    "login": "jsayol",
    "id": 2029586,
    "avatar_url": "https://avatars2.githubusercontent.com/u/2029586?v=3",
    "gravatar_id": "",
    "url": "https://api.github.com/users/jsayol",
    "html_url": "https://github.com/jsayol",
    "followers_url": "https://api.github.com/users/jsayol/followers",
    "following_url": "https://api.github.com/users/jsayol/following{/other_user}",
    "gists_url": "https://api.github.com/users/jsayol/gists{/gist_id}",
    "starred_url": "https://api.github.com/users/jsayol/starred{/owner}{/repo}",
    "subscriptions_url": "https://api.github.com/users/jsayol/subscriptions",
    "organizations_url": "https://api.github.com/users/jsayol/orgs",
    "repos_url": "https://api.github.com/users/jsayol/repos",
    "events_url": "https://api.github.com/users/jsayol/events{/privacy}",
    "received_events_url": "https://api.github.com/users/jsayol/received_events",
    "type": "User",
    "site_admin": false
  }
}

@jshcrowthe looks like we don't have 'messaging' as one of the configured products for that repo:
Found config:  { auth:
   { regex: 'Product:[\\s]+?[Aa]uth',
     email<EMAIL_ADDRESS>},
  database:
   { regex: 'Product:[\\s]+?[Dd]atabase',
     email<EMAIL_ADDRESS>},
  messaging: { regex: 'Product:[\\s]+?[Mm]essaging' },
  storage:
   { regex: 'Product:[\\s]+?[Ss]torage',
     email<EMAIL_ADDRESS>} }

So I think that one is WAI.

@jshcrowthe interestingly I am seeing errors like this in the logs when it tries to label the issues:
[error] { [Error: {"message":"Issue not viewable by firebase-oss-bot","documentation_url":"https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue"}]

Any idea about that?

Execution log from js-sdk issue 59:
https://console.firebase.google.com/project/ossbot-f0cad/functions/logs?search=7yvlsop6dp48&severity=DEBUG


API discussion

I have no idea how to approach this yet.
Lua ECS implementations for reference:
entitas-lua
tiny-ecs
ecs-lua (tiny-ecs fork)

My old lua API draft for flecs:
https://gist.github.com/ArnCarveris/52c077d32dd1e84ad8bc1a2e89dfdc8d

Looks like ecs.add() is not aware of type roles and the API for adding them is slightly different, this could probably fixed by checking the arg type and using ecs_add_entity() instead.


Prepare 1.0

Coverage decreased (-11.4%) to 63.636% when pulling 5c65092a959b9aaecb887ca6be5aecc707048755 on prepare-1.0 into 782763e5a528822c9d229ec30b9a1b9b20fd600e on master.


TreeEditor pagination: Deactivate pagination, but find ways to not load really big trees upfront

Maybe we can adapt part of the HSLU mobile nav code here. It does exactly that.

Our tree code is quite fast with trees up to a few hundred nodes.
Further improvements are probably best applied here: https://github.com/django-mptt/django-mptt/blob/9018e708f93de420f8c711a388d184e6963d3ab5/mptt/admin.py#L94


Can't define default without name

new Prompt({ message:"Are you Sure?", default:false }).run()

TypeError: expected name to be a non-empty string
    at new Question (/project/node_modules/prompt-question/index.js:61:11)
    at Confirm.Prompt (/project/node_modules/prompt-base/index.js:50:16)
    at new Confirm (/project/node_modules/prompt-confirm/index.js:14:10)
    at promiseTry.then (/project/scripts/dropdb.js:27:13)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:169:7)
    at Function.Module.runMain (module.js:607:11)
    at startup (bootstrap_node.js:158:16)
    at bootstrap_node.js:575:3

I don't even know what name is for and I shouldn't have to define it.

Hmm, well I haven't yet tried the enquirer library, but will shortly. For my current use case, I have no use for an answer object as I only have one prompt.

For my current use case, I have no use for an answer object as I only have one prompt.

I've thought about removing the need to have a name, but we'd still need to enforce it in enquirer. Even though you don't use enquirer it seems like it would make the experience inconsistent. just my 2c

How about auto-generated values ("answer1", etc) by default?

How about auto-generated values ("answer1", etc) by default?

Honestly, I think we should just go with your initial gut reaction and remove the requirement for name. If that was your perception, then I'll assume you're not the only one that will have that reaction. I'm fine with it


Refactor complex asin/acos/asinh/acosh to use asin_acos_kernel. Improve real acos accuracy.

As in the title.
This PR introduces asin_acos_kernel operation that implements modified Hull et al algorithm for evaluating complex asin, acos, asinh, and acosh operations. This task corresponds to the refactor request in https://github.com/openxla/stablehlo/pull/2411#discussion_r1662810017 and it resolves https://github.com/pearu/functional_algorithms/issues/15.
In addition, the PR also improves the real acos accuracy as a fix to https://github.com/openxla/stablehlo/issues/2452 . As a result, the accuracy of single-precision real acos improved as follows (using 1 million samples):
                             main       this PR
ULP difference == 0 count is 971713  -> 999045
ULP difference == 1 count is 28158   ->    962
ULP difference == 2 count is 54      ->      0
ULP difference == 3 count is 20      ->      0
ULP difference >= 4 count is 62      ->      0

The cause of the revert by PR https://github.com/openxla/stablehlo/pull/2449 (acos(-1) -> 0 while expecting pi) is fixed in functional_algorithms which now also generates extra samples that correspond to limiting values of real acos. For instance, acos(-1)->pi, acos(nextafter(-1, -inf))->nan, and acos(nextafter(-1, int)-> approx pi are now included in the tests.
The required functional_algorithms version is now 0.9 which includes a fix to fa.utils.real_samples to return samples that are distributed uniformly with respect to ULP differences of neighboring samples. This fix lead to updates of stablehlo/tests/math/*.mlir.

^ @GleasonK


fix: argocd CVE

Description
addressing CVE in github.com/argoproj/argo-cd/v2 v2.8.8 (bumping to v2.10.2)
Issue ticket number and link
N/A
Type of change

[X] CVE fix
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

How Has This Been Tested?
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
Checklist:

[x] I have performed a self-review of my code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have added meaningful description with JIRA/GitHub issue key(if applicable), for example HASSuiteDescribe("STONE-123456789 devfile source")
[ ] I have updated labels (if needed)

/retest-required


Clarity on source code being added to a release

Code of Conduct

[X] I have read and agree to the GitHub Docs project's Code of Conduct

What article on docs.github.com is affected?
https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases
What changes are you suggesting?
I am just learning about Github releases and was wondering why the source code is always part of the assets in every release. This document does not, in my opinion, touch on that. It would be nice if people new to working with releases know that the source code would be part of the assets of every release.
Additional information
No response

github hacker still massage in github chat i not massage any thing ,github hacker looking for help without email she using my email n account

github hacker still massage in github chat i not massage any thing ,github hacker looking for help without email she using my email n account
Github is my account n my email

Hey @bigboybamo! Thanks for opening this. I think this is a very good question!
Releases are based on tags and including binaries and other assets is optional, you'll find projects on GitHub that use releases to distribute specific versions of their codebase. I can definitely understand wondering why these files are being automatically included in every release.
Let's add a short paragraph to "About releases" that mentions that when you create a release, GitHub will also include a links to download a zip file and a tarball containing the contents of the repository at the point of the tag's creation. That should help people to expect those files and confirm that they're meant to be there!
I think this can be slotted in just before a paragraph that already mentions the files, "People with admin permissions to a repository can choose whether Git Large File Storage (Git LFS) objects are included in the ZIP files and tarballs that GitHub creates for each release." The new paragraph will provide some needed context for this too.
You, or anyone else, is welcome to open a PR to make this change. I'll add a label now which will trigger a comment with some more instructions ✨


Can't have multiple isfs connections to the same real server with different credentials (via different intersystems.server entries)

I have a workspace defined with two entries in intersystems.servers pointing to the same host/port/scheme but with different usernames. Trying to use an isfs folder with each of the server definitions, it seems that both are picking up the same username.
Is this expected / am I just trying to do something crazy? (Not sure if this falls here or in the main VSCode extension - feel free to move / redirect.)
Using the latest version of all extensions as of now:
intersystems-servermanager: v3.6.2
vscode-objectscript: v2.12.7

@isc-tleavitt I couldn't reproduce this. Here's the server settings and code-workspace that worked for me:
"intersystems.servers": {
        "iris": {
            "webServer": {
                "scheme": "http",
                "host": "localhost",
                "port": 52773,
                "pathPrefix": "/iris"
            },
            "username": "_SYSTEM",
            "password": "<pwd>"
        },
        "local": {
            "webServer": {
                "scheme": "http",
                "host": "localhost",
                "port": 52773,
                "pathPrefix": "/iris"
            },
            "username": "SuperUser",
            "password": "<pwd>"
        },
        "/default": "iris"
    },

{
    "folders": [
        {
            "name": "iris:%SYS",
            "uri": "isfs://iris:%sys/"
        },
        {
            "name": "local:USER",
            "uri": "isfs://local:user/"
        }
    ],
    "settings": {
        "editor.insertSpaces": true,
        "editor.tabSize": 4,
        "editor.detectIndentation": false,
        //"intersystems.language-server.trace.server": "verbose",
        "objectscript.showExplorer": false
    },
    "launch": {
        "configurations": [
            {
                "name": "Attach",
                "type": "objectscript",
                "request": "attach"
            }
        ]
    }
}

Closing due to inactivity.


link types

It would be helpful, if links could have a type, like: blocks, references, relates to, groups, ...
A link type should also have its own color.
And :needsflow: should get an argument to show all links or only specific types on its diagrams.

Fixed by #89


Upload to blob fails with timeout error much sooner than timeout expires

blob_service.create_blob_from_path(container, blob_path, file, content_settings=content_settings, timeout=300)

$ time make upload-big-files
./src/7.upload-2-azure.sh    16041-big-files1   az--repoX
Init of upload_pack.py
Latest local pack found: <IP_ADDRESS>3.161011-112303Z
Adding additional mime content types
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): repoX.blob.core.windows.net
DEBUG:requests.packages.urllib3.connectionpool:"GET /repoX-pub?restype=container HTTP/1.1" 200 None
DEBUG:requests.packages.urllib3.connectionpool:"HEAD /repoX-pub/repoX/games/big-files/files-v1/latest-build.cfg HTTP/1.1" 200 0
blob: repoX/games/big-files/files-v1/latest-build.cfg EXISTS
DEBUG:requests.packages.urllib3.connectionpool:"GET /repoX-pub/repoX/games/big-files/files-v1/latest-build.cfg HTTP/1.1" 206 73
DEBUG:requests.packages.urllib3.connectionpool:"HEAD /repoX-pub/repoX/games/big-files/files-v1/<IP_ADDRESS>3-161010-165722/.ok HTTP/1.1" 404 0
Local version (<IP_ADDRESS>3.161011-112303Z) is equal or newer than Azure version (<IP_ADDRESS>3-161010-165722)
uploading webgl.memgz
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (2): repoX.blob.core.windows.net
DEBUG:requests.packages.urllib3.connectionpool:"PUT /repoX-pub/repoX/games/big-files/files-v1/<IP_ADDRESS>3.161011-112303Z/bin.webgl/webgl.mem?timeout=300 HTTP/1.1" 201 None
uploading webgl.datagz
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (3): repoX.blob.core.windows.net
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (4): repoX.blob.core.windows.net
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (5): repoX.blob.core.windows.net
########################################################
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 544, in urlopen
    body=body, headers=headers)
  File "/usr/local/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 349, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1106, in request
    self._send_request(method, url, body, headers)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1151, in _send_request
    self.endheaders(body)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1102, in endheaders
    self._send_output(message_body)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 936, in _send_output
    self.send(message_body)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 908, in send
    self.sock.sendall(data)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 891, in sendall
    v = self.send(data[count:])
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 861, in send
    return self._sslobj.write(data)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 586, in write
    return self._sslobj.write(data)
socket.timeout: The write operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/requests/adapters.py", line 370, in send
    timeout=timeout
  File "/usr/local/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 597, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/local/lib/python3.5/site-packages/requests/packages/urllib3/util/retry.py", line 245, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/local/lib/python3.5/site-packages/requests/packages/urllib3/packages/six.py", line 309, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 544, in urlopen
    body=body, headers=headers)
  File "/usr/local/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 349, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1106, in request
    self._send_request(method, url, body, headers)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1151, in _send_request
    self.endheaders(body)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 1102, in endheaders
    self._send_output(message_body)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 936, in _send_output
    self.send(message_body)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/client.py", line 908, in send
    self.sock.sendall(data)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 891, in sendall
    v = self.send(data[count:])
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 861, in send
    return self._sslobj.write(data)
  File "/usr/local/Cellar/python3/3.5.2_2/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 586, in write
    return self._sslobj.write(data)
requests.packages.urllib3.exceptions.ProtocolError: ('Connection aborted.', timeout('The write operation timed out',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/azure/storage/storageclient.py", line 212, in _perform_request
    response = self._httpclient.perform_request(request)
  File "/usr/local/lib/python3.5/site-packages/azure/storage/_http/httpclient.py", line 114, in perform_request
    proxies=self.proxies)
  File "/usr/local/lib/python3.5/site-packages/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.5/site-packages/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.5/site-packages/requests/adapters.py", line 415, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', timeout('The write operation timed out',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/myroot/src/azure_module.py", line 92, in upload_azure_blob
    blob_service.create_blob_from_path(container, blob_path, file, content_settings=content_settings, timeout=300)
  File "/usr/local/lib/python3.5/site-packages/azure/storage/blob/blockblobservice.py", line 393, in create_blob_from_path
    timeout=timeout)
  File "/usr/local/lib/python3.5/site-packages/azure/storage/blob/blockblobservice.py", line 490, in create_blob_from_stream
    timeout=timeout)
  File "/usr/local/lib/python3.5/site-packages/azure/storage/blob/blockblobservice.py", line 814, in _put_blob
    return self._perform_request(request, _parse_base_properties)
  File "/usr/local/lib/python3.5/site-packages/azure/storage/storageclient.py", line 266, in _perform_request
    raise ex
  File "/usr/local/lib/python3.5/site-packages/azure/storage/storageclient.py", line 242, in _perform_request
    raise AzureException(ex.args[0])
azure.common.AzureException: ('Connection aborted.', timeout('The write operation timed out',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/myroot/src/upload_pack.py", line 158, in <module>
    handle_deploy_target(deploy_yaml, uploader_yaml)
  File "/myroot/src/upload_pack.py", line 130, in handle_deploy_target
    upload_pack_files_to_azure(pack_upload_patterns, container, game_azure_base_dir, blob_service)
  File "/myroot/src/upload_pack.py", line 63, in upload_pack_files_to_azure
    azure_module.upload_azure_blob(file, container, dest_path, blob_service, content_encoding, cache_control)
  File "/myroot/src/azure_module.py", line 95, in upload_azure_blob
    logger.exception(error)
NameError: name 'error' is not defined
make: *** [upload-big-files] Error 1

real  2m10.694s
user  0m1.964s
sys 0m1.381s

Hi @joaocc,
Thanks for bringing up your issue here!
Looks like you are hitting the socket timeout. The value for socket timeout which is being passed by our library to lower layers(request and urllib3) is 11 seconds(please refer to this link for more context on why so).
Note that this is different from the server timeout(the 300 seconds) you have specified through the API.
A few questions to help us clarify:

How often do you see this issue?
What is the blob size you are using? The stack trace shows a blob size < 64MB, have you tried different sizes?

Thanks!

Hi,
We have since moved to calling CLI (the one you install via "npm install -g azure-cli").
We have some small files and some big ones. The big ones can be around 100 or 150MB.
Thx

Facing the same issue, with a 3MB file. Upload works with Storage Explorer. The timeout happens after 2min roughly. Why not make the socket timeout bigger than 11 seconds or at least make it configurable?

I'm seeing the same issue, with anything above or around 3MB.

Thanks for your input guys.
Our next release we will generously increase the default socket timeout value and also look into making it configurable for more control.

+1 for this issue; for the record, I tried monkey-patching the socket timeout on 0.34 back to the value it had in 0.32, and that did not solve my timeout issues. Downgrading to 0.32 did, however.
Making this more easily configurable strikes me as an essential feature.

+1

+1

Increasing SOCKET_TIMEOUT in azure/storage/_constants.py to 360 sec helps for me.

Looks like you are hitting the socket timeout. The value for socket timeout which is being passed by our library to lower layers(request and urllib3) is 11 seconds(please refer to this link for more context on why so).

After setting  articulis.storage._constants.SOCKET_TIMEOUT = None (essentially leaving it up to requests to determine a sane client-side timeout) our problems went away.
How about you expose a kwarg to allow users to override it?

We have made the socket timeout configurable through the service objects, and increased the default value to 20 seconds. I will make a release shortly.
However, I would like to point out that you should always set a socket timeout, if not your request might hang forever. You can refer to the Requests documentation. Setting it to None is NOT recommended.

The fix has been released with 0.34.3. Thanks for your patience. 😃

The fix has been released with 0.34.3. Thanks for your patience. 😃

Nothing is fixed!
 I understand that things can be frustrating sometimes.
The original issue was fixed as described, but if you are experiencing a similar issue, please post a new issue with more info instead.
I should also clarify that this SDK is not actively supported any more. The new version is a complete rewrite, and is located here: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/storage. Please use the new version instead.


!$final_v2e_command gives error

v2e -i /content/v2e_tutorial_video.avi -o /content/v2e-output --overwrite --unique_output_folder false --dvs_h5 events.h5 --dvs_aedat2 None --dvs_text None --no_preview --dvs_exposure duration .033 --input_frame_rate 30 --input_slowmotion_factor 1 --disable_slomo --auto_timestamp_resolution false --pos_thres 0.2 --neg_thres 0.2 --sigma_thres 0.03 --cutoff_hz 30 --leak_rate_hz 0.1 --shot_noise_rate_hz 5 --dvs346
ERROR:v2ecore.emulator:Output file exception "Unable to create file (unable to lock file, errno = 11, error message = 'Resource temporarily unavailable')" (maybe you need to specify a supported DVS camera type?)
Traceback (most recent call last):
File "/usr/local/bin/v2e", line 8, in
sys.exit(main())
File "/usr/local/bin/v2e.py", line 530, in main
emulator = EventEmulator(
File "/usr/local/lib/python3.8/dist-packages/v2ecore/emulator.py", line 301, in init
raise e
File "/usr/local/lib/python3.8/dist-packages/v2ecore/emulator.py", line 274, in init
self.dvs_h5 = h5py.File(path, "w")
File "/usr/local/lib/python3.8/dist-packages/h5py/_hl/files.py", line 424, in init
fid = make_fid(name, mode, userblock_size,
File "/usr/local/lib/python3.8/dist-packages/h5py/_hl/files.py", line 196, in make_fid
fid = h5f.create(name, h5f.ACC_TRUNC, fapl=fapl, fcpl=fcpl)
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5f.pyx", line 116, in h5py.h5f.create
OSError: Unable to create file (unable to lock file, errno = 11, error message = 'Resource temporarily unavailable')

I haven't seen that error but do not ever use h5 output. Does it work
with aedat output format?

@yazidoudou18 feels like the HDF5 is trying to create a file but it couldn't.
Can you try a dummy example something like
import h5py

file = h5py.File("my_new_file", "w")

and see if this triggers any errors. Also, the path of the result folder, does it allow you to write files?

@duguyue100 The example was able to produce a file without triggering any errors. However, the 'final_v2e_command' was not able to output any files and caused the same errors.

I can try to reproduce it this weekend, but I don't have v2e env setup
right now. We are fighting paper deadline here.
Does the aedat and text output work correctly for you? Just turn off h5
output to check and turn on aedat and text outputs. Also you should
probably not specify --no_preview (or whatever disables video preview)
to check the output visually.

Thank you, Tobi. I have not yet set up the v2e environment. All the errors I have encountered so far are based on using v2e in Google Colab.

You're welcome. I didn't have a chance to try anything with v2e yet. I
hope to find some time this weekend. I think putting a breakpoint there
would probably show the problem in 5 minutes, but I think colab is not
good for this kind of debugging? I bet it is just some restriction in
colab about creating files?
Does aedat2 and text output work in colab? The paths are probably
derived by the same chunk of code.

I just tried the below command and it run to completion with the significant warning that the IIR lowpass filter is definitely not accurate for default cutoff of 300 Hz
v2e -i input/tennis.mov -o output/tennis --overwrite --unique_output_folder false --dvs_h5 events.h5 --dvs_aedat2 None --dvs_text None --no_preview --dvs_exposure duration .033 --input_frame_rate 30 --input_slowmotion_factor 1 --disable_slomo --auto_timestamp_resolution false --pos_thres 0.2 --neg_thres 0.2 --sigma_thres 0.03 --cutoff_hz 30 --leak_rate_hz 0.1 --shot_noise_rate_hz 5 --dvs346

Note that this was in the cloned local v2e env, not the colab workspace.


Fixed an issue where it was impossible to create an event if the edit…

Fixed an issue where it was impossible to create an event if the edit interval was set to 1440
Description of PR...
changed the UI time picker to use 1439 instead of 1440 or it would endlessly try to add the same time which I guess is not permitted by design. This will then show a start of 00:00 and and end of 23:59 in a 24 hours system or 12:00am to 11:59pm in a 12 hours system.
Changes made

Corrected the issue
tested
updated release notes

PR Template Checklist

[X] Fixes Bug
[ ] Feature solution
[ ] Other

Please mark which issue is solved
Close #12

This pull request is now managed with CodeReviewHub. Refresh.


Add previous discussions list

Al discussions are stored in a local qslite3 database. It would be a good thing to add a left bar with the list of discussions so that people can reopen and visualize previous discussions.
Any help is welcome.

I will create the UI for this as well as the settings section. I will combine them.

Something like this on md and up displays.

On sm displays becomes a row under the header.

Please refer to PR #6 for initial implementation of the front end.

perfect. PR acccepted. Thanks. I'll have to add the backend wizardry to recover the discussions from the database and populate a list of entries.


Optional Chaining for Vue compiler on the fly (Standalone Script) [Old Browser]

What problem does this feature solve?
On the old browser (like Safari on iOS < 13.4, IE 11...), the Optional Chaining will break the Vue App. We're running VueApp with Standalone Script (Not SPA), so we don't have any transpiler tool to convert Optional Changing in the template (Backend renders) to ES5 syntax
What does the proposed API look like?
Should not break the VueApp. Does have any options for us to solve this issue?

Which script do you specifically use? We already transformed all new syntaxes into es2015. See<EMAIL_ADDRESS>


export booster datastructure

I have trained boosted trees. I can dump the model and see the trees in a readable format. I have a use case where I need the tree datastructure similar to the one  given by scikit GBDT(non xgboost version). I have searched all over internet but couldnt find how to return the datastructure.
Is there a way to achieve what I want to do?
I am using python interface.

I don't think there is currently a way to convert XGBoost booster to scikit-learn format. You could probably parse the model dump and assemble the GBDT structure of scikit-learn manually.


Exceptions go to Sentry but not to log file for application

Currently using version 1.6.2 of sentry-php as a composer dependency and I'm seeing this issue with the library:
https://stackoverflow.com/questions/35274672/empty-php-logs-when-using-sentry
So an exception gets sent to Sentry, but the error message doesn't go to the log for the application. Is this a known issue? Is there a workaround or some configuration that needs to be set?

OK looks like it's fixed in 1.7.0 (#421)
https://github.com/getsentry/sentry-php/blob/master/CHANGELOG.md
This is a pretty bad regression IMO, any idea when that will be officially tagged?

I think only @dcramer can answer this..

Fwiw we don't consider this a regression as behavior never existed before.
@jean85 I can write up general docs on how I prepare releases if you're interested in shipping 1.7.0?

@dcramer absolutely! Let us know how the flow works; I imagine that you still have to authorize a new release, but we still can do all the heavy lifting for you ;)

https://github.com/getsentry/sentry-php/pull/470

I'm going to close this out, but we'll get 1.7.0 out by EOW.

That's great news, thanks.

@vbjordan sorry about that, shoudl be live now


CTD after 20 mins of playing

As the title ays really. I keep crashing to desktop after about 20 mins of playing. Tried multiple runs.

It could be that your pagefile size is too small. Search for D6DDDA here for more info: https://www.nexusmods.com/skyrimspecialedition/articles/3031
https://www.thewindowsclub.com/increase-page-file-size-virtual-memory-windows - here's a link to increase it.


Doppler effect example

Describe the new feature or enhancement
The Doppler effect underlies many types of ultrasound imaging: Color Doppler, functional ultrasound, etc. Request: example of Doppler effect, similar to: http://www.k-wave.org/documentation/example_tvsp_doppler_effect.php
Please describe how you would use this new feature.
If NDK/Stride properly simulates the Doppler effect, that would enable simulating ultrasound imaging modalities that rely on the Doppler effect.
Describe your proposed implementation
NDK's backend Stride supports time-varying medium properties: https://stridecodes.readthedocs.io/en/latest/stride/api/problem/data.html#stride.problem.data.ScalarField . We could model the movement of a particle by its changes to the medium's acoustic properties
Describe possible alternatives
It might be simpler for the user to specify a ParticleField with particles that move within the medium. However, Stride's IsoAcousticDevito solver currently does not support ParticleFields in its implementation.

We implemented one version of this in a exploratory notebook (private repo) by using a time-dependent medium: https://github.com/agencyenterprise/bci-experiments/pull/91 . However, it seems like the way Doppler imaging is done in practice is to use multiple pulse echos (e.g. 10 echos). The Doppler shift is then measured by the phase shifts between echos.
That in-practice approach (using multiple pulse repetitions) is a bit difficult with NDK as is, because each simulation is quite slow. We can re-visit the in-practice approach when we have faster simulations. The repeated simulations would also have a lot of redundant information, so caching info between repetitions could speed that up as well.
On doing Doppler via pulse repetitions from Montaldo et al. (2022):

The Doppler effect is usually understood as the shift in frequency (f ) that occurs when a sound source (i.e., an ambulance siren) is moving: The sound seems to have a higher pitch when the source moves toward us and a lower pitch when it moves away from us. This effect also works for a reflected sound: When a sound is emitted by a static source and reflected by a mobile target, its frequency is shifted by f = 2v/c f0 when the reflector is moving toward the source and by f = −2v/c f0 when it is moving away from the source (here, f0 is the frequency of the source, v is the velocity of the target in the direction of the source, and c is the speed of sound). However, to localize echoes in depth, ultrasound scanners must use short ultrasound pulses (typically two to four cycles of ultrasound at the emission frequency). It is not technically possible to directly measure f from these short pulses, unlike for continuous sound waves, as in the ambulance siren example. A trick used to solve this problem consists of sending multiple pulses. As the target moves, pulses are reflected with a short time delay that can be used to compute f indirectly. This method, called pulsed-wave Doppler (Evans & McDicken 2000), is the basis of fUS imaging...
The motion of the cell can be observed when multiple pulses are emitted over time, with a period T called the pulse repetition frequency in the millisecond range. Because of the cell’s motion, each echo is slightly shifted in time relative to the preceding echo, resulting in a phase shift (Figure 1b). Consequently, the discrete signal obtained from a fixed depth after each pulse s(T ), called the Doppler signal (Figure 1c), oscillates over time. As evident from the spectrum of the Doppler signal, S(ω) (Figure 1d), it oscillates at a particular frequency equivalent to the classic Doppler frequency shift, fD = f = 2vz fUS/c, proportional to the velocity vz of the cell in the z direction and the central frequency fUS of the ultrasound pulse. If the particle is moving away from the probe, the frequency is negative. Negative frequencies can be detected because s(T ) is a complex signal (obtained using a Hilbert transform of the raw ultrasound signal). In signal processing terms, using a series of pulses, what we have done is transfer (i.e., demodulate) the Doppler frequency shift from the fast ultrasound frequency (15 MHz) onto a slower frequency: the pulse repetition frequency (∼kHz).