text:
Add an API to compare benchmark results

Clear and concise description of the problem
There is currently no way to compare benchmark results between different runs. For example, it's possible to change the implementation details without changing the benchmark, and there is no way to confirm that it didn't introduce any regressions except for manually making screenshots in the terminal.
Suggested solution
Provide a flag to vitest bench command (like --compare=./bench.json) to compare the current benchmark run with the previous one. We already support dumping the benchmark result in json via --reporter=json, so it can be reused for diffing.
Alternative
No response
Additional context
I think it should print results the same way we do now in a table, just compare it also with the previously stored results.
I think it might also be nice to store some information about the current machine (OS, cores, anything that can influence the result) in that benchmark and show it in the table.
Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that request the same feature to avoid creating a duplicate.

What about https://codspeed.io or https://bencher.dev? I like how Bencher is calling it continuous benchmarking.

What about https://codspeed.io or https://bencher.dev? I like how Bencher is calling it continuous benchmarking.

These are all external tools and they are meant to be used in CI. Since we don't control what machine is running the benchmark, this issue is only about manual check on your own machine.

It's about iterating on the same function, not about catching regressions.

Sort of comparing performance between two branches? Would that be possible without JSON being written to disk?

Would that be possible without JSON being written to disk?

The idea I am describing in the issue is to use the result from the json reporter which dumps the values on the disk already.

Interesting idea!
Speaking of --compare flag, I rememberd this webpack plugin which has a similar idea and compares the bundle stats between the current run and baseline https://github.com/relative-ci/bundle-stats/tree/master/packages/webpack-plugin#bundlestatswebpackpluginoptions
It looks like their approach is that they require either baseline: true or BUNDLE_STATS_BASELINE=true to explicitly dump the current result as a baseline, then such baseline is automatically used to compare against for following runs since compare: true by default.

We already support benchmark json output. We decided to remove the samples from it and introduce a new API to tinybench that allows comparing results with the provided benchmark run without actually running the code.

Hello @sheremet-va
That's actually a great idea, I'm working on skott and especially on a pull request that is meant to compare skott's performances over time when running analysis on specific JS/TS projects.
The current way I'm implementing result comparison is by only using n and n-1 versions using git diff to witness the changes, but it would be great to have a complete history indeed and store more than one previous version. For that I tried codspeed but the CI just takes a while, I don't know if it's related to the free-tier or what but the job is taking more than 1h50 to complete while just using vitest bench API takes few minutes so it's not an option for me at all.

I think it might also be nice to store some information about the current machine (OS, cores, anything that can influence the result) in that benchmark and show it in the table.

To be honest my primary concern was to run in the CI to limit hardware-related variations, even though adding OS related information could be useful when running benchmarks from a local machine.
I feel like trying to diff a set of benchmarks add OS properties in the output might be confusing, you might want to do that at the filename level so that each OS combination can get its own diff?
Currently I'm re-writing the outputFile generated by vitest into something like result-node-18.x.json and I'm not mentioning the OS because this CI job is only running on ubuntu for now, even though it could become something like node-18-ubuntu.json. Also I found useful to add things like git hash and branch the benchmark was generated.
So at some point I was kind of wondering, should I create a vitest plugin and do something like codspeed but instead of storing the data on my private cloud, just emit the data files in a dedicated location and provide a way to compare them over time. But if you're willing to integrate that in the core, it might not be that relevant? What do you think?

To be honest my primary concern was to run in the CI to limit hardware-related variations, even though adding OS related information could be useful when running benchmarks from a local machine.

Adding OS-related information is just to give a clear message that the benchmark might be off because it was running on another machine, or even throw an error.

Currently I'm re-writing the outputFile generated by vitest into something like result-node-18.x.json and I'm not mentioning the OS because this CI job is only running on ubuntu for now, even though it could become something like node-18-ubuntu.json. Also I found useful to add things like git hash and branch the benchmark was generated.

How do you store the generated output in CI?

Adding OS-related information is just to give a clear message that the benchmark might be off because it was running on another machine, or even throw an error.

Yeah better have more information than not enough. Also I'm not sure how stable the GitHub Actions hardware is when not using custom pools, default pools might have agents with more or less cores, so variations can even happen there indeed.

How do you store the generated output in CI?

For now it's only a JSON file written and committed by the CI in my repo (at a specific location near-by the benchmark files themselves) but it could be more sophisticated.
Consequently for now I'm not storing the history of all benchmarks, I'm just overriding it each time a new PR runs with the new results, allowing me to do the diff between n and n-1 versions. But it could be great to keep track of all the benchmarks nonetheless to track big regressions/improvements over time, n and n-1 is a very small dataset

Assuming that the use case is mostly a local comparison, I made a prototype as a custom reporter:
https://stackblitz.com/edit/vitest-dev-vitest-mm6syc?file=vite.config.ts
# I used VITEST_BENCH_xxx env var for prototype

# save bench data on main branch
# --benchmark.outputFile=main.json
$ VITEST_BENCH_OUTPUT_FILE=main.json npx vitest bench --run
...

# suppose you switched a branch and compare against main
# --benchmark.compare=main.json
$ VITEST_BENCH_COMPARE=main.json npx vitest bench --run
...
 RUN  v1.4.0 /home/projects/vitest-dev-vitest-mm6syc

[... here current deafult reporter ....]
 ✓ test/basic.bench.ts (2) 2483ms
   ✓ sort (2) 2471ms
     name          hz      min      max     mean      p75      p99     p995     p999      rme  samples
   · normal   58.7590  13.7350  40.1650  17.0187  16.4350  40.1650  40.1650  40.1650  ±13.39%       30   fastest
   · reverse  10.6565  74.6000   115.93  93.8395   114.16   115.93   115.93   115.93  ±14.26%       10

[... custom compare reporter ....]
 [BENCH] Comparison
   current  : bench-default.json
   baseline : main.json

sort
  normal 58.759hz [baseline: 73.419hz] [change: 0.80x ⇓]
  reverse 10.656hz [baseline: 10.870hz] [change: 0.98x ⇓]

A few things I noticed:

isn't this technically a reporter feature? if so, having a flag only for this reporter seems unusual. But being able to quickly choose --compare from cli would be important, so I think it's fine to make this special flag.
currently json reporter somehow lacks bench filename (the data is only { suitename: BenchmarkResult[] }). So, to persist previous run, probably we can forget about current json reporter and start with better internal format. For this, we can also exclude gigantic samples because I don't think it's needed for comparison report.

FYI, I was also looking around prior arts and for example this one https://bheisler.github.io/criterion.rs/book/user_guide/command_line_options.html#baselines has three flags for comparison purpose:

--save-baseline: like --benchmark.outputFile
--baseline: like a proposed --compare
--load-baseline: this allows skipping running benchmark and loading existing result as a current run.

We decided to remove the samples from it and introduce a new API to tinybench that allows comparing results with the provided benchmark run without actually running the code.

@sheremet-va Can you elaborate this? I thought this is Vitest benchmark reporter feature, but you want to move this feature to tinybench?

Assuming that the use case is mostly a local comparison, I made a prototype as a custom reporter

If I remember correctly, the reporter already gets the result sorted - we can't do this in our own reporter because custom reporters would have to reimplement it.

Can you elaborate this? I thought this is Vitest benchmark reporter feature, but you want to move this feature to tinybench?

I wanted to make sure that tinybench supports providing results based on benchmarks that are not actually running.

isn't this technically a reporter feature? if so, having a flag only for this reporter seems unusual.

If this is a first-class feature, I think it is fine. We already expose some flags that are only relevant for reporters.

currently json reporter somehow lacks bench filename

We can change the format of json. Benchmark is an experimental feature and doesn't follow semver.

What you mean by "sorted'?

The result in the suite.result.benchmark is sorted based on the median result (fastest first). I expect previous benchmarks to appear in the same table sorted marked like bench (previous) or something.

It's a rough mockup, but it's possible to create a table like this:

@sheremet-va Is the direction okay or did you have something else in your mind?

Is the direction okay or did you have something else in your mind?

Yes, this is how I imagined it. I am not qualified enough to tell if it's better this way, so I would wait for more feedback.
What we can also do is reverse the table and duplicate the  column instead:
https://github.com/google/benchmark/blob/main/docs/tools.md#modes-of-operation
Also, maybe we should print two tables: the first is the same as we do now, and the second one has a difference in each field:

authors: antoine-coulon hi-ogawa mrazauskas sheremet-va


text:
Fix: top-level throw in module is not reported properly

Description
A throw statement in a watched module can sometimes cause vite-node itself to crash (when trying to report that error), leading to the original error being lost.
Here is an example of this happening:
https://stackblitz.com/edit/vitest-dev-vitest-agi4oq?file=basic.ts
If you edit the file after the ready message is printed, vite-node will print the following error:
[vite-node] Failed to execute file:
 TypeError: Cannot read properties of undefined (reading 'match')
    at warnFailedFetch (file:///home/projects/vitest-dev-vitest-agi4oq/node_modules/vite-node/dist/chunk-hmr.mjs:149:20)
    at fetchUpdate (file:///home/projects/vitest-dev-vitest-agi4oq/node_modules/vite-node/dist/chunk-hmr.mjs:137:7)
    at async queueUpdate (file:///home/projects/vitest-dev-vitest-agi4oq/node_modules/vite-node/dist/chunk-hmr.mjs:113:6)
    at async Module.handleMessage (file:///home/projects/vitest-dev-vitest-agi4oq/node_modules/vite-node/dist/chunk-hmr.mjs:164:7)

Explanation
This happens when a module is reloaded and throws something that is not an Error, e.g. a string.
This error propagates from runModule()
https://github.com/vitest-dev/vitest/blob/1a8d67090f00917cb4f31a41df9d7fd4d94277d9/packages/vite-node/src/client.ts#L508-L510
to warnFailedFetch(), where it fails at line 164 when it tries to call match on a non-existing message property of a string:
https://github.com/vitest-dev/vitest/blob/1a8d67090f00917cb4f31a41df9d7fd4d94277d9/packages/vite-node/src/hmr/hmr.ts#L163-L166
Solution
The easiest solution is to check if the error is actually an Error when printing before reading the message property.
I thought of wrapping the thrown object in an Error with cause in runModule(), but that would change how the error message is shown (since now the  message and stacktrace would be from that error and not the original error).

Accidentally used main instead of the feature branch

source: gharchive/pull-request

repo: vitest-dev/vitest

license: MIT

license_type: permissive

license_source: github-api


text:
Allow Data to store structs

At the end of the constructor, a function to check that all entries of the Data have been initialized is run. This can just check for valid pointers in all entries of all declares Datas. If any is null, output silence in perform.

#67

source: gharchive/issue


text:
UI design proposal for showing note revisions

Since we store notes inside git repository. So we can build a functionality to show revisions of the note by fetching historical commits data and allow user to revert to a specific revision. This would be a great addition to GitNoter
This issue is just about proposing the ui, i.e. we use this issue to share ideas/mockups/wireframes that shows revisions of a specific note and allow selecting the revision which will show the note version specific to that revision.

Confluence uses the following interface to list the revisions

We can build something like this?
Any other ideas are welcome 🤗


text:
Add possibility for uncontrolled (promise-based) behaviour to FeedbackButton

Previously the FeedbackButton was controlled by the props loading and hasErrors. To enable more use cases and easier usage, a promise-based way was added. If neither of the mentioned props are passed, the component uses the promise returned by onClick to evaluate the idle, loading and error state.

PR Checklist

[x] Verify if the change requires a changeset. See CONTRIBUTING.md
[x] Link to the respective task if one exists: COM-754
[x] Provide screenshots/screencasts if the change contains visual changes

Screenshots/screencasts

https://github.com/user-attachments/assets/4b5f2332-2a8a-4c54-8741-53d6a7ce7feb

I will ready it for review once #2423 is merged

repo: vivid-planet/comet


text:
Add a title to a sticky note

The top left of the note when closed fells a little empty.
I would suggest adding the possibility to add a title to every note. Maybe with a dedicated text box when a note is opened or using markdown, like if there is a # in the first line the text after it becomes the title

This above is a concept

Maybe like this? I don't know how the title feature could work tho.
For sure I you put the edit button on the left it would feel less empty.

I think this is a good idea and could help make the header bars in the note window look less empty. Especially when unfocused.

Not sure the best way to implement this intuitively, though. I don't love the idea of the title bar being clicked on to edit, like in gnome-notes. I found it kind of annoying seeing a text box with "Untitled" on every new note. What I like about Sticky Notes is how clean it looks and how easy it is to quickly make new notes.

If you choose to implement something like this, I think it should be optional and non-intrusive. A few possible ideas:

If the first line is bold or has a "#" before it, it becomes the title as mentioned above
In the note window there's a "✏" button on the header bar, or an "edit title" button in the hamburger menu
Title can be edited in the main window
(Something like this?)

Although this does kind of conflict with the previous comment. I personally think a single or double-click on the main text is intuitive enough that an "edit note" button is unnecessary, but that's just me.
Anyway, sorry for the long comment, lol. LMK your thoughts!

hey there James. here's my notes:

in the first mockup, note that the title will be CENTERED, not aligned to the left. hence the title will be truncated much more often (long titles are a no-go)
if I make it so that the first text that starts with a "#" is a title, does that mean that it is automatically removed from the body of the note, then put into the title? Or does it stay there?
The "edit" button in the all notes window is kinda ambigous because at first look it seems that it's to open the NOTE, and not the TITLE

conveniently enough, there is a Gtk.EditableLabel widget that can handle this for us quite gracefully...
however, there are some caveats right now:
1.when the title content is too long, the note window expands (can be solved either by allowing this if it's the desired behavior, or ellipsing the text)
2. the app won't be draggable using the headerbar, since the editablelabel will handle the drag events (can be solved by requiring a double tap to edit the label, but this is not something easy to do, and might break mobile support)
3. this still doesn't solve how it might appear in the "all notes" view
also note that the note will STILL be ellipsised even when it's not focus (i.e when the window decorations (close, menu, new note) are not visible)
here's a video of how it would look like if implemented
Screencast from 2023-03-24 22-47-28.webm

also forgot to note that for users with multiple window decorations (close, minimise, maximise) the label will have very little space (don't know if it's really a problem though)

Yeah, dragging the app should definitely be a priority.
To me, an "Edit Note Title" option in the main menu button for individual notes, and regular text boxes for notes in the main window seem like the next best solutions.

to be honest I'm not really sure right now if we really need to have a title for notes.
this is because 1. there's no intuitive way to do it and 2. the size constraints
for example, in the all notes view, there will be an edit note button (see #34 ) and in the notes window there could be a pin button (see #39 )
and you can have functioning titles by effectively boldening your first line and it will appear in the all notes window, so I think this is pretty unnecessary and hard to implement

I came across this feature request while migrating from xpad to this app. xpad handles this very similar to this suggestion:

If the first line is bold or has a "#" before it, it becomes the title as mentioned above

(it doesn't require any special formatting though). The first line then simply becomes the gnome window title. And yes, if window decorations are used, the text appears both in the window title and as part of the body:

But I don't think that's an issue. It makes finding notes via the window list much easier though as you can see in the following screenshot comparison (xpad also doesn't have a main overview window):
|  |  |
Maybe this minimal option that doesn't require any new UI elements could still be considered.

@fwinkl I like your proposal. I'll definitely start looking into the implementation

I actually came here to propose this feature... So glad to see it's already planned!

to be honest I'm not really sure right now if we really need to have a title for notes.
this is because 1. there's no intuitive way to do it and 2. the size constraints
for example, in the all notes view, there will be an edit note button (see #34 ) and in the notes window there could be a pin button (see #39 )
and you can have functioning titles by effectively boldening your first line and it will appear in the all notes window, so I think this is pretty unnecessary and hard to implement

What about instead of a label that can be renamed with an icon, or by clicking the text, new notes could have a basic, centered button with some text like "Name note", which can popup a little modal to set the name. Once created, the button goes away, and the standard LibAdwaita window title is used? There could be a "Rename" button in the "Main Menu" of the note, and something like this context menu I mocked up could be used to rename it in the main app: #115?

The title is now the first few words of the note after #143

repo: vixalien/sticky


text:
Connection Lost Notification

The current behavior is that when the connection is lost to the server, the connection status is updated on the sidebar, but this is too subtle. A popup notification would be more user-friendly, especially if several changes are made without noticing this connection loss.

Closing this one as I don't think it needs to have such high prominence.
The reason is that sometimes the connection is in fact lost and then re-established, and this happens "normally" all the time, just because of the way that the VizHub servers are deployed. They use AWS ECS with horizontal scaling, and there appears to be some sort of timeout for WebSocket connections, which I don't see any way around. So in the meantime, unless that changes, I would prefer to keep it subtle, so we don't interrupt the user randomly every time it happens. The unsaved local changes will get saved properly as soon as the reconnection happens, which is automatic.
Thanks, though, for the idea!

authors: curran jeffrey-asm

repo: vizhub-core/vzcode


text:
Small documentation tweaks

A couple of small formatting tweaks and inline comments!

thank you, and we will make our development environment available on Mac as well ;)

repo: vizzuhq/ipyvizzu-story


text:
Баг: Неэффективная работа с сообщениями

Опишите баг: В dev ветке обработчик сообщений пользователя проверяет каждое приходящее сообщение через Messages.GetById.
Ожидаемое поведение: При большом количестве поступающих сообщений может вызвать ошибку Too many requests per second.
Фактическое поведение: Вызывает ошибку Too many requests per second только при большом потококе сообщений.
Заполните поля технической информации:

vkbottle: https://github.com/vkbottle/vkbottle/tree/dev
vkbottle-types: 5.131
OS: Windows 8.1

Используйте генераторы токенов ¯_(ツ)_/¯

Используйте генераторы токенов
Но, разве id сообщений относительно каждого токена не разные? В таком случае такой подход не сработает.

Но, разве id сообщений относительно каждого токена не разные? В таком случае такой подход не сработает.

Нет конечно, все это сделано, чтобы получать нормальный объект сообщения из того, что присылает вк (почти ничего)

Нет конечно, все это сделано, чтобы получать нормальный объект сообщения из того, что присылает вк (почти ничего)

Ну хорошо, будем надеяться, что вк починит событие сообщений или найдется альтернативный способ получать объект сообщения без дополнительных запросов к API.

authors: FeeeeK kaejuh

repo: vkbottle/vkbottle


text:
Backup restore doesn't work

Hey, I'm using your backup image and it works great but I'm having an issue restoring.
When I call the restore command I get the error:
fatal error: Parameter validation failed: Invalid bucket name "s3:": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"
If I echo out the bucket name it's trying to use I get:
s3://s3://[my-bucket]/[prefix]/[prefix]/hourly/2017-06-28_03-00-04.tar.xz
so it seem the s3:// gets doubled and the [prefix] gets doubled as well in the url construction.
Changing linke 167 in entrypoint.sh from
aws s3 cp "s3://${AWS_S3_PATH}/${RESTORE_FILE}" "$RESTORE_FILE"
to
aws s3 cp "s3://${AWS_S3_BUCKET}/${RESTORE_FILE}" "$RESTORE_FILE"
Seems to fix the path.

One other issue, if you choose not to encrypt your backup, the backup works fine but the restore fails because it attempts to decrypt a tar that is not encrypted. I fixed this by changing lines 172-177
 export RESTORE_FILE_DECRYPTED="decrypted.tar.xz"
  if [[ -s "$RESTORE_FILE" ]]; then
    log "Decrypt ${RESTORE_FILE}"
    export GPG_TTY=/dev/console
    gpg --batch --output "$RESTORE_FILE_DECRYPTED" --decrypt "$RESTORE_FILE"
  fi

to
export RESTORE_FILE_DECRYPTED=$RESTORE_FILE
  if [[ -n "$GPG_RECIPIENT" ]] && [[ -s "$RESTORE_FILE" ]]; then
    export RESTORE_FILE_DECRYPTED="decrypted.tar.xz"
    log "Decrypt ${RESTORE_FILE}"
    export GPG_TTY=/dev/console
    gpg --batch --output "$RESTORE_FILE_DECRYPTED" --decrypt "$RESTORE_FILE"
  fi

I'm not super familiar with bash scripting and haven't tested whether an encrypted backup restore works with this modified code.
I can submit a PR if so desired.

Thanks for reporting this. I will fix it by the end of this week.

Hi @danimbrogno, I have fixed the restore function and also did  a major refactor of the code in the entrypoint, so that it's cleaner and easier to debug. https://github.com/vladgh/docker_base_images/commit/c87169993daf05b042983e51e886d51ee04f3bab should take care if this. Check the examples I added in the README. Some more testing would be appreciated, let me know if it works okay or not.

authors: danimbrogno vladgh


text:
[LEAKED-FREE.VIDEO] Sophie Rain Spiderman Leaked Video Viral On Social Media X

15 seconds ago — F.ULL V.IDEOS] S.piderman S.ophie Rain L.eaked V.ideo V.iral On S.ocial M.edia
🌐 CLICK HERE 🟢==►► WATCH NOW
🔴 CLICK HERE 🌐==►► Download Now
🌐 CLICK HERE 🟢==►► WATCH NOW
🔴 CLICK HERE 🌐==►► Download Now
S.piderman Sophie Rain video took the internet by storm and amazed viewers on various social media platforms. Spiderman Sophie Rain, a young and talented digital creator, recently became famous thanks to this interesting video.
S.piderman S.ophie R.ain video instagram
S.piderman S.ophie R.ain video official twitter
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.15 seconds ago — F.ULL V.IDEOS] S.piderman S.ophie Rain L.eaked V.ideo V.iral On S.ocial M.edia
🌐 CLICK HERE 🟢==►► WATCH NOW
🔴 CLICK HERE 🌐==►► Download Now
🌐 CLICK HERE 🟢==►► WATCH NOW
🔴 CLICK HERE 🌐==►► Download Now
S.piderman Sophie Rain video took the internet by storm and amazed viewers on various social media platforms. Spiderman Sophie Rain, a young and talented digital creator, recently became famous thanks to this interesting video.
S.piderman S.ophie R.ain video instagram
S.piderman S.ophie R.ain video official twitter

➤►
▶
➤►
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  𝗙𝘂𝗹𝗹 𝗛𝗗 ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 𝗙𝘂𝗹𝗹 𝗛𝗗  ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 1920x 𝗙𝘂𝗹𝗹 𝗛𝗗▶
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
▶
➤►
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  𝗙𝘂𝗹𝗹 𝗛𝗗 ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 𝗙𝘂𝗹𝗹 𝗛𝗗  ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 1920x 𝗙𝘂𝗹𝗹 𝗛𝗗▶
➤►
▶
➤►
▶
➤►
➤►
▶
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  𝗙𝘂𝗹𝗹 𝗛𝗗 ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 𝗙𝘂𝗹𝗹 𝗛𝗗  ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 1920x 𝗙𝘂𝗹𝗹 𝗛𝗗▶
➤►
▶
➤►
▶
➤►
➤►
▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  𝗙𝘂𝗹𝗹 𝗛𝗗 ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 𝗙𝘂𝗹𝗹 𝗛𝗗  ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 1920x 𝗙𝘂𝗹𝗹 𝗛𝗗▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  𝗙𝘂𝗹𝗹 𝗛𝗗 ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 𝗙𝘂𝗹𝗹 𝗛𝗗  ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 1920x 𝗙𝘂𝗹𝗹 𝗛𝗗▶
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  𝗙𝘂𝗹𝗹 𝗛𝗗 ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 𝗙𝘂𝗹𝗹 𝗛𝗗  ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 1920x 𝗙𝘂𝗹𝗹 𝗛𝗗▶
▶
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  𝗙𝘂𝗹𝗹 𝗛𝗗 ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 𝗙𝘂𝗹𝗹 𝗛𝗗  ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 1920x 𝗙𝘂𝗹𝗹 𝗛𝗗▶
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  NOW ▶]
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  ONLINE ▶]
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 DOWNLOAD 𝗙𝘂𝗹𝗹 𝗛𝗗▶]
➤►
➤►
▶
➤►
➤►
▶
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
▶
➤►
➤►
▶
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  NOW ▶]
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  ONLINE ▶]
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 DOWNLOAD 𝗙𝘂𝗹𝗹 𝗛𝗗▶]
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
➤►
▶
➤►
➤►
▶
▶
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  NOW ▶]
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼  ONLINE ▶]
📺📱 [🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 DOWNLOAD 𝗙𝘂𝗹𝗹 𝗛𝗗▶]
▶
➤►
➤►
▶
➤►
▶
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶
➤►
➤►
▶

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

VVF

⬆
⬆
⬆

⬆
⬆
⬆
        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 HD 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HD HOT ONLINE ▶
⬆
⬆
⬆
✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅
**[[📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 PLAY NOW ▶
📺📱 🔴 ➤►𝗪𝗔𝗧𝗖𝗛👉 𝗙𝘂𝗹𝗹 𝗩𝗶𝗱𝗲𝗼 HOT ONLINE ▶
⬆
⬆
⬆
⬆
⬆
⬆

cuu

repo: vllm-project/llm-compressor


text:
*@[LIVESTREAMs.!]Tyler Denny vs. Hamzah Sheeraz Fight Live Boxing Today Game In 21 September 2024

Tyler Denny vs. Hamzah Sheeraz live On Saturday, 21 September, 2024, was buzzing with anticipation
as it played host to Tyler Denny vs. Hamzah Sheeraz. Boxing were on the card, promising fans an
evening filled with excitement, skill, and raw athleticism. Watch Tyler Denny vs. Hamzah Sheeraz Live
Stream!
🅻🅸🆅🅴🔴▶ CLICK HERE TO WATCH LIVE ONLINE
🆆🅰🆃🅲🅷🔴▶ CLICK HERE TO LIVE STREAM
DETAILS:
Tyler Denny vs. Hamzah Sheeraz fight date, start time
Date/Time: Saturday 09.21.2024 at 02:00 PM ET
U.S. Broadcast: Pay Per View
Preliminary Card: DAZN
Promotion: Matchroom Boxing
Ownership: Matchroom Sport
Co-Promoter: Queensbury Promotions, Boxxer, Wasserman
Venue: Wembley Stadium
Location: Wembley, London
The Tyler Denny vs. Hamzah Sheeraz action kicked off with the preliminary fights, where up-andcoming talents showcased their skills and determination in the cage. These young fighters, eager to
make a name for themselves, gave it their all, delivering fast-paced and action-packed bouts that set the
tone for the evening.
Tyler Denny vs. Hamzah Sheeraz As the main card got underway, the intensity in the arena reached
new heights. The matchups were carefully selected to pit some of the most promising amateur Boxing
fighters against each other, ensuring competitive and entertaining fights for the fans in attendance.
Several fights stood out as highlights of the evening. From intense grappling exchanges to striking
battles, these bouts had the crowd on the edge of their seats. Each fighter demonstrated their dedication,
heart, and skill, leaving everything in the cage.
The co-main events were particularly memorable, with fighters showcasing their evolving talents and
determination to climb the ranks in the world of Boxing. The back-and-forth action had the crowd
roaring with excitement, as each fighter pushed their limits to secure victory.
The main event of Tyler Denny vs. Hamzah Sheeraz was a highly anticipated matchup that had fans
eagerly awaiting the action. The atmosphere was electric as the two top amateur Boxing fighters made
their way to the cage. Both fighters were determined to prove themselves and claim victory in front of
the passionate crowd.

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

SPORTS BOXing

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆

        ✅▶ 𝗥𝗲𝗮𝗹𝗹𝘆 𝗔𝗺𝗮𝘇𝗶𝗻𝗴 𝗬𝗼𝘂 𝗖𝗮𝗻 𝗧𝗿𝘆 𝗧𝗵𝗶𝘀 ◀✅✅

**[[📺📱 🔴 ➤►LIVE👉 STREAM PLAY NOW ▶
📺📱 🔴 ➤►Go👉 LIVE ONLINE ▶

⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆
⬆

vvmn,nm,

authors: bainaaina wreetre


text:
BUG: de-initialize model parallel

The following command pytest tests/samplers/ complains
FAILED tests/samplers/test_logprobs.py::test_get_prompt_logprobs[half-facebook/opt-125m] - AssertionError: tensor model parallel group is already initialized

with the stack trace revealing code in initialize_model_parallel as follows:
        rank = torch.distributed.get_rank()

        # Build the tensor model-parallel groups.
        global _TENSOR_MODEL_PARALLEL_GROUP
>       assert _TENSOR_MODEL_PARALLEL_GROUP is None, (
            "tensor model parallel group is already initialized")
E       AssertionError: tensor model parallel group is already initialized

vllm/model_executor/parallel_utils/parallel_state.py:64: AssertionError

However, if I run tests/samplers/test_logprobs.py::test_get_prompt_logprob along, it passes.
A similar case is pytest tests/models/, which complains the following assertion failures:
FAILED tests/models/test_models.py::test_models[128-half-meta-llama/Llama-2-7b-hf] - OSError: You are trying to access a gated repo.
FAILED tests/models/test_models.py::test_models[128-half-mistralai/Mistral-7B-v0.1] - AssertionError: tensor model parallel group is already initialized
FAILED tests/models/test_models.py::test_models[128-half-tiiuae/falcon-7b] - AssertionError: tensor model parallel group is already initialized
FAILED tests/models/test_models.py::test_models[128-half-gpt2] - AssertionError: tensor model parallel group is already initialized
FAILED tests/models/test_models.py::test_models[128-half-bigcode/tiny_starcoder_py] - AssertionError: tensor model parallel group is already initialized
FAILED tests/models/test_models.py::test_models[128-half-EleutherAI/gpt-j-6b] - AssertionError: tensor model parallel group is already initialized
FAILED tests/models/test_models.py::test_models[128-half-EleutherAI/pythia-70m] - AssertionError: tensor model parallel group is already initialized
FAILED tests/models/test_models.py::test_models[128-half-bigscience/bloom-560m] - AssertionError: tensor model parallel group is already initialized
FAILED tests/models/test_models.py::test_models[128-half-mosaicml/mpt-7b] - AssertionError: tensor model parallel group is already initialized
FAILED tests/models/test_models.py::test_models[128-half-microsoft/phi-1_5] - AssertionError: tensor model parallel group is already initialized

It seems that we need to call destroy_model_parallel somewhere. Any suggestion?

https://github.com/vllm-project/vllm/pull/2114#issuecomment-1857282974

repo: vllm-project/vllm


text:
Stopping an indefinitely running request

I am using Mixtral-8x7B-Instruct-v0.1 to generate JSONs from some given text, but in some cases the generation does not follow the given JSON format, and starts generating a very large (5k+ tokens) output. This causes the server to slow down massively.
Is there a way to stop the generation of a particular request?

Hi @vibhuagrawal14, currently vLLM doesn't have a good way to handle such a case. I think we need to support structured decoding (or grammar?) to address your problem. For now, you can use max_tokens to prevent too-long outputs.

@WoosukKwon Any suggestion as to where I can start if we want to implement this functionality?


text:
Very Slow Server Inference After Upgrade

Recently upgraded to the latest version 0.3.2 and I've noticed a total slowdown in outputs.
Here's my speed on the 0.2.7 release
Avg prompt throughput: 1006.0 tokens/s, Avg generation throughput: 273.8 tokens/s,
Here's my speed on 0.3.2
Avg prompt throughput: 175.5 tokens/s, Avg generation throughput: 15.5 tokens/s,
start command:
python -m vllm.entrypoints.openai.api_server \
    --model code/hf-models/OpenHermes-2.5-Mistral-7B --max-model-len 8192

On a single 4090.

Can you try 0.3.1 so we can figure out whether it's a recent regression or not, additionally, try setting enforce_eager=False?

same issue here.
slow inference occurs when tp >1. i switched back to tp = 1 and it works normally.
this also showed when trying with tp > 1 but not tp =1
Custom all-reduce kernels are temporarily disabled due to stability issue

Same issue here.
I have tried different releases and found that only the inference speed if vllm==0.2.7 is normal. The speed since version 0.3.0 descreased alot.
Envionment:

torch==2.1.2
cuda118
A100 SXM

I upgraded to 0.3.3 and started explicitly adding --enforce-eager, and it's back to speedy. thanks.
python -m vllm.entrypoints.openai.api_server \
    --model hf-models/NousResearch-Hermes-2-Pro-Mistral-7B --max-model-len 8192 --enforce-eager

authors: DaBossCoda SparkJiao darrenangle simon-mo


text:
[Bug]: Inconsistency between weights of vllm and transformer

Your current environment

The output of `python collect_env.py`
PyTorch version: 2.4.0+cu121
Is debug build: False
CUDA used to build PyTorch: 12.1
ROCM used to build PyTorch: N/A

OS: Ubuntu 20.04.6 LTS (x86_64)
GCC version: (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Clang version: Could not collect
CMake version: version 3.30.2
Libc version: glibc-2.31

Python version: 3.10.14 (main, May  6 2024, 19:42:50) [GCC 11.2.0] (64-bit runtime)
Python platform: Linux-5.4.0-173-generic-x86_64-with-glibc2.31
Is CUDA available: True
CUDA runtime version: 11.7.99
CUDA_MODULE_LOADING set to: LAZY
GPU models and configuration: GPU 0: NVIDIA A100-SXM4-40GB
Nvidia driver version: 535.161.07
cuDNN version: Probably one of the following:
/usr/lib/x86_64-linux-gnu/libcudnn.so.8.5.0
/usr/lib/x86_64-linux-gnu/libcudnn_adv_infer.so.8.5.0
/usr/lib/x86_64-linux-gnu/libcudnn_adv_train.so.8.5.0
/usr/lib/x86_64-linux-gnu/libcudnn_cnn_infer.so.8.5.0
/usr/lib/x86_64-linux-gnu/libcudnn_cnn_train.so.8.5.0
/usr/lib/x86_64-linux-gnu/libcudnn_ops_infer.so.8.5.0
/usr/lib/x86_64-linux-gnu/libcudnn_ops_train.so.8.5.0
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: True

CPU:
Architecture:                       x86_64
CPU op-mode(s):                     32-bit, 64-bit
Byte Order:                         Little Endian
Address sizes:                      43 bits physical, 48 bits virtual
CPU(s):                             256
On-line CPU(s) list:                0-255
Thread(s) per core:                 2
Core(s) per socket:                 64
Socket(s):                          2
NUMA node(s):                       8
Vendor ID:                          AuthenticAMD
CPU family:                         23
Model:                              49
Model name:                         AMD EPYC 7742 64-Core Processor
Stepping:                           0
Frequency boost:                    enabled
CPU MHz:                            3050.336
CPU max MHz:                        2250.0000
CPU min MHz:                        1500.0000
BogoMIPS:                           4491.83
Virtualization:                     AMD-V
L1d cache:                          4 MiB
L1i cache:                          4 MiB
L2 cache:                           64 MiB
L3 cache:                           512 MiB
NUMA node0 CPU(s):                  0-15,128-143
NUMA node1 CPU(s):                  16-31,144-159
NUMA node2 CPU(s):                  32-47,160-175
NUMA node3 CPU(s):                  48-63,176-191
NUMA node4 CPU(s):                  64-79,192-207
NUMA node5 CPU(s):                  80-95,208-223
NUMA node6 CPU(s):                  96-111,224-239
NUMA node7 CPU(s):                  112-127,240-255
Vulnerability Gather data sampling: Not affected
Vulnerability Itlb multihit:        Not affected
Vulnerability L1tf:                 Not affected
Vulnerability Mds:                  Not affected
Vulnerability Meltdown:             Not affected
Vulnerability Mmio stale data:      Not affected
Vulnerability Retbleed:             Vulnerable
Vulnerability Spec store bypass:    Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1:           Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:           Mitigation; Retpolines, IBPB conditional, IBRS_FW, STIBP conditional, RSB filling, PBRSB-eIBRS Not affected
Vulnerability Srbds:                Not affected
Vulnerability Tsx async abort:      Not affected
Flags:                              fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca sme sev sev_es

Versions of relevant libraries:
[pip3] flashinfer==0.1.2+cu121torch2.3
[pip3] mypy-extensions==1.0.0
[pip3] numpy==1.26.3
[pip3] nvidia-cublas-cu11==11.11.3.6
[pip3] nvidia-cublas-cu12==12.1.3.1
[pip3] nvidia-cuda-cupti-cu11==11.8.87
[pip3] nvidia-cuda-cupti-cu12==12.1.105
[pip3] nvidia-cuda-nvrtc-cu11==11.8.89
[pip3] nvidia-cuda-nvrtc-cu12==12.1.105
[pip3] nvidia-cuda-runtime-cu11==11.8.89
[pip3] nvidia-cuda-runtime-cu12==12.1.105
[pip3] nvidia-cudnn-cu11==8.7.0.84
[pip3] nvidia-cudnn-cu12==9.1.0.70
[pip3] nvidia-cufft-cu11==10.9.0.58
[pip3] nvidia-cufft-cu12==11.0.2.54
[pip3] nvidia-curand-cu11==10.3.0.86
[pip3] nvidia-curand-cu12==10.3.2.106
[pip3] nvidia-cusolver-cu11==11.4.1.48
[pip3] nvidia-cusolver-cu12==11.4.5.107
[pip3] nvidia-cusparse-cu11==11.7.5.86
[pip3] nvidia-cusparse-cu12==12.1.0.106
[pip3] nvidia-ml-py==12.560.30
[pip3] nvidia-nccl-cu11==2.20.5
[pip3] nvidia-nccl-cu12==2.20.5
[pip3] nvidia-nvjitlink-cu12==12.6.20
[pip3] nvidia-nvtx-cu11==11.8.86
[pip3] nvidia-nvtx-cu12==12.1.105
[pip3] pynvml==11.5.3
[pip3] pyzmq==26.2.0
[pip3] torch==2.4.0
[pip3] torchmetrics==1.4.1
[pip3] torchvision==0.19.0
[pip3] transformers==4.45.2
[pip3] transformers-stream-generator==0.0.5
[pip3] triton==3.0.0
[pip3] vllm_nccl_cu12==2.18.1.0.4.0
[conda] flashinfer                0.1.2+cu121torch2.3          pypi_0    pypi
[conda] nvidia-cublas-cu11        11.11.3.6                pypi_0    pypi
[conda] nvidia-cublas-cu12        12.1.3.1                 pypi_0    pypi
[conda] nvidia-cuda-cupti-cu11    11.8.87                  pypi_0    pypi
[conda] nvidia-cuda-cupti-cu12    12.1.105                 pypi_0    pypi
[conda] nvidia-cuda-nvrtc-cu11    11.8.89                  pypi_0    pypi
[conda] nvidia-cuda-nvrtc-cu12    12.1.105                 pypi_0    pypi
[conda] nvidia-cuda-runtime-cu11  11.8.89                  pypi_0    pypi
[conda] nvidia-cuda-runtime-cu12  12.1.105                 pypi_0    pypi
[conda] nvidia-cudnn-cu11         8.7.0.84                 pypi_0    pypi
[conda] nvidia-cudnn-cu12         9.1.0.70                 pypi_0    pypi
[conda] nvidia-cufft-cu11         10.9.0.58                pypi_0    pypi
[conda] nvidia-cufft-cu12         11.0.2.54                pypi_0    pypi
[conda] nvidia-curand-cu11        10.3.0.86                pypi_0    pypi
[conda] nvidia-curand-cu12        10.3.2.106               pypi_0    pypi
[conda] nvidia-cusolver-cu11      11.4.1.48                pypi_0    pypi
[conda] nvidia-cusolver-cu12      11.4.5.107               pypi_0    pypi
[conda] nvidia-cusparse-cu11      11.7.5.86                pypi_0    pypi
[conda] nvidia-cusparse-cu12      12.1.0.106               pypi_0    pypi
[conda] nvidia-ml-py              12.560.30                pypi_0    pypi
[conda] nvidia-nccl-cu11          2.20.5                   pypi_0    pypi
[conda] nvidia-nccl-cu12          2.20.5                   pypi_0    pypi
[conda] nvidia-nvjitlink-cu12     12.6.20                  pypi_0    pypi
[conda] nvidia-nvtx-cu11          11.8.86                  pypi_0    pypi
[conda] nvidia-nvtx-cu12          12.1.105                 pypi_0    pypi
[conda] pynvml                    11.5.3                   pypi_0    pypi
[conda] pyzmq                     26.2.0                   pypi_0    pypi
[conda] torch                     2.4.0                    pypi_0    pypi
[conda] torchmetrics              1.4.1                    pypi_0    pypi
[conda] torchvision               0.19.0                   pypi_0    pypi
[conda] transformers              4.45.2                   pypi_0    pypi
[conda] transformers-stream-generator 0.0.5                    pypi_0    pypi
[conda] triton                    3.0.0                    pypi_0    pypi
[conda] vllm-nccl-cu12            2.18.1.0.4.0             pypi_0    pypi
ROCM Version: Could not collect
Neuron SDK Version: N/A
vLLM Version: 0.6.1.dev238+ge2c6e0a82
vLLM Build Flags:
CUDA Archs: Not Set; ROCm: Disabled; Neuron: Disabled
GPU Topology:
GPU0	NIC0	NIC1	NIC2	NIC3	NIC4	NIC5	NIC6	NIC7	NIC8	CPU Affinity	NUMA Affinity	GPU NUMA ID
GPU0	 X 	PXB	PXB	SYS	SYS	SYS	SYS	SYS	SYS	SYS	48-63,176-191	3		N/A
NIC0	PXB	 X 	PXB	SYS	SYS	SYS	SYS	SYS	SYS	SYS
NIC1	PXB	PXB	 X 	SYS	SYS	SYS	SYS	SYS	SYS	SYS
NIC2	SYS	SYS	SYS	 X 	PXB	SYS	SYS	SYS	SYS	SYS
NIC3	SYS	SYS	SYS	PXB	 X 	SYS	SYS	SYS	SYS	SYS
NIC4	SYS	SYS	SYS	SYS	SYS	 X 	PXB	SYS	SYS	SYS
NIC5	SYS	SYS	SYS	SYS	SYS	PXB	 X 	SYS	SYS	SYS
NIC6	SYS	SYS	SYS	SYS	SYS	SYS	SYS	 X 	PXB	SYS
NIC7	SYS	SYS	SYS	SYS	SYS	SYS	SYS	PXB	 X 	SYS
NIC8	SYS	SYS	SYS	SYS	SYS	SYS	SYS	SYS	SYS	 X

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

NIC Legend:

  NIC0: mlx5_0
  NIC1: mlx5_1
  NIC2: mlx5_2
  NIC3: mlx5_3
  NIC4: mlx5_4
  NIC5: mlx5_5
  NIC6: mlx5_6
  NIC7: mlx5_7
  NIC8: mlx5_bond_0

Model Input Dumps
No response
🐛 Describe the bug
import torch
import vllm
from transformers import AutoModelForCausalLM
import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
    "--pretrain", type=str, default="google/gemma-2-2b-it", help="Path to the LLM model"
)
args = parser.parse_args()

llm = vllm.LLM(
    **{
        "model": args.pretrain,
        "trust_remote_code": True,
        "tensor_parallel_size": 1,
        "dtype": "bfloat16",
        "gpu_memory_utilization": 0.5,
    }
)
vllm_model = llm.llm_engine.model_executor.driver_worker.model_runner.model

vllm_model_param_keys = set([k for k, v in vllm_model.named_parameters()])

transformer_model = AutoModelForCausalLM.from_pretrained(
    args.pretrain,
    trust_remote_code=True,
    attn_implementation="flash_attention_2",
    quantization_config=None,
    torch_dtype=torch.bfloat16,
)

transformer_model_param_keys = set([k for k, v in transformer_model.named_parameters()])

all_match = True
if not vllm_model_param_keys.issubset(transformer_model_param_keys):
    print("Parameters in vllm but not in transformer:")
    diff = vllm_model_param_keys.difference(transformer_model_param_keys)
    print(len(diff), sorted(list(diff)))
    all_match = False

print()

if not transformer_model_param_keys.issubset(vllm_model_param_keys):
    print("Parameters in transformer but not in vllm:")
    diff = transformer_model_param_keys.difference(vllm_model_param_keys)
    print(len(diff), sorted(list(diff)))
    all_match = False

if all_match:
    print("All parameters match!")

When running above codes, I expect that transformer_model_param_keys and vllm_model_param_keys are the same, but they are not.
Specifically, for pythia models they all match; but for google/gemma-2-2b-it, I have the following outputs (I only include layers.0 here):
Parameters in vllm but not in transformer:
52 ['model.layers.0.mlp.gate_up_proj.weight', 'model.layers.0.self_attn.qkv_proj.weight', ...]

130 ['model.layers.0.mlp.gate_proj.weight', 'model.layers.0.mlp.up_proj.weight', 'model.layers.0.self_attn.k_proj.weight', 'model.layers.0.self_attn.q_proj.weight', 'model.layers.0.self_attn.v_proj.weight', ...]

The similar mismatch occurs for meta-llama/Llama-3.2-1B-Instruct as well.
Before submitting a new issue...

[X] Make sure you already searched for relevant issues, and asked the chatbot living at the bottom right corner of the documentation page, which can answer lots of frequently asked questions.

vLLM has some optimized layers (e.g. parallelized linear or attention backend-specific modules) which have different weight names from HF's implementations.

vLLM has some optimized layers (e.g. parallelized linear or attention backend-specific modules) which have different weight names from HF's implementations.

Thanks for your response!
Could vLLM provide a mapping of HF's weight names to vLLM's weights names for people like me to convert HF's trained models to vLLM directly (by updating the weights instead of loading from disk)?

You can take a look at the model's load_weights method. It should provide the information you need.

You can take a look at the model's load_weights method. It should provide the information you need.

This definitely helps! Thank you @DarkLight1337 :)


text:
[Core] Implement sharded state loader

This PR implements a new model loader that directly loads the sharded states of each worker when using DistributedGPUExecutor. When using tensor parallelism, this avoids each worker reading the full checkpoint just to load a small shard of it. Our tests using Arctic (https://github.com/vllm-project/vllm/pull/4652) showed a 10x improvement in model loading speed from NVMe when using 8x tensor parallelism.
For quantization methods like DeepSpeed's FP_Quantize (also used in https://github.com/vllm-project/vllm/pull/4652) that quantize after loading, this PR allows easy creation of a quantized checkpoint that is directly loaded into each worker, further speeding up model loading.
This PR is separated out from https://github.com/vllm-project/vllm/pull/4652.
BEFORE SUBMITTING, PLEASE READ THE CHECKLIST BELOW AND FILL IN THE DESCRIPTION ABOVE

 PR Checklist (Click to Expand)
Thank you for your contribution to vLLM! Before submitting the pull request, please ensure the PR meets the following criteria. This helps vLLM maintain the code quality and improve the efficiency of the review process.
PR Title and Classification
Only specific types of PRs will be reviewed. The PR title is prefixed appropriately to indicate the type of change. Please use one of the following:

[Bugfix] for bug fixes.
[CI/Build] for build or continuous integration improvements.
[Doc] for documentation fixes and improvements.
[Model] for adding a new model or improving an existing model. Model name should appear in the title.
[Frontend] For changes on the vLLM frontend (e.g., OpenAI API server, LLM class, etc.)
[Kernel] for changes affecting CUDA kernels or other compute kernels.
[Core] for changes in the core vLLM logic (e.g., LLMEngine, AsyncLLMEngine, Scheduler, etc.)
[Hardware][Vendor] for hardware-specific changes. Vendor name should appear in the prefix (e.g., [Hardware][AMD]).
[Misc] for PRs that do not fit the above categories. Please use this sparingly.

Note: If the PR spans more than one category, please include all relevant prefixes.
Code Quality
The PR need to meet the following code quality standards:

We adhere to Google Python style guide and Google C++ style guide.
Pass all linter checks. Please use format.sh to format your code.
The code need to be well-documented to ensure future contributors can easily understand the code.
Include sufficient tests to ensure the project to stay correct and robust. This includes both unit tests and integration tests.
Please add documentation to docs/source/ if the PR modifies the user-facing behaviors of vLLM. It helps vLLM user understand and utilize the new features or changes.

Notes for Large Changes
Please keep the changes as concise as possible. For major architectural changes (>500 LOC excluding kernel/data/config/test), we would expect a GitHub issue (RFC) discussing the technical design and justification. Otherwise, we will tag it with rfc-required and might not go through the PR.
What to Expect for the Reviews
The goal of the vLLM team is to be a transparent reviewing machine. We would like to make the review process transparent and efficient and make sure no contributor feel confused or frustrated. However, the vLLM team is small, so we need to prioritize some PRs over others. Here is what you can expect from the review process:

 After the PR is submitted, the PR will be assigned to a reviewer. Every reviewer will pick up the PRs based on their expertise and availability.
 After the PR is assigned, the reviewer will provide status update every 2-3 days. If the PR is not reviewed within 7 days, please feel free to ping the reviewer or the vLLM team.
 After the review, the reviewer will put an  action-required label on the PR if there are changes required. The contributor should address the comments and ping the reviewer to re-review the PR.
 Please respond to all comments within a reasonable time frame. If a comment isn't clear or you disagree with a suggestion, feel free to ask for clarification or discuss the suggestion.

Thank You
 Finally, thank you for taking the time to read these guidelines and for your interest in contributing to vLLM. Your contributions make vLLM a great tool for everyone!

We should add a test to ensure it's working correctly (loaded weights and outputs are the same as with the default loader)

We should add a test to ensure it's working correctly (loaded weights and outputs are the same as with the default loader)

Sure, that makes sense. What's the spec of the test runner machine we should target? OK to assume cuda device is present?

@aurickq IIRC we are using L4 GPUs in CI, @simon-mo to confirm

@Yard1 added test, please take a look

@Yard1 added test, please take a look

One question I have is that can this be implemented using safetensor's partial read? safetensors have all the metadata in headers so you can access the tensors partially

One question I have is that can this be implemented using safetensor's partial read? safetensors have all the metadata in headers so you can access the tensors partially

Conceptually, I think so. Though for larger models like Arctic we prefer this implementation for a few reasons:

With the current implementation and multi-node inference, we may download only the required files to each node.
The deepspeedfp quantizer will reshape the parameters and may change its number of elements, which makes it a bit tricky to calculate the right slice to load (need to understand internals of the quantizer to slice the quantized weights).

@aurickq curious how this relates to https://github.com/vllm-project/vllm/pull/3729?

@aurickq curious how this relates to #3729?

Ah, I hadn't seen that PR, thanks for bringing it up! From what I understand, both PRs address the problem of model loading speed, particularly for larger models, but the approaches seem pretty different. #3729 modifies the existing model loading path so each worker loads a different set of tensors, then broadcasts the shards to each other. This PR loads the model once using the default path and dumps each worker state to disk, then subsequent model loads can direct read these states, skipping the default model loading path altogether.
Some first thoughts on the pros/cons:

This PR requires the creation of a new checkpoint (the worker states), and this checkpoint is only compatible with a fixed configuration (parallelism, quantization, etc.). Whereas #3729 seems more flexible in this regard.
#3729 seems to require a lot more changes in vllm and in each model definition, whereas this PR only requires a handful of lines of change in vllm, and no changes in any of the models (so any future model is automatically supported).
#3729 seems to be more coupled with the parallelism implementation (e.g. tensor parallel in this case). However we are currently implementing pipeline-parallelism to support multi-node inference, which also will be automatically supported by this PR.

authors: Yard1 aurickq njhill sfc-gh-aqiao simon-mo


text:
Align with huggingface Top K sampling

main modifications
all modifications are in vllm/model_executor/layers/sampler.py

Reverse the order of softmax and _apply_top_p_top_k function in forward function of class Sampler. So the _apply_top_p_top_k will use logits as input instead of probabilites.
In _apply_top_p_top_k function, it computes the temporary probabilities ( softmax of logits ) firstly for the top_p process to locate the indexes whose cumulative probability exceeds the probability p. ( ATTENTION: the output of _apply_top_p_top_k function is still logits instead of probabilities. This is the main difference from the original code. )
Change the top_p and top_k masked probability value from 0 to -float("Inf").
In _sample_from_prompt function, use torch.multinomial without parameter "replacement=True".

tested result
The input probabilites distribution of torch.multinomial for the first token is the same as for huggingface/transformers under the same weights and input sentence.
test code:
huggingface/transformers
PATH_TO_CONVERTED_WEIGHTS="/data/xutianci/llama_hf/"
PATH_TO_CONVERTED_TOKENIZER="/data/xutianci/vllm/llama-tokenizer/"

from transformers import AutoTokenizer,  AutoModelForCausalLM
import torch
import numpy as np

model = AutoModelForCausalLM.from_pretrained(PATH_TO_CONVERTED_WEIGHTS)
tokenizer = AutoTokenizer.from_pretrained(PATH_TO_CONVERTED_TOKENIZER)

prompt = "Hello, my name is"
inputs = tokenizer(prompt, return_tensors="pt")
print(f'inputs={inputs}')

# Generate
generate_ids = model.generate(inputs.input_ids, do_sample=True, max_new_tokens=1)
print(f'generate_ids={generate_ids}')
output = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
print(f'output={output}')

vllm
from vllm import LLM, SamplingParams
import torch
import numpy as np

prompts = [
    "Hello, my name is",
]
sampling_params = SamplingParams(top_k=50, max_tokens=1)

llm = LLM(model="/data/xutianci/llama_hf/", tokenizer="/data/xutianci/vllm/llama-tokenizer/")

outputs = llm.generate(prompts, sampling_params)

# Print the outputs.
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

related issue
https://github.com/vllm-project/vllm/issues/718

LGTM! Thanks for the fix! Committed some code to make sure the format is correct and to rename some variables.

Glad to be merged. Thanks for checking and revising! The renaming made the algorithm more self-explanatory!


text:
Ensure gevent switch on sleep

Because _real_sleep is not always called in Timeline.sleep, gevent switch doesn't happen when expected. We need to allow switch for gevent when sleep is called.

Thanks!

Released with v1.3.3

authors: omergertel vmalloc

repo: vmalloc/flux

license_source: bigquery


text:
Solution for #8 was not good enough

With gevent or asyncio, if _is_finished causes the switch, we'd still get two times into the then section. This solution ensures we only trigger once, which is what we wanted in the first place.

Another option is to make then something like EdgeTriggered, which only fires once, but it seemed like more work, and I wasn't sure it'd work.

repo: vmalloc/pact


text:
[Windows] antrea-agent failed to start due to: Failed to set the uplink port with no-flood config

Describe the bug
antrea-agent failed to start due to and explained:
Failed to set the uplink port with no-flood config: exit status 1
ovs logs are empty when issue happened.
Full agent log:
 perit@perit-a01  ~/scratch/windows  k logs -n kube-system antrea-agent-windows-rd2bf -f
    Directory: C:\host\k\antrea
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          10/29/2020 10:40 AM                bin
I1029 10:41:31.848589    2884 log_file.go:99] Set log file max size to 104857600
I1029 10:41:31.850588    2884 agent.go:63] Starting Antrea agent (version v0.10.1)
I1029 10:41:31.850588    2884 client.go:34] No kubeconfig file was specified. Falling back to in-cluster config
W1029 10:41:31.856584    2884 env.go:64] Environment variable POD_NAMESPACE not found
W1029 10:41:31.858600    2884 cacert_controller.go:79] Failed to get Pod Namespace from environment. Using "kube-system" as the CA ConfigMap Namespace
I1029 10:41:31.858600    2884 ovs_client.go:67] Connecting to OVSDB at address \\.\pipe\C:openvswitchvarrunopenvswitchdb.sock
I1029 10:41:31.864586    2884 agent.go:197] Setting up node network
I1029 10:41:31.889581    2884 agent.go:584] Setting Node MTU=1450
I1029 10:42:17.929150    2884 net_windows.go:265] Created HNSNetwork with name antrea-hnsnetwork id 182DABAC-A6C6-40AD-AE23-F8311D0D4D67
I1029 10:42:17.930148    2884 ovs_client.go:118] Created bridge: fc19c7dd-fa56-4416-aa30-a8db244e6406
E1029 10:42:56.995816    2884 agent_windows.go:183] Failed to set the uplink port with no-flood config: exit status 1
F1029 10:42:56.996819    2884 main.go:58] Error running agent: error initializing agent: exit status 1
goroutine 1 [running]:
k8s.io/klog.stacks(0xc000368000, 0xc000012000, 0x67, 0xa2)
        C:/gopath/pkg/mod/k8s.io/klog@v1.0.0/klog.go:875 +0xbf
k8s.io/klog.(*loggingT).output(0x3061d60, 0xc000000003, 0xc000404000, 0x2f9dd8d, 0x7, 0x3a, 0x0)
        C:/gopath/pkg/mod/k8s.io/klog@v1.0.0/klog.go:826 +0x337
k8s.io/klog.(*loggingT).printf(0x3061d60, 0x3, 0x1e1dbc8, 0x17, 0xc0006c3d08, 0x1, 0x1)
        C:/gopath/pkg/mod/k8s.io/klog@v1.0.0/klog.go:707 +0x152
k8s.io/klog.Fatalf(...)
        C:/gopath/pkg/mod/k8s.io/klog@v1.0.0/klog.go:1276
main.newAgentCommand.func1(0xc000514280, 0xc00007a780, 0x0, 0x6)
        C:/antrea/cmd/antrea-agent/main.go:58 +0x218
github.com/spf13/cobra.(*Command).execute(0xc000514280, 0xc0000be010, 0x6, 0x7, 0xc000514280, 0xc0000be010)
        C:/gopath/pkg/mod/github.com/spf13/cobra@v0.0.5/command.go:830 +0x2b1
github.com/spf13/cobra.(*Command).ExecuteC(0xc000514280, 0x2fdb140, 0xc000069f50, 0xc000589f50)
        C:/gopath/pkg/mod/github.com/spf13/cobra@v0.0.5/command.go:914 +0x302
github.com/spf13/cobra.(*Command).Execute(...)
        C:/gopath/pkg/mod/github.com/spf13/cobra@v0.0.5/command.go:864
main.main()
        C:/antrea/cmd/antrea-agent/main.go:37 +0x5d

To Reproduce
Reboot the node have chance to meet the issue.

It's strange beacuse ovs logs are empty when the issue happens.
To get more info about the error, I will create a PR to log error details when fail to config no flood on uplink port.

I do get this in the ovs-vswitchd.log at the time if the first error but after a pod restarts the error clears?
2020-10-29T10:42:18.939Z|00006|odp_util(handler2)|WARN|invalid Ethertype 1535 in flow key
2020-10-29T10:42:18.939Z|00007|odp_util(handler2)|WARN|the flow key in error is: recirc_id(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),ct_tuple4(src=0.0.0.0,dst=0.0.0.0,proto=0,tp_src=0,tp_dst=0),eth(src=68:4f:64:14:d8:9a,dst=01:00:0c:cc:cc:cd),in_port(1),eth_type(0x05ff)
2020-10-29T10:42:19.415Z|00001|ofproto_dpif_upcall(revalidator5)|INFO|Unexpected ukey transition from state 4 (last transitioned from thread 2 at ofproto/ofproto-dpif-upcall.c:1616)
2020-10-29T10:42:19.415Z|00002|ofproto_dpif_upcall(revalidator5)|INFO|Unexpected ukey transition from state 4 (last transitioned from thread 2 at ofproto/ofproto-dpif-upcall.c:1616)
2020-10-29T10:42:19.416Z|00079|ofproto_dpif_upcall(revalidator4)|INFO|Unexpected ukey transition from state 4 (last transitioned from thread 2 at ofproto/ofproto-dpif-upcall.c:1616)
2020-10-29T10:42:19.416Z|00080|ofproto_dpif_upcall(revalidator4)|INFO|Unexpected ukey transition from state 4 (last transitioned from thread 2 at ofproto/ofproto-dpif-upcall.c:1616)
2020-10-29T10:42:19.416Z|00081|ofproto_dpif_upcall(revalidator4)|INFO|Unexpected ukey transition from state 4 (last transitioned from thread 2 at ofproto/ofproto-dpif-upcall.c:1616)
2020-10-29T10:42:19.764Z|00008|odp_util(handler2)|WARN|invalid Ethertype 1535 in flow key
2020-10-29T10:42:19.764Z|00009|odp_util(handler2)|WARN|the flow key in error is: recirc_id(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),ct_tuple4(src=0.0.0.0,dst=0.0.0.0,proto=0,tp_src=0,tp_dst=0),eth(src=68:4f:64:14:d8:9a,dst=01:00:0c:cc:cc:cd),in_port(1),eth_type(0x05ff)
2020-10-29T10:42:20.615Z|00010|odp_util(handler2)|WARN|invalid Ethertype 1535 in flow key
2020-10-29T10:42:20.615Z|00011|odp_util(handler2)|WARN|the flow key in error is: recirc_id(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),ct_tuple4(src=0.0.0.0,dst=0.0.0.0,proto=0,tp_src=0,tp_dst=0),eth(src=68:4f:64:14:d8:9a,dst=01:00:0c:cc:cc:cd),in_port(1),eth_type(0x05ff)
2020-10-29T10:42:21.744Z|00012|odp_util(handler2)|WARN|invalid Ethertype 1535 in flow key
2020-10-29T10:42:21.744Z|00013|odp_util(handler2)|WARN|the flow key in error is: recirc_id(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),ct_tuple4(src=0.0.0.0,dst=0.0.0.0,proto=0,tp_src=0,tp_dst=0),eth(src=68:4f:64:14:d8:9a,dst=01:00:0c:cc:cc:cd),in_port(1),eth_type(0x05ff)
2020-10-29T10:42:22.713Z|00014|odp_util(handler2)|WARN|invalid Ethertype 1535 in flow key
2020-10-29T10:42:22.713Z|00015|odp_util(handler2)|WARN|the flow key in error is: recirc_id(0),ct_state(0),ct_zone(0),ct_mark(0),ct_label(0),ct_tuple4(src=0.0.0.0,dst=0.0.0.0,proto=0,tp_src=0,tp_dst=0),eth(src=68:4f:64:14:d8:9a,dst=01:00:0c:cc:cc:cd),in_port(1),eth_type(0x05ff)
2020-10-29T10:42:27.966Z|00041|memory|INFO|peak resident set size grew 141% in last 10.0 seconds, from 7412 kB to 17864 kB
2020-10-29T10:42:27.967Z|00042|memory|INFO|handlers:2 ports:2 revalidators:2 rules:5 udpif keys:2127

repo: vmware-tanzu/antrea


text:
Allow user-provided name for installed package

Describe the problem/challenge you have
There are packages that I need to be able to install multiple times in a single cluster.
Describe the solution you'd like
4. As a user, I want to install a package in my current cluster, if the package can be installed multiple times, I want to be able to provide a name to the installed package so that I can differentiate between multiple installations.
Anything else you would like to add:
This is also tracked as vmware-tanzu/tce #447
Vote on this request
This is an invitation to the community to vote on issues, to help us prioritize our backlog. Use the "smiley face" up to the right of this comment to vote.
👍 "I would like to see this addressed as soon as possible"
👎 "There are other more important things to focus on right now"
We are also happy to receive and review Pull Requests if you want to help working on this issue.

CLI plugin issue. Closing.

repo: vmware-tanzu/carvel-kapp-controller


text:
Unable to install any Tanzu Plugins - Error: could not read artifact storage: object doesn't exist

Bug Report
This is my first time using Tanzu, so I might be missing something.
Running tanzu init everything looks good. But when running tanzu management-cluster create --ui.
Error: plugin "management-cluster" does not exist, try using `tanzu plugin install management-cluster` to install or `tanzu plugin list` to find plugins

✖  plugin "management-cluster" does not exist, try using `tanzu plugin install management-cluster` to install or `tanzu plugin list` to find plugins

Trying to install
Error: could not read artifact "artifacts/management-cluster/v0.10.1/tanzu-management-cluster-darwin_amd64": storage: object doesn't exist

✖  could not read artifact "artifacts/management-cluster/v0.10.1/tanzu-management-cluster-darwin_amd64": storage: object doesn't exist

Environment Details

Build version (tanzu version):

version: v0.10.1
buildDate: 2022-02-14
sha: 401d55b

Deployment (Managed/Unmanaged cluster): Nothing, yet
Infrastructure Provider (Docker/AWS/Azure/vSphere): Tried on Docker, but these commands don't seem to be provider specfiic.
Operating System (client):  macOS Monterey - Intel

Hey @NeckBeardPrince! I'm not entirely sure, but this may be due to running tanzu init. Was there a reason for running that?
It might just need to be cleaned up. If you installed from the tgz file, you can go back in to the extracted directory. From there, run uninstall.sh to clean things up, then install.sh again to get things back to the right place.
If this was installed via brew, the easiest thing might be to just uninstall, then brew install again and run the script it prompts.
If neither of those work we will have to dig in a little deeper to see what is going on.

Hey @NeckBeardPrince! I'm not entirely sure, but this may be due to running tanzu init. Was there a reason for running that?
It might just need to be cleaned up. If you installed from the tgz file, you can go back in to the extracted directory. From there, run uninstall.sh to clean things up, then install.sh again to get things back to the right place.
If this was installed via brew, the easiest thing might be to just uninstall, then brew install again and run the script it prompts.
If neither of those work we will have to dig in a little deeper to see what is going on.

Hey @NeckBeardPrince! I'm not entirely sure, but this may be due to running tanzu init. Was there a reason for running that?

It was part of the ./install.sh.
I did the install and uninstall using both the brew path and the tarball path

Ah, OK - thanks! Let me ask around and see if anyone has seen this error before.

Hi @NeckBeardPrince. I've asked a few folks, but we haven't seen this before. Just curious - did you have the commercial TKG version of things installed on this system prior to this, or maybe one of the TCE release candidates?
One other thing we can try here. If you can run the uninstall.sh script, that will clean things up again. The key thing I'm thinking of is getting rid of the files under ~/.config/tanzu. That has all the metadata settings for the CLI. Then if you run install.sh again, that will reinitialize things again. The hope is the removal of ~/.config/tanzu will get rid of whatever is pointing to an invalid storage location.

I'm facing the same issue. In the past, I could not run Tanzu due to issue with Docker. Now I wanted to give it another try since "docker issue" is fixed and the result is the same errors @NeckBeardPrince reported. I did follow all the suggestions from the comment (uninstall the CLI, remove ~/.config/tanzu, install the CLI again).

I did run it during the initial installation thinking that there's no need to run it on each upgrade. Now (after re-running configure-tce.sh it works. Thanks a ton, @kartiklunkad26.

Hi @NeckBeardPrince - wondering if you every got a chance to try that last suggestion or if you're still having issues here. If you get a chance, please let us know. Thanks!

Hi @NeckBeardPrince - wondering if you every got a chance to try that last suggestion or if you're still having issues here. If you get a chance, please let us know. Thanks!

Sorry, yeah I did try that and no luck, same issue. My company has decided against moving forward with Tanzu, so I've removed it.

authors: NeckBeardPrince stmcginnis vfarcic

repo: vmware-tanzu/community-edition


text:
Write an introductory doc/blog for kops listing supported operations

Following commands will have to be documented as unsupported. There is no clean way of checking if the commands have been invoked for vSphere cloud provider.

replace -f for instance groups
edit federation
update federation

List of supported or unsupported commands is available on internal confluence page.
This closed issue lists all the cli support related issues https://github.com/vmware/kops/issues/43. Some are closed, like deletion  is supported now, and some are still open.

This issue was moved to kubernetes/kops#2737

This issue was moved to kubernetes/kops#2739

authors: fabulous-gopher prashima

repo: vmware/kops


text:
feat: check image compliance

Summary

Adds -checkImageCompliance to Get-VCFCluster.
Cherry-picked for @nthaler-vmware.
Type

[ ] Bugfix
[x] Enhancement or Feature
[ ] Code Style or Formatting
[ ] Documentation
[ ] Refactoring
[ ] Chore
[ ] Other
Please describe:

Breaking Changes?

[ ] Yes, there are breaking changes.
[x] No, there are no breaking changes.

Test and Documentation

[x] Tests have been completed.
[x] Documentation has been added or updated.

Issue References

Additional Information

Code looks good. Just one question back to Nathan on behaviour when the cluster is VUM-based

Code looks good. Just one question back to Nathan on behaviour when the cluster is VUM-based

Agreed.  Adding additional checking to provide a more user friendly error.

I've pushed an update (7c7eef5) that does the following:

Makes the id and name parameters mutually exclusive.
Brings in the suggested change by Nathan and Brian to check if the cluster is vLCM imaged based.
Removes uri redundancies.
Removes $response redundancies.
Trims trailing spaces.

@nthaler-vmware - do you want to continue with this pull request?


text:
heap-buffer-overflow in VARR_token_tpush and  VARR_token_tpop

When executing c2m on poc.txt, a segfault occurs
POC
#define _00i0d00(E,X)X
_00i0d00(,()
#define _00i0d00(E,X)0)
_00i0d00(,)

ASAN Output
poc:2:1: warning -- different macro redefinition of _00i0d00
poc:1:9: warning -- previous definition of _00i0d00
=================================================================
==2537102==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x62900000f1f8 at pc 0x564864fb5680 bp 0x7f57afcfe0b0 sp 0x7f57afcfe0a0
WRITE of size 8 at 0x62900000f1f8 thread T1
    #0 0x564864fb567f in VARR_token_tpush c2mir/c2mir.c:103
    #1 0x564864fb567f in out_token c2mir/c2mir.c:2885
    #2 0x56486502b42a in processing c2mir/c2mir.c:3670
    #3 0x56486507e533 in pre c2mir/c2mir.c:3801
    #4 0x56486507e533 in c2mir_compile c2mir/c2mir.c:13468
    #5 0x564865081d6a in compile c2mir/c2mir-driver.c:498
    #6 0x7f57b32c0608 in start_thread /build/glibc-SzIz7B/glibc-2.31/nptl/pthread_create.c:477
    #7 0x7f57b31e5132 in __clone (/lib/x86_64-linux-gnu/libc.so.6+0x11f132)

0x62900000f1f8 is located 8 bytes to the left of 16384-byte region [0x62900000f200,0x629000013200)
allocated by thread T1 here:
    #0 0x7f57b353d808 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:144
    #1 0x564864ff7056 in VARR_token_tcreate c2mir/c2mir.c:103
    #2 0x564864ff7056 in pre_init c2mir/c2mir.c:2149

Thread T1 created by T0 here:
    #0 0x7f57b346a815 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cc:208
    #1 0x564864f966f8 in init_compilers c2mir/c2mir-driver.c:540
    #2 0x564864f966f8 in main c2mir/c2mir-driver.c:656

SUMMARY: AddressSanitizer: heap-buffer-overflow c2mir/c2mir.c:103 in VARR_token_tpush
Shadow bytes around the buggy address:
  0x0c527fff9de0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c527fff9df0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c527fff9e00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c527fff9e10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c527fff9e20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c527fff9e30: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa[fa]
  0x0c527fff9e40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c527fff9e50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c527fff9e60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c527fff9e70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c527fff9e80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==2537102==ABORTING

Found while fuzzing https://github.com/vnmakarov/mir/commit/d51b45f6c76d2ca03a5b2e1968c195b867eaed30, verified with https://github.com/vnmakarov/mir/commit/cf3c9c106afdda59c402bdd40e61241aa20a755d

Please excuse the issue spam, I found it easier to keep track of the stuff I found, while fuzzing in different issues. If you find that these issues are not relevant due to the state of the project, feel free to say so

The following file leads to a heap-buffer-overflow in VARR_macro_call_tpop
POC
#define _00i0dN0(E,X)0##X
#define _00i0d00 _00
_00i0dN0(,0
#define _00)_00i0d00
_00

ASAN Output
=================================================================
==3938138==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6210000118f8 at pc 0x5602f325b098 bp 0x7fa756cfe100 sp 0x7fa756cfe0f0
READ of size 8 at 0x6210000118f8 thread T1
    #0 0x5602f325b097 in VARR_macro_call_tpop c2mir/c2mir.c:1961
    #1 0x5602f325b097 in pop_macro_call c2mir/c2mir.c:2552
    #2 0x5602f325b097 in processing c2mir/c2mir.c:3590
    #3 0x5602f32a6533 in pre c2mir/c2mir.c:3801
    #4 0x5602f32a6533 in c2mir_compile c2mir/c2mir.c:13468
    #5 0x5602f32a9d6a in compile c2mir/c2mir-driver.c:498
    #6 0x7fa75a329608 in start_thread /build/glibc-SzIz7B/glibc-2.31/nptl/pthread_create.c:477
    #7 0x7fa75a24e132 in __clone (/lib/x86_64-linux-gnu/libc.so.6+0x11f132)

0x6210000118f8 is located 8 bytes to the left of 4096-byte region [0x621000011900,0x621000012900)
allocated by thread T1 here:
    #0 0x7fa75a5a6808 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:144
    #1 0x5602f32218e4 in VARR_macro_call_tcreate c2mir/c2mir.c:1961
    #2 0x5602f32218e4 in pre_init c2mir/c2mir.c:2152

Thread T1 created by T0 here:
    #0 0x7fa75a4d3815 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cc:208
    #1 0x5602f31be6f8 in init_compilers c2mir/c2mir-driver.c:540
    #2 0x5602f31be6f8 in main c2mir/c2mir-driver.c:656

SUMMARY: AddressSanitizer: heap-buffer-overflow c2mir/c2mir.c:1961 in VARR_macro_call_tpop
Shadow bytes around the buggy address:
  0x0c427fffa2c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c427fffa2d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c427fffa2e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c427fffa2f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c427fffa300: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c427fffa310: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa[fa]
  0x0c427fffa320: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c427fffa330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c427fffa340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c427fffa350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c427fffa360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==3938138==ABORTING

This was fixed by https://github.com/vnmakarov/mir/commit/9f20cf357c9c9fba8ef01a0795c2b9e2661f94a9

authors: clesmian vnmakarov

repo: vnmakarov/mir


text:
请问vnpy支持普通散户作股票吗

环境

操作系统: 如Windows 10或者Ubuntu 18.04
Anaconda版本: 如Anaconda 18.12 Python 3.7 64位
vn.py版本: 如v1.8

Issue类型
三选一：Question
资金小， 无法用里面支持的券商api的方式， 请问vnpy支持普通散户作股票吗

对于小资金的散户推荐使用华宝PI

你好，我刚致电了华宝的客服，他们表示没有支持vnpy啊。 确定代码里已经支持了吗？ 华宝api没有资金要求限制 是吧，多少钱都能交易？

华宝PI是华宝证券定制的量化交易平台，基于vn.py开发，没有资金要求开户就能用

repo: vnpy/vnpy

license: mit


text:
Address Dependabot Security Vulnerabilities

How to Address Security Vulnerabilities

Summary
The objective is to address the security vulnerabilities reported by Dependabot, ensuring the safety and integrity of the Vocode open-source library.

Blockers

[x] None

Outcome
Elevate community trust and project credibility, thus enhancing community growth, by proactively managing security vulnerabilities in dependencies.

Technical Details
The most severe vulnerabilities reported are:

CVE-2024-26130 (High Severity): A NULL pointer dereference vulnerability in the [cryptography](file:///home/arpagon/tmp/vulnerabilities-vocode.json#1%2C74905-1%2C74905) package, which could lead to crashes and potential remote code execution.

CVE-2024-1455 (Medium Severity): An XML Entity Expansion vulnerability in the [langchain-core](file:///home/arpagon/tmp/vulnerabilities-vocode.json#1%2C82-1%2C82) package, which could allow malicious input to compromise the service's availability.

CVE-2024-3571 (Medium Severity): A path traversal vulnerability in the [langchain](file:///home/arpagon/tmp/vulnerabilities-vocode.json#1%2C82-1%2C82) package, which could lead to unauthorized file access or remote code execution.

CVE-2024-27306 (Medium Severity): A Cross-site Scripting vulnerability in the [aiohttp](file:///home/arpagon/tmp/vulnerabilities-vocode.json#1%2C5381-1%2C5381) package, which could allow attackers to inject malicious scripts into index pages for static file handling.

Subtasks

[ ] Review the vulnerabilities and their potential impact on the project.
[ ] Prioritize the vulnerabilities based on severity and potential impact.
[ ] Update the affected dependencies to the patched versions.
[ ] Conduct thorough testing to ensure the updates do not introduce any regressions.
[ ] Document the changes and communicate them to the community.
[ ] Monitor for any new vulnerabilities and address them promptly.

Technical Details
The most severe vulnerabilities reported are:

CVE-2024-26130 (High Severity): A NULL pointer dereference vulnerability in the [cryptography](file:///home/arpagon/tmp/vulnerabilities-vocode.json#1%2C74905-1%2C74905) package, which could lead to crashes and potential remote code execution.

CVE-2024-1455 (Medium Severity): An XML Entity Expansion vulnerability in the [langchain-core](file:///home/arpagon/tmp/vulnerabilities-vocode.json#1%2C82-1%2C82) package, which could allow malicious input to compromise the service's availability.

CVE-2024-3571 (Medium Severity): A path traversal vulnerability in the [langchain](file:///home/arpagon/tmp/vulnerabilities-vocode.json#1%2C82-1%2C82) package, which could lead to unauthorized file access or remote code execution.

CVE-2024-27306 (Medium Severity): A Cross-site Scripting vulnerability in the [aiohttp](file:///home/arpagon/tmp/vulnerabilities-vocode.json#1%2C5381-1%2C5381) package, which could allow attackers to inject malicious scripts into index pages for static file handling.

To activate the GitHub Security Report in the main repository (https://github.com/vocodedev/vocode-python), you can follow these steps:

Go to the repository settings.
Navigate to the "Code security and analysis" section.
Enable the "Dependabot alerts" option.

This will allow GitHub to scan the repository's dependencies and generate security alerts for any known vulnerabilities. The alerts will be visible in the "Security" tab of the repository, similar to the example provided https://github.com/ArtisanLabs/vocode-python/security/dependabot. Enabling this feature will help you stay informed about potential security risks and take appropriate actions to address them.

repo: vocodedev/vocode-python


text:
how to work with slickgrid Adaptive virtual scrolling feature

Is there an example about grid no paging  and load records when scroll?

No, see slickgrid docs.

repo: volkanceylan/Serenity


text:
How i can rest two dates and only show hours

How i can rest two dates and only show hours in .cshtml file
Start Date - End Date

.ToString("HH")

authors: joheric volkanceylan


text:
Serialport and data corruption sending data to Grbl using SerialPort

Hi
I use Serialport on my project, Laserweb, to drive CNC/Lasers from node.js
We have had a few users reporting strange movements, and I have been able to replicate this locally as well.
Grbl reports back an 'error' when the gcode command it receives is invalid.
Sadly it cannot echo what it received, but I do know that the gcode placed into SerialPort is valid (running the job via another host application written in Golang, it does not encounter this issue)
So for example, you would be sending:
G1 X100 F200\n
G1 Y100 F200\n
But grbl would see G1 X100 F\n G1 Y 100 F200\n (so some chars after F didnt make it down the wire and it reports a Not a Number error  (random spots each time you test)
It's easy to blame hardware, but three people with different hardware, one being myself, its not easy to rule that being the issue. Secondly testing against the same hardware using other software, the issue goes away
First of all, I am totally happy to admit the problem may be in my implementation of SP, if its not a bug in SP. But either way I need some help/advice to track this issue down:
Refer to the Issue on Laserweb at https://github.com/openhardwarecoza/LaserWeb/issues/94
Some quick breakdown on how I use SP in my app:

We iterate through all the ports on the machine and instate a handler for each port:

for (var i=0; i<ports.length; i++) {

sp[i].handle = new SerialPort(ports[i].comName, {
			parser: serialport.parsers.readline("\n"),
			baudrate: config.serialBaudRate
		});

Then later on in the app, we put the gcode in a queue (array split by \n) and write it to the handler:

sp[port].handle.write(t+"\n");

(where t = the line of gcode to send)

while writing code we also parse returned messages from a handler:

sp[i].handle.on("data", function (data) {
				serialData(data, i);
			});

unction serialData(data, port) {
	// new line of data terminated with \n
	//console.log('Port '+port+' got newline from serial: '+data);
       // do  a bunch of indexOf checks and websocket emits.
	if (data.indexOf('#') == 0) {.....truncated for issue..... }
       ..... truncated
}

On an interval we add another write to the handler (to poll for position feedback)

setInterval(function() {
			sp[port].handle.write("M114\n"); //for Marlin
		}, 1000);

or
setInterval(function() {
			sp[port].handle.write("?\n"); //for grbl
		}, 1000);

My theory at this point is that the interval handler may write at the same time as one of the queue writes causing a race condition?  But commenting it out does not fully improve the situation
So my other theory is that the handler write we do happens asyncronously and thus two commands get sent out the port, the second before the first one finished writing?
Please advise, is the method we use acceptable for SerialPort? Or is there a better way of handling a queue of serial commands (gcode)
(Line no's to production code)

https://github.com/openhardwarecoza/LaserWeb/blob/master/server.js#L150 (connecting to ports and instating handlers)
https://github.com/openhardwarecoza/LaserWeb/blob/master/server.js#L217 (Parse Serial Responses)
https://github.com/openhardwarecoza/LaserWeb/blob/master/server.js#L677 (Start a Gcode job )
https://github.com/openhardwarecoza/LaserWeb/blob/master/server.js#L501 (Send lines in queue)
https://github.com/openhardwarecoza/LaserWeb/blob/master/server.js#L222 (jnterval commands for position/temp feedback)

I can report the same problem using grbl 0.9j with a baudrate of 115200. You can uncomment #define REPORT_ECHO_LINE_RECEIVED in grbl/config.h make grbl echo each line it receives. Using this I could observer that various errors occured due to missing chars. Here are some example lines echoed by grbl:
MG1X28.350023Y102.000080F1400S255
G1X28.350023Y105.000082F140X2M5
G1X22.350018Y102.0052.SX10M3G.0SX3400055
G1X22.350018Y0520S00GY4M2
I saved the gcode generated by LaserWeb and uploaded it to grbl using GrblWeb which has been successful every time I tested it. GrblWeb uses version 1.4.x of serialport. Maybe you can trace the error inspecting their implementation.

@openhardwarecoza for what it's worth, ? is a real-time command and doesn't require a \n after it. Non-real-time commands go into a buffer that by default holds 79 bytes (a circular buffer's capacity is 1 less than its size) so you have to make sure there's room for each new gcode line before you send it.

authors: bulburDE openhardwarecoza rodovich

repo: voodootikigod/node-serialport


text:
Branch cleanup

We have a lot of dangling features in various branches, and we should clean these up before the new team starts working on the repo :smile:

PR #256 and #255 deals with the additions that should be merged into development. The rest of the branches have been deleted.

repo: vortexntnu/Vortex-AUV


text:
[Day3] DP & 그리디 한지훈

문제 솔루션
문제1
1로 만들기

문제1 풀이
풀이는 3주차 알고리즘 스터디 예시로 추가했으니 참고 바랍니다.
https://www.notion.so/valueofspace/bf0ed638ad49421b9daab5d8e1466ed3#e25363b2bded40bbb2fb31947b86b75e
문제1 노트
처음에 탑다운 방식으로 접근했다가 잘 안되어서 바텀업 방식으로 풀었습니다.
문제2
안녕

문제2 풀이
DP로 풀이할 수 있는 0-1 배낭문제 알고리즘 문제입니다.

세준이의 체력 = 배낭 최대 무게
인사를 하면 L[i]만큼 체력을 잃는다 = 배낭에 L[i] 무게의 물건을 담는다
인사를 하면 J[i] 만큼 기쁨을 얻는다 = J[i] 만큼의 가치를 얻는다

문제에서 주어진 상태와 요구사항에 따라 DP 테이블은 아래와 같이 정의할 수 있습니다.

dp[사람순번][현재체력] = 최대 기쁨

배낭 문제가 생소하다면 굉장히 어렵다고 느낄 수 있는 문제이지만, 잘생각해보면 결국 세준이는 2가지 선택지 밖에 없습니다.

인사 한다
인사 안한다

그리고 인사를 안할때는 또 2가지 경우로 나뉩니다.

체력이 없어서 못한다.
체력이 있지만 다른 분께 인사하는게 더 많은 기쁨을 얻을 수 있어서 안한다.

따라서 점화식을 디테일하게 세워보면 아래와 같이 나오게 됩니다.
if 체력이 충분해서 인사 가능하다
  dp[i번째사람][현재체력h] = max( i번째 사람 빼고 i-1번째 사람까지 인사 했을때 얻은 최대기쁨, i번째 사람에게 인사하면 잃는 체력만큼을 뺀 상태의 최대 기쁨 + i번째 사람에게 인사 했을때 얻는 기쁨)

else 체력이 부족해서 못한다
  dp[i번째사람][현재체력h] = i번째 사람 빼고 i-1번째 사람까지 인사 했을때 얻은 최대 기쁨

문제2 노트
처음 배낭 문제를 접했을때 큰 충격을 받았고, 큰 깨우침을 주었던 문제였기 때문에 어렵지만 분명 얻어가는게 많이 있을거란 생각으로 넣어보았습니다. 😅
점화식을 다 세웠지만 for문으로 체력을 1~100까지 순회하면서 테이블을 채운다는 생각을 하는게 제일 어려운 것 같습니다.
검색해보니 1차원 DP테이블로 풀이하는 방법이 있어서 공유합니다.
체력을 만땅 부터 시작해서 DP테이블을 뒤에서 부터 채우고 체력이 부족해서 못담는 경우는 Pass 하네요 😮
dp = [0]*100
for i in range(0,n):
    for h in reversed(range(0, 100)): # 반대로 높은 체력부터 시작
        if h >= health[i]:
            dp[h] = max(dp[h], dp[h-health[i]] + happy[i]) # 택한 경우

print(dp[99])

문제3
A와 B

문제3 풀이
두가지 연산으로 특정 단어를 만들 수 있는지 확인하는 문제입니다.

문자열 뒤에 A를 추가한다.
문자열을 뒤집고 뒤에 B를 추가한다.

손으로 몇 가지 케이스를 써보면 명확한 규칙이 보이게 됩니다.
문자열의 마지막 문자가 A이면 무조건 1번 연산이고, B면 2번 연산입니다. 즉, 최적의 해를 구하는 방법이 1가지로 확정되어 있습니다.
그래서 맨 뒤의 문자가 A면 A를 제거, B면 B를 제거하고 뒤집는 식으로 그리디 알고리즘으로 풀 수 있습니다.
문제3 노트
생각의 전환이 필요한 문제 입니다.
그리디 문제는 최적해를 구하는 조건만 찾으면 바로 풀리고 DP 문제는 DP 테이블 정의하고 점화식 세우면 풀리기 때문에
문제 푸는 방법이나 과정이 정해져있고, 유형도 한정적 입니다.
그래서 문제를 한번 꼬아서 내는 경향이 있는 것 같고 생각 전환이 제일 중요한 것 같아서 넣어본 문제입니다.

pr에도 정말 자세하게 문제 풀이해 주셨네요 감사합니다! 보고 열심히 공부해야겠네요 🙇♂

repo: vos-team/vos-algorithm-study


text:
Init validations table

Pivotal Card 1
Pivotal Card 2
This PR allows for uploading of validation errors to the postgresql database. All remaining content after identifying the severity, source, and description is placed in message.

Okay. This LGTM!

authors: bwreid tie-rack

repo: votinginfoproject/data-processor


text:
Broken website?

I am getting an strangely-formatted version of https://vowsjs.org when views in Safari 14.0 and Chrome 86. Here's a partial capture:

Did some investigation before seeing this issue. Closing in favor of vowsjs/vowsjs.org#4 which has more details and is in the website repo.

authors: bradhowes strugee

repo: vowsjs/vows


text:
Adding support for applying Lightning Flash models to datasets

Adds support for applying Lightning Flash models to datasets via SampleCollection.apply_model() and SampleCollection.compute_embeddings().
This integration requires flash==0.4.0 or later.
This branch doubles as the release branch for fiftyone==0.10.0.
Predictions example:
from flash.image import ObjectDetector
import fiftyone as fo
import fiftyone.zoo as foz

dataset = foz.load_zoo_dataset("quickstart").exclude_fields("predictions").clone()

model = ObjectDetector.load_from_checkpoint("https://flash-weights.s3.amazonaws.com/object_detection_model.pt")

view = dataset.take(5)
view.apply_model(model, label_field="predictions")

session = fo.launch_app(view=view)

Embeddings example:
from flash.image import ImageEmbedder
import fiftyone as fo
import fiftyone.zoo as foz

dataset = foz.load_zoo_dataset("quickstart")

model = ImageEmbedder(backbone="resnet101", embedding_dim=128)

view = dataset.take(5)
embeddings = view.compute_embeddings(model)

print(embeddings.shape)

See https://github.com/PyTorchLightning/lightning-flash/pull/360 for many more examples!

Released

authors: benjaminpkane ehofesmann


text:
Fix compute visualization results from operators

What changes are proposed in this pull request?
Running compute_visualization (and potentially other methods) can sometimes lead to unserializable dtypes in numpy results. Adding a custom JSONEncoder on the server that handles these dtypes fixes the issue
How is this patch tested? If it is not, please explain why.
In progress
Release Notes
Todo
What areas of FiftyOne does this PR affect?

[x] App: FiftyOne application changes
[ ] Build: Build and test infrastructure changes
[ ] Core: Core fiftyone Python library changes
[ ] Documentation: FiftyOne documentation changes
[ ] Other

I noticed this as well...my fix was a lot less elegant!

authors: benjaminpkane ritch


text:
adjust puppet version boundary for puppet5, drop 3

CC: @alexjfisher
This should have been changed during the last modulesync

repo: voxpupuli/puppet-amanda


text:
Fixed github url in README.md

Fixed github url in README.md

Thanks!

authors: bastelfreak skrysmanski


text:
module doesn't manage proxy setting

The module doesn't handle setting proxy - globally for yum

But it does. Whats wrong with:
yum::config { 'proxy':
  ensure => 'http://proxy.lan:3128',
}
yum::config { 'proxy_username':
  ensure => 'user',
}
yum::config { 'proxy_password':
  ensure => 'pass',
}

You can even do it within a repo configuration :
yum::repos:
   'epel' :
    proxy: 'http://proxy.lan:3128'

Apologies - just saw this late.
Cool. must have missed that
thanks

authors: AlexSamad b3n4kh josuemotte

repo: voxpupuli/puppet-yum


text:
Block edge 4.3.40

4.3.40 needs to be disabled:
4 clusters currently failing (27%),  4 gone (27%),and  7 successful (47%), out of 15 who attempted the update over 7d
Currently failing classification:
* Single master: 3
* UPI router degraded: 1
* Version retarget: 1
* volumesnapshots v1alpha1: 2

4.3.40 can be enabled again:
4 clusters currently failing (27%),  4 gone (27%),and  7 successful (47%), out of 15 who attempted the update over 7d
Currently failing classification:
* CSI_ALPHA: 2
* SINGLE_MASTER: 3
* UPI_ROUTER_DEGRADED: 1

repo: vrutkovs/cincinnati-graph-data