Teachability for any agent

Why are these changes needed?
It’s often useful to combine multiple advanced capabilities into a single agent, as OpenAI has done with their recently released GPTs and Assistants, for which function calling, code interpreter, and RAG capabilities can work together in a composable way. But AutoGen makes it hard to combine advanced capabilities in a composable way because ConversationalAgent obtains each agent reply from just one registered reply function. Given the mutual exclusivity among registered reply functions, the capabilities of (for example) RetrieveAssistantAgent and TeachableAgent cannot be easily combined today.
This PR enhances ConversationalAgent to support composable capabilities by means of a lightweight hook-registration mechanism allowing multiple capabilities to contribute to each agent reply. Leveraging this new mechanism, teachability can now be added to any agent that inherits from ConversationalAgent by instantiating a Teachability object (which replaces the original TeachableAgent class) and calling its add_to_agent(agent) method. For illustration, teachability can now be added to OpenAI Assistants through GPTAssistantAgent (unmodified by this PR), successfully combining teachability with whatever capabilities the particular OpenAI Assistants have (tools including functions, code interpreter, and retrieval). Teachable OpenAI Assistants are demonstrated in a new notebook.
The original teachability tests, notebook, documentation, and blog post are all updated.
Related issue number

Closes #534, #535, #782
Checks

[x] I've included any doc changes needed for https://microsoft.github.io/autogen/. See https://microsoft.github.io/autogen/docs/Contribute#documentation to build and test documentation locally.
[x] I've added tests (if relevant) corresponding to the changes introduced in this PR.
[x] I've made sure all auto checks have passed.

Codecov Report
Attention: 30 lines in your changes are missing coverage. Please review.

Comparison is base (30daa1e) 30.14% compared to head (947dc2a) 21.00%.

Files
Patch %
Lines

autogen/agentchat/conversable_agent.py
16.66%
29 Missing and 1 partial :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1091      +/-   ##
==========================================
- Coverage   30.14%   21.00%   -9.15%
==========================================
  Files          30       29       -1
  Lines        4020     3861     -159
  Branches      908      929      +21
==========================================
- Hits         1212      811     -401
- Misses       2729     2933     +204
- Partials       79      117      +38

Flag
Coverage Δ

unittests
20.95% <16.66%> (-9.15%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

Thanks @rickyloynd-microsoft , can you summarize the mechanisms at play here?
Upon a quick inspection I see two:

general capability of registering hooks, with only one hook currently implemented (process_last_message)
logic for handling process_last_message, which basically calls the registered function hooks in order, allowing each to successively rewrite the final message in a chat history to whatever they like, and to use this modified chat history as the basis for the about-to-occur generation.

Rather than rewriting the prior message, would it also be possible to append a new message (e.g., a floating system prompt), that adds context to the request and have the hooks operate on that? E.g., this pattern is already used in GroupChat, and seems to be rather common externally.

Thanks @rickyloynd-microsoft , can you summarize the mechanisms at play here?
Upon a quick inspection I see two:

general capability of registering hooks, with only one hook currently implemented (process_last_message)
logic for handling process_last_message, which basically calls the registered function hooks in order, allowing each to successively rewrite the final message in a chat history to whatever they like, and to use this modified chat history as the basis for the about-to-occur generation.

Rather than rewriting the prior message, would it also be possible to append a new message (e.g., a floating system prompt), that adds context to the request and have the hooks operate on that? E.g., this pattern is already used in GroupChat, and seems to be rather common externally.

That's a good summary. process_last_message is a hookable method (rather than a hook), and the idea is to add more hookable methods as future hooks require them. There could certainly be a separate hookable method for appending a message, if a hook (implemented by some capability like GroupChat) needed that. It's questionable whether that would work with the complex message history mechanism that GPTAssistantAgent inherits from OpenAI Assistants, but @gagb would know better.

🚀
The notebook showcases the idea really well.
Several ideas:

Separating capability from agent host is a great idea, composition >> inheritance for building custom agents. I think this direction should be how we implement future contrib agents.
Currently capability is a catch-all for agent skills. As we are at it, shall we also compose agent using capability and state? It is clear that multiple capabilities can share the same state such as vector memory, and multiple states may be associated with one capability as in teachability.
I am trying to understand why capability.add_to_agent(agent) not agent.add_capability(capability). It seems that currently the capability contains state specific to one agent.

2. Currently capability is a catch-all for agent skills. As we are at it, shall we also compose agent using capability and state? It is clear that multiple capabilities can share the same state such as vector memory, and multiple states may be associated with one capability as in teachability.

I agree that state will likely be central to other agent capabilities going forward, and it may make sense to share state among capabilities at some point. But it seems most pragmatic to wait until we reach that point before trying to design the mechanisms for sharing state.

3. I am trying to understand why capability.add_to_agent(agent) not agent.add_capability(capability).

Great question. My initial implementation was agent.add_capability(capability), but the code turned out to be more complex because the capability object knows how to connect itself to the agent, while the agent knows nothing about particular capabilities.

I am trying to understand why capability.add_to_agent(agent) not agent.add_capability(capability).

Great question. My initial implementation was agent.add_capability(capability), but the code turned out to be more complex because the capability object knows how to connect itself to the agent, while the agent knows nothing about particular capabilities.

Is there way to have a "capability executor" layer in the generic agent class so the capability can be specified at a high level?  Making adding new capabilities much easier than creating an agent?

I am trying to understand why capability.add_to_agent(agent) not agent.add_capability(capability).

Great question. My initial implementation was agent.add_capability(capability), but the code turned out to be more complex because the capability object knows how to connect itself to the agent, while the agent knows nothing about particular capabilities.

Do you think capability class's private methods with knowledge about the agent can potentially be reused by other capabilities? Would it be helpful to have a "capability executor" layer in the generic agent class so the capability can be specified at a high level, making adding new capabilities much easier than creating an agent.

I must be missing something. Adding new capabilities (to an existing agent) doesn't require creating another agent.

Yes creating new capability doesn’t require creating agent. I was referring to the text analyzer agent in the new capability.
In the previous comment I am thinking about some ways to make creating capabilities easier through composition. Of course we don’t want to do everything in this PR.

@rickyloynd-microsoft Could you please double check whether #974 changes the message data structure which conflicts with this PR?

@rickyloynd-microsoft Could you please double check whether #974 changes the message data structure which conflicts with this PR?

#974 involves a one-line change to teachable_agent.py, a file which this PR removes. No corresponding line exists in teachability.py which replaces it. So if #974 is merged first, I'll merge main into teach_cap and that should be enough. If this PR is merged first, teachable_agent.py goes away and that line change should be removed from #974.

Just a note that #974 also touches on conversable_agent.py so there will likely be some merge issues if that is merged first.

Yes, that merge will simple, and probably be automatic in either direction.

LGTM. In this PR or a separate PR, could you add the added notebook to this example page via https://github.com/microsoft/autogen/blob/main/website/docs/Examples.md

LGTM. In this PR or a separate PR, could you add the added notebook to this example page via https://github.com/microsoft/autogen/blob/main/website/docs/Examples.md

Now added!

@sonichi  Is this test currently expected to fail?
OpenAI4ContribTests / CompressionTest (ubuntu-latest, 3.9) (pull_request_target)

@sonichi Is this test currently expected to fail?
OpenAI4ContribTests / CompressionTest (ubuntu-latest, 3.9) (pull_request_target)

Yes. #1073


JOSS/review/code

Overall, the code is well documented and the readthedoc documentation is exhaustive.
To finalise the JOSS review, some minor comments need to be adressed still.

[ ] In https://hydroframesubsettools.readthedocs.io/en/latest/example_notebooks/example_notebooks.html, it would be great if it is mentioned that the notebooks can be run via Binder, and that a Princeton HydroGEN PIN is necessary. Great btw that acquiring the PIN is very straightforward!
[ ] With respect to the notebooks available on https://hydroframesubsettools.readthedocs.io/en/latest/example_notebooks/example_notebooks.html: it would be good to mention how to run the notebooks locally. Not a big deal if one is used to work with these notebooks, but since your packages is intended for less experiences users, more information would be useful.
[ ] It is not possible to run pytest in the test folder due to the following error message: FileNotFoundError: [Errno 2] No such file or directory: 'tests/correct_output/upstream_mask_lower_delaware.npy'. Would it be possible to make the files necessary for the tests available?

Many thanks!

Thank you, @JannisHoch, for your comments. We will address them below:
1 and 2: We have updated the documentation on ReadTheDocs to provide instructions for running the notebooks on Binder, Docker and on one's local machine. Glad to hear that the HydroGEN PIN was easy to get and use!
3: Are you running pytest from the root of the subsettools directory (i.e. above the "tests" directory)? I can see the delaware file exists on the repo (https://github.com/hydroframe/subsettools/tree/main/tests/correct_output), so I wonder if it's an issue with the directory from which pytest is run.

Hi @gartavanis,
thanks for updating the RTD documentation.
Regarding pytest, this is what I get when running pytest in subsettools/tests in branch main:
======================================================================================================= ERRORS =======================================================================================================
_______________________________________________________________________________________ ERROR collecting tests/test_domain.py ________________________________________________________________________________________
test_domain.py:127: in <module>
    np.load("tests/correct_output/upstream_mask_lower_delaware.npy"),
../../../../opt/anaconda3/envs/subsettools/lib/python3.11/site-packages/numpy/lib/_npyio_impl.py:455: in load
    fid = stack.enter_context(open(os.fspath(file), "rb"))
E   FileNotFoundError: [Errno 2] No such file or directory: 'tests/correct_output/upstream_mask_lower_delaware.npy'
============================================================================================== short test summary info ===============================================================================================
ERROR test_domain.py - FileNotFoundError: [Errno 2] No such file or directory: 'tests/correct_output/upstream_mask_lower_delaware.npy'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================================================================== 1 error in 3.13s ==================================================================================================

Indeed, if I execute pytest in the main directory, executes tests but fails on 16 tests (see attachment)?
subsettools_pytest.txt

Thanks for sharing the pytest logs, @JannisHoch.
I would run the tests in the main branch. We've made them easier to run than the joss-paper branch.
To provide a HydroGEN PIN for the tests, open the file subsettools/tests/conftest.py, uncomment lines 5 and 7 and provide your email and PIN.
After doing that, all the tests that check pure subsettools functionality should pass. In addition, there are three test files (test_conus1_upper_verde.py, test_conus1_upper_verde_spinup.py and test_multiple_hucs.py) that check integration with ParFlow. These tests require an installation of ParFlow to run. As ParFlow can be tricky to install, the easiest way would be to run them in our ParFlow Docker container.
If you would like to run the ParFlow integration tests as well, you can:

Get our Docker container (https://hydroframesubsettools.readthedocs.io/en/latest/getting_started.html#using-docker)
Open a terminal inside the container and do:

$ pip install pytest
$ git clone https://github.com/hydroframe/subsettools.git

Then, you can edit the conftest.py file as described above and run pytest.
There is a test in test_conus1_upper_verde.py, which I expect to fail. It requires 16 cores to run ParFlow, and most users don't have access to such systems. This tests doesn't check any additional subsettools functionality and doesn't add to the integration testing. It just makes the test suite harder to run, so I'm going to remove it from the test suite soon.
Thanks again for your time and effort!

Ah okay great, thanks for the explanation.
Would be good to mention somewhere how to provide the PIN and mail for the tests. Since running the tests seems to be rather elaborate, I could imagine there is a case for a dedicated section about it?

Thanks for the suggestion, @JannisHoch!
I've added a "Running the test suite" section to the Contributing page in the documentation with instructions.
I've also removed the test that requires 16 cores so that should no longer be an issue.

great, thanks!


Intellisense is showing "no suggestions" .

Here is the example code and playground file Playground
interface  Foo {
	x: number;
	y: string;
}
interface Bar {
	a: boolean,
	b: number,
	z: string;
}

interface FooBar {
	"foo": Foo,
	"bar": Bar
}

declare function test<K extends keyof FooBar, J extends keyof FooBar[K]>(i: K, l: J);
test("foo", "")

After typing "," popover message showing all the possible values of "foo". But when we start typing second parameter "No suggestion" message is appearing. Is there any other syntax to achieve this? How to get intellisense for second parameter?

Duplicate of #20782, #14812, and ultimately #14772. :sad:

OK, Closing the Issue.


what the target(Target, url) url is?

Hello
SomeApi github = Feign.builder()                      .encoder(new FormEncoder())                      .target(SomeApi.class, "http://api.some.org");
Can you tell me what the target(Target, url) url is?
Thanks

It is your destination host URL.


Only select columns from nested relation

I'm trying to port a query from go-pg that only selects columns from a nested parent. Is this still possible now that the special "_" placeholder isn't supported? Using ExcludeColumn("*") seems to drop all columns including those from relations.
pdb.Model(&model.Child{ID: 123}).
	WherePK().
	Column("_").
	Relation("Parent._").
	Relation("Parent.Grandparent").
	Select()

I initially assumed ExcludeColumn("*") was equivalent to Column("_") and would be scoped to the current query level but the following returns zero columns:
pdb.NewSelect().Model(&model.Child{ID: 123}).
	WherePK().
	ExcludeColumn("*").
	Relation("Parent", func(q *bun.SelectQuery) *bun.SelectQuery { return q.ExcludeColumn("*") }).
	Relation("Parent.Grandparent").
	Scan(ctx)

Seems to be working as expected - https://github.com/uptrace/bun/blob/master/internal/dbtest/orm_test.go#L284-L341
It will not work for has-many and m2m relations, but it is not a bug - just how those relations are working. go-pg should handle this the same.

Thanks, not sure where I went wrong on this one.


Update REST API module with param conversion + unit tests

This PR takes the node_api parameter conversion/validation changes for issues #17 and #19 and applies them to all the endpoints in the rest_api module. To do this with minimal code duplication, this also adds an api_requests module for request-related functions shared by both API modules.
To ensure uniform coverage, there are unit tests to dynamically find all HTTP request functions, and make sure that each one calls preprocess_request_params() at some point (either individually or via one of the wrapper functions in api_requests). Theoretically that will also check any future endpoints that are added.
Depends on PRs 20 and 21.

Tests are finished now. Just waiting to merge other PRs first.


Different VMAF result with the latest versions of ab-av1

I upgraded from an old version (I think it was the 0.7.12) to 0.8.0 and noticed strange results in my usual workflow so I went deeper and ran a test using the same command and file again:
ab-av1 vmaf --reference “pathfile1” --distorted “pathfile2”
Using ab-av1 0.8.0 the result is:
39.40909
Using ab-av1 0.8.0 and --vmaf ts_sync_mode=default the result is:
41.911076
Using ab-av1 0.7.19 the result is:
39.40909
Using ab-av1 0.7.12 the result is:
97.80562
Using ab-av1 0.7.15 the result is:
97.80562
Using ab-av1 0.7.17 the result is:
39.40909
Using FFMetrics 1.5b13 (that detect ffmpeg 6.1.1 in path):
Mean: 97.805618
Using MSU VQMT Free 14.1 (with the 0.6.1 vmaf model setting and cubic upscale to 1920x1080 just in case):
Mean: 97.436417
Since two external tools report a much higher vmaf I think there is an error with the latest versions of ab-av1, or is it an intended result?
Also i noticed that the 2 video files used have different duration, so i will manually compare frames to figure out better (not ab-av1 fault).

This is most likely related to #215 which was released with v0.7.17.
You could try running with debug logging to see the ffmpeg call and reproduce calling ffmpeg directly. Then modify the vmaf args to see what impacts the analysis here.

I enabled debug logging and saw ab-av1 0.8.0 makes a call like this:
ffmpeg -i filepath2 -i filepath1 -filter_complex [0:v]format=yuv420p10le,setpts=PTS-STARTPTS,settb=AVTB[dis];[1:v]format=yuv420p10le,setpts=PTS-STARTPTS,settb=AVTB[ref];[dis][ref]libvmaf=shortest=true:ts_sync_mode=nearest:n_threads=8 -f null -
FFMetric makes a call like this:
ffmpeg -hide_banner -nostdin -r 25 -i "filepath2" -r 25 -i "filepath1" -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=eof_action=endall:log_fmt=json:log_path='C:/Users/A/AppData/Local/Temp/FFMetrics/db2f3e36-90a1-4d80-a169-5d20264015eb.log':n_threads=7:pool=Harmonic Mean:model=version=vmaf_v0.6.1" -f null -
So i tried re-adding -r 25 before inputs of the ab-av1 ffmpeg call and the vmaf result is the same of the previous versions:
97.805618
But I don't know if this is really the correct case.
I will look at the frames manually to see if the quality is really good.

Interesting as we used to use -r 24 until that pr. Do you mind sharing the ffprobe, or part of it, for the two videos?
I think we removed it because the justifications for it were dubious. But if we have a good case for it maybe we can restore it, or add it as an option etc.

ffprobe of the source/reference file:
ffprobe version 6.1.1-full_build-www.gyan.dev Copyright (c) 2007-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\Videos\test.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2011-04-05T18:53:57.000000Z
  Duration: 00:01:30.48, start: 0.000000, bitrate: 4620 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 4465 kb/s, 25 fps, 25 tbr, 1k tbn (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 149 kb/s (default)
    Metadata:
      creation_time   : 2011-04-05T18:53:58.000000Z
      vendor_id       : [0][0][0][0]

ffprobe of the distorted/encoded file:
ffprobe version 6.1.1-full_build-www.gyan.dev Copyright (c) 2007-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
[libdav1d @ 000002dcbe803f00] libdav1d 1.3.0-22-g746ab8b
Input #0, matroska,webm, from 'E:\Videos\test2.mkv':
  Metadata:
    COMPATIBLE_BRANDS: isommp42
    creation_time   : 2011-04-05T18:53:57.000000Z
    MAJOR_BRAND     : mp42
    MINOR_VERSION   : 0
    ENCODER         : Lavf60.3.100
  Duration: 00:01:30.83, start: 0.000000, bitrate: 3122 kb/s
  Stream #0:0: Video: av1 (Main), yuv420p10le(tv, progressive), 1920x1080, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn
    Metadata:
      BPS             : 1556010
      NUMBER_OF_FRAMES: 199
      NUMBER_OF_BYTES : 1548230
      _STATISTICS_WRITING_APP: mkvmerge v79.0 ('Funeral Pyres') 64-bit
      _STATISTICS_WRITING_DATE_UTC: 2023-09-14 18:51:16
      _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      ENCODER         : Lavc60.3.100 av1_nvenc
      DURATION        : 00:01:30.826000000
  Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp (default)
    Metadata:
      VENDOR_ID       : [0][0][0][0]
      DURATION        : 00:01:30.418000000
[libdav1d @ 000002dcbe881d40] libdav1d 1.3.0-22-g746ab8b

For clarity, the encoded file is the result of merging several segments via mkvmerge.

I compared several frames where the VQMT tool reported worse vmaf values with the reference file and the quality is not as bad as one might think with a value of 39-40 as ab-av1 0.8.0 reports (thus without the -r argument).
If I had to compare subjectively from various vmaf values viewed in various experiments it seems to me throughout the video in line with 90+ values

So I think the answer is to re-introduce the -r FPS flag for vmaf. But what do we set it to? Perhaps the reference fps reported by ffprobe. And do we always set it, or only if there is some mismatch detected? In this case the probe output looks about the same for ref/distorted.
Also is there some public example we can add as a test case for this to avoid future regressions?

I don't like that idea. I mean, if you input a "broken" source file (I really see variable fps as broken or at least indecent), it is not VMAF's fault if different frames at the same time are compared.

In this case the probe output looks about the same for ref/distorted.
That is another problem, ffmpeg and ffprobe don't show the real framerate without an explicit search.

The other problem is that the encoded video with -r 24 is still wrong. Test programs for VMAF will still complain about it afterwards because it was not encoded properly.
ab-av1 should not represent a workaround in itself, but at most offer one optionally for such cases. I personally fix such cases by first converting the file with the correct constant fps (which is rarely "true" 24, some german or french movies have it), but you should need to know the correct one. If choosing/guessing the wrong one, VMAF calculation will work, but the playtime will differ from the "real" original, because the total frames differ.
If you want to optionally add a workaround (let's call it --vfr-workaround), you can't cover all cases without carefully inspecting the source file. Assuming that you only want to guarantee the correct VMAF calculation, you can do the following:
Convert the file with the fps-filter into x264lossless,x265lossless,ffv1, doesn't matter all are fast and produce nearly same file size  -vcodec ffv1 -level 3 -vf "fps=fps=24" -an -sn -dn tempoutfix.mkv and give this file als input to VMAF.

Check your files with mediainfo -f test.mp4
Keep an eye out for:
Frame rate mode                          : CFR
Frame rate mode                          : Constant
Frame rate                               : 25.000
Frame rate                               : 25.000 FPS
FrameRate_Num                            : 25

If there are differences/variable framerate, this is the culprit.

I report some mediainfo output for more context.
About the reference file:
Format                      : MPEG-4
Format profile              : Base Media / Version 2
Codec ID                    : mp42 (isom/mp42)
File size                   : 49.8 MiB
Duration                    : 1 min 30 s
Overall bit rate mode       : Variable
Overall bit rate            : 4 621 kb/s
Frame rate                  : 25.000 FPS
ID                          : 1
Format                      : AVC
Format/Info                 : Advanced Video Codec
Format profile              : High@L4
Format settings             : CABAC / 1 Ref Frames
Format settings, CABAC      : Yes
Format settings, Reference  : 1 frame
Format settings, GOP        : M=1, N=25
Codec ID                    : avc1
Codec ID/Info               : Advanced Video Coding
Duration                    : 1 min 30 s
Bit rate                    : 4 466 kb/s
Maximum bit rate            : 12.9 Mb/s
Width                       : 1 920 pixels
Height                      : 1 080 pixels
Display aspect ratio        : 16:9
Frame rate mode             : Constant
Frame rate                  : 25.000 FPS
Color space                 : YUV
Chroma subsampling          : 4:2:0
Bit depth                   : 8 bits
Scan type                   : Progressive
Bits/(Pixel*Frame)          : 0.086
Stream size                 : 48.2 MiB (97%)
Audio
ID                          : 2
Format                      : AAC LC
Format/Info                 : Advanced Audio Codec Low Complexity
Codec ID                    : mp4a-40-2
Duration                    : 1 min 30 s
Bit rate mode               : Variable
Bit rate                    : 150 kb/s
Maximum bit rate            : 219 kb/s
Channel(s)                  : 2 channels
Channel layout              : L R
Sampling rate               : 44.1 kHz
Frame rate                  : 43.066 FPS (1024 SPF)
Compression mode            : Lossy
Stream size                 : 1.62 MiB (3%)

About the distorted file:
Format                      : Matroska
Format version              : Version 4
File size                   : 33.8 MiB
Duration                    : 1 min 30 s
Overall bit rate            : 3 122 kb/s
Frame rate                  : 2.191 FPS
Video
ID                          : 1
Format                      : AV1
Format/Info                 : AOMedia Video 1
Format profile<EMAIL_ADDRESS>Codec ID                    : V_AV1
Duration                    : 1 min 30 s
Bit rate                    : 1 556 kb/s
Width                       : 1 920 pixels
Height                      : 1 080 pixels
Display aspect ratio        : 16:9
Frame rate mode             : Variable
Frame rate                  : 2.191 FPS
Color space                 : YUV
Chroma subsampling          : 4:2:0
Bit depth                   : 10 bits
Bits/(Pixel*Frame)          : 0.342
Stream size                 : 1.48 MiB (4%)
Writing library             : Lavc60.3.100 av1_nvenc
Default                     : No
Forced                      : No
Color range                 : Limited

Audio
ID                          : 2
Format                      : AAC LC
Format/Info                 : Advanced Audio Codec Low Complexity
Codec ID                    : A_AAC-2
Duration                    : 1 min 30 s
Channel(s)                  : 2 channels
Channel layout              : L R
Sampling rate               : 44.1 kHz
Frame rate                  : 43.066 FPS (1024 SPF)
Compression mode            : Lossy

Ugh, that's even worse if your distorted file comes out with variable fps and Frame rate                  : 2.191 FPS is definitely wrong. This shouldn't be the case if the reference file really has CFR.
There is something wrong with the reference file, I suspect either a broken header if mediainfo doesn't show it or it is generally corrupt.
Try this (it writes out the file as lossless into ffmpeg-codec, filtered as 25fps, strips off audio, so only video):
ffmpeg -i reference.mp4 -vcodec ffv1 -level 3 -vf "fps=fps=25" -an -sn -dn reference_25fpsfiltered_lossless.mp4
Try again with reference_25fpsfiltered_lossless.mp4 and compare results (also again mediainfo afterwards).

I tried with
ffmpeg -i reference.mp4 -vcodec ffv1 -level 3 -vf "fps=fps=25" -an -sn -dn reference_25fpsfiltered_lossless.mp4
but actually it show errors:
[mp4 @ 0000022c5afd7040] Could not find tag for codec ffv1 in stream #0, codec not currently supported in container
[out#0/mp4 @ 0000022c5a71eb80] Could not write header (incorrect codec parameters ?): Invalid argument
[vf#0:0 @ 0000022c5a6acb80] Error sending frames to consumers: Invalid argument
[vf#0:0 @ 0000022c5a6acb80] Task finished with error code: -22 (Invalid argument)
[vf#0:0 @ 0000022c5a6acb80] Terminating thread with return code -22 (Invalid argument)
[out#0/mp4 @ 0000022c5a71eb80] Nothing was written into output file, because at least one of its streams received no packets.

But
ffmpeg -i reference.mp4 -vcodec ffv1 -level 3 -vf "fps=fps=25" -an -sn -dn reference_25fpsfiltered_lossless.mkv
Works.
So using ffmpeg -i distorted.mkv -i reference_25fpsfiltered_lossless.mkv -filter_complex [0:v]format=yuv420p10le,setpts=PTS-STARTPTS,settb=AVTB[dis];[1:v]format=yuv420p10le,setpts=PTS-STARTPTS,settb=AVTB[ref];[dis][ref]libvmaf=shortest=true:ts_sync_mode=nearest:n_threads=8 -f null -
The output is:
[Parsed_libvmaf_6 @<PHONE_NUMBER>5ddfc0] VMAF score: 37.938792e=N/A speed=0.565x
[out#0/null @ 00000265fef97b80] video:972KiB audio:15576KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 2262 fps= 14 q=-0.0 Lsize=N/A time=00:01:30.41 bitrate=N/A speed=0.565x

So still a low VMAF value instead of a 90+
I think something in the merging with mkvmerge set the wrong frame length and fps. (distorted file)

Also with:
ffmpeg -i reference_25fpsfiltered_lossless.mkv -i distorted_25fpsfiltered_lossless.mkv -filter_complex [0:v]format=yuv420p10le,setpts=PTS-STARTPTS,settb=AVTB[dis];[1:v]format=yuv420p10le,setpts=PTS-STARTPTS,settb=AVTB[ref];[dis][ref]libvmaf=shortest=true:ts_sync_mode=nearest:n_threads=8 -f null -
It output the same:
[Parsed_libvmaf_6 @ 0000028a2ea360c0] VMAF score: 37.932722e=N/A speed=0.415x
[out#0/null @ 0000028a2dedcc00] video:972KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 2262 fps= 10 q=-0.0 Lsize=N/A time=00:01:30.44 bitrate=N/A speed=0.415x

But
ffmpeg -i reference.mp4 -vcodec ffv1 -level 3 -vf "fps=fps=25" -an -sn -dn reference_25fpsfiltered_lossless.mkv
Works

Yeah, sorry my bad...ffv isn't compatible with mp4. mkv is the correct solution.
I meant repeat the encoding with ab-av1 with this file. (to create a "good" distorted file)

I meant repeat the encoding with ab-av1 with this file. (to create a "good" distorted file)

Using ab-av1 0.8.0 and creating a distorted file with the following command (without forcing fps):
ab-av1 auto-encode -i reference.mp4 -o distorted.mkv -e av1_nvenc
It finished the encoding with output:
00:02:56 crf 39 1/1 ########################################################################### (VMAF 95.39, size 36%)  00:00:11 Encoding ################################################################################## (215 fps, eta 0s)Encoded 18.16 MiB (36%)
Then I compared the VMAF value between the file reference.mp4 and this distorted.mkv
Using ab-av1 0.8.0 ab-av1 vmaf --reference reference.mp4 --distorted distorted.mkv
Output:
00:03:46 ####################################################################################### (vmaf 10 fps, eta 0s)
95.37866

Using VQMT 14.1 Free (vmaf model 061):
The mean VMAF is 94.978012
Therefore, it aligns with the comparison result obtained from ab-av1/ffmpeg.
So, as I hypothesized, there seems to be no problem with the input file, but with that particular encoded (distorted) file that I mentioned at the beginning.

I encounter same problem too
ffmpeg and ab-av1 show completely different scores, and I believe ffmpeg giving the right one
ffmpeg 98.612468
ab-av1 74.52522
Here's file:
https://www.mediafire.com/file/c8zbu5piw0lzpy8/Transcode.zip/file
And here's how to reproduce this:
Run this to generate distorted file
ffmpeg -i ref5.flv -y -c:a copy -c:v libsvtav1 -preset 4 -crf 18 -keyint_min 150 -svtav1-params fast-decode=1 -svtav1-params tune=0 -benchmark ref5_crf_18.mp4
Run this to calculate VMAF score in ffmpeg
ffmpeg -r 24 -i ref5_crf_18.mp4 -r 24 -i ref5.flv -lavfi libvmaf="n_threads=4" -f null -
VMAF score: 98.612468

Run this to calculate VMAF score in ab-av1
RUST_LOG=ab_av1=debug ab-av1 vmaf --reference ref5.flv --distorted ref5_crf_18.mp4
⠁ 00:00:00 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (vmaf running, eta 0s)[2024-12-14T20:47:55Z INFO  ab_av1::vmaf] vmaf ref5_crf_18.mp4 vs reference ref5.flv
[2024-12-14T20:47:55Z DEBUG ab_av1::vmaf] cmd `ffmpeg -i ref5_crf_18.mp4 -i ref5.flv -filter_complex [0:v]format=yuv444p10le,setpts=PTS-STARTPTS,settb=AVTB[dis];[1:v]format=yuv444p10le,setpts=PTS-STARTPTS,settb=AVTB[ref];[dis][ref]libvmaf=shortest=true:ts_sync_mode=nearest:n_threads=4 -f null -`
  00:00:12 ############################################################################################################################################################################################################ (vmaf 37 fps, eta 0s)
74.52522

After adding -r 24 to the ffmpeg command ab-av1 generated, everything seems fine now
ffmpeg -r 24 -i ref5_crf_18.mp4 -r 24 -i ref5.flv -filter_complex "[0:v]format=yuv444p10le,setpts=PTS-STARTPTS,settb=AVTB[dis];[1:v]format=yuv444p10le,setpts=PTS-STARTPTS,settb=AVTB[ref];[dis][ref]libvmaf=shortest=true:ts_sync_mode=nearest:n_threads=4" -f null -
VMAF score: 98.612468

My question is that how can I adding -r 24 in version v0.8.0, is it possible?
Or I have to fork and modify code?

seems fine

And only that. ;)
Can you try for fun what happens if you use -r 25 (PAL), -r 23.976 (ntsc-film) and -r 29.970 (ntsc)?

-r 25 (PAL), -r 23.976 (ntsc-film) and -r 29.970 (ntsc)
All gives same VMAF score: 98.612468

Yep, that's exactly what my playing around with this problem has revealed. Any fixed fps rate results in a correct vmaf calculation but it distorts the resulting video and so simply always using -r 24 would definitely not be a good idea or even a workaround.

#250 I've added --vmaf-fps arg for setting -r. This allows setting the value to workaround this issue.
I'm not sure I understand the downside of defaulting this again to 24 (or 25 or whatever), since that used to work ok afaik. For my test videos I think 24/25 or no explicit value works fine. Is there a downside to defaulting vmaf fps?

I'll have the next version default --vmaf-fps 25 since it fixes this issue and I know of no downsides.
This behaviour can be disabled by setting --vmaf-fps 0.


Cannot fetch data with pandas.read_sql

Thanks for putting this project together! It's really great :)
We started using it in our analytics work and ran into an issue when trying to leverage the pandas/sqlalchemy integration. The following code throws the error "Cursor must be loaded before call TrinoResultMetaData":
from sqlalchemy import create_engine
import pandas as pd
engine = create_engine("trino://localhost:8086/s3_testing")
df = pd.read_sql("SELECT 1", engine)

Output:
~/anaconda/lib/python3.7/site-packages/sqlalchemy_trino/result.py in _load(self)
     18             return
     19         if not self._is_fetched():
---> 20             raise Exception("Cursor must be loaded before call TrinoResultMetaData")
     21         self.__delegator = ResultMetaData(self.__parent, self.__cursor.description)
     22

Exception: Cursor must be loaded before call TrinoResultMetaData

Any idea what might cause that?

Thanks @mhworth for bug report.
This problem is because Trino's Cursor is lazy loading. It's only return result when first data come in.
I'm working on this to solve this bug.

@dungdm93 I tried the newest trino code after the merge but its still not working. Do you have to change something in this repo?

@HassanOuda could you screenshot your error?

I cloned the latest Trino on master and called it 0.306.0

Oh, this error is because
https://github.com/dungdm93/sqlalchemy-trino/blob/ec28debd1ed456b48c5aa1017dd648dd752bd6c3/sqlalchemy_trino/result.py#L23-L26
exists before trinodb/trino-python-client#80 and still not compatible with new one.

Thank you!

@dungdm93 I am still seeing this issue. I see your changes in the trinodb repo were merged into master, has the release just not happened yet? is there a workaround?

@dungdm93 I am still seeing this issue. I see your changes in the trinodb repo were merged into master, has the release just not happened yet? is there a workaround?

We're having the same issue. @dungdm93 mentioned that a fix is ready but not released, it that correct?

With the latest sqlalchemy-trino==0.3.0 the error is still reproducible.

@jonto please try and let's me known is it work with you or not, thanks.

Hi @dungdm93 Many thanks. This worked for me while testing a very small dataset. The write completed without error. I receive an error when dealing with moderate ~70k records however. I have our Trino Engineering team looking into it.


Prep user stories for Data Package Registry

@pwalsh can we do this collaboratively?

@rgrp I've done most of it but we can address it afresh in next meeting.


Change default API version to latest GA version currently (Spring 22)

Hey, sorry this didn't get reviewed in time, we aren't doing feature work on master so I'll close this.
FWIW, jsforce v3 defaults to v50.0 if the user didn't specify it.


Implement clear-all and get-all

clear-all  can be implemented with empty byte-array as begin and 255 as the end parameter. This can be helpful where we want to wipe all the keys similar to FLUSHALL in Redis. Similar thing can be done to implement get-all using get-range to return all the keys in the database.
Reference: https://forums.foundationdb.org/t/how-to-clear-all-keys-in-foundationdb-using-java/351/2
This is not implemented as part of any official API but I thought it will be a handy wrapper. Feel free to close this if it's irrelevant.

Would you want to submit a PR?

Sorry, I am not familiar enough with rust to submit a PR.

@bluejekyll: I want to experiment with FoundationDB, so I'll try to implement this.


[CARBONDATA-3928] Removed records from exception message.

Why is this PR needed?
Currently, when the string length exceeds 32000 and bad record action as fail then
records are thrown in exception message which violates security concern.
What changes were proposed in this PR?
Removed the records from the exception message and only printed in logger file and redirected csv file.
Does this PR introduce any user interface change?

No

Is any new testcase added?

Yes

Build Success with Spark 2.3.4, Please check CI http://<IP_ADDRESS>:12545/job/ApacheCarbonPRBuilder2.3/4046/

Build Success with Spark 2.4.5, Please check CI http://<IP_ADDRESS>:12545/job/ApacheCarbon_PR_Builder_2.4.5/2308/

LGTM


[Question] About Android mediacodec & 0-copy to flutter texture

We know that Android hardware video decoding (mediacodec) is deeply tied to the surface of android. And ffmpeg wraps mediacodec and can render directly to android surface. libmpv wraps ffmpeg again. Would you talk about the most efficient way for flutter to call libmpv on android for hardware decoding and rendering to flutter texture ?

I believe this is a question.
Without diving much into the internal specifics of either libmpv or Android, there's a OpenGL render API from libmpv which I aim to use on Android like other platforms that I've implemented. It is fairly performant. mpv-android is a good reference application. I'm not really worrying about "wrapper"s, as long as the video output is hardware accelerated & capable of handling multiple 4K/8K videos at once. A *-copy hwdec does not indicate a "wrapper" but copy back to CPU RAM during render (may be anything, pixel buffer or any other video output related object). Flutter's own rendering mechanism & Texture widget in itself is a wrapper & there is a high degree of inter-op involved on every platform it runs on.
TextureRegistry on Android seems to be based on Android's SurfaceTexture which AFAIK is GL backed.
Even for Windows, as you can see in the video attached in README.md that it still uses slight CPU. Ideally, even that could be made absolute zero, if we're able to remove current ANGLE translation layer. On the other hand, package:media_kit is already more performant than a <video> in Google Chrome or Media Player, shipped with Windows 11.
Like everything in computer science, "Pre-mature optimization is the root of all evil.".
From that standpoint, we're fairly satisfied with the order of performance. Secondly, if any of our customer is specifically aiming for highest order of performance possible, then they shouldn't possibly use Flutter in the first place. With that being said, I'm also looking forward to any improvements that can be made.
Coming back to Android, first step to all this will be to having an implementation in the first place.  Currently, it's uncertain if we should use keep using libmpv like other platforms or use ExoPlayer instead. There are trade-offs with everything, bundle size (fairly important for mobile applications), performance & licensing etc. Few projects I know look for a solution to render RTSP streams on Flutter Android & unfortunately it's something ExoPlayer can't. In such a case, libmpv based backend will be really good.

Just to clarify, I personally do believe that Flutter is really performant & best choice for making applications of any kind.

Thanks for sharing your views, very inspiring.  I would also like to discuss some details with you.
I've briefly looked at the code for mpv-android. It simply takes the android surface and gives it to libmpv.
https://github.com/mpv-android/mpv-android/blob/master/app/src/main/jni/render.cpp#L15-L19
We know that  mediacodec is tied to android‘s surface. without android‘s surface you can't even start mediacodec.
If so, flutter's PlatformView will be inevitable.

Thanks for taking a look. I haven't done much detailed analysis of the Android yet.
However, I'm pretty sure there are similar challenges for each platform, like I faced on Windows. Current implementation also seemed impossible few months ago because API from libmpv is OpenGL based, while the H/W based texture API in Flutter Windows is DirectX 11 based. Design document, package architecture, FFI, platform channels, hosting ANGLE, translation layer, texture support, black flickers etc. etc. There's a lot that I had to do to get it working.

I've briefly looked at the code of mpv-android. It simply takes the android surface and gives it to libmpv.

Oh... That's interesting. So, it uses --wid on Android for rendering. I thought there was hardcore OpenGL ES usage (like we have) on Java/Kotlin side of things. AFAIK, there should still be two types of rendering possible:

--vo=gpu: Allowing us to use OpenGL ES & render into a SurfaceTexture, which then Flutter can consume.
--vo=mediacodec_embed: The one that renders directly into android.view.Surface & I believe mpv-android uses.

This comment further specifies things:
https://mpv.io/manual/stable/#video-output-drivers-mediacodec-embed

If so, Flutter's platform view will be inevitable.

That's quite certainly true. It's the only way to get native Android components like android.view.Surface shown in Flutter. I'll try my best to avoid platform view usage at all costs. I feel it's not good from performance standpoint & has many other trade-offs.

Now that you've told me that --wid works on Android, my goal will be to try & get it working first. IMO it's conceptually very clean API for hosting. It will save me from getting my hands dirty with Java/Kotlin & other platform specific GL issues etc.
It seems that this should be possible as well (AFAIK), android.view.Surface has a constructor that takes SurfaceTexture & SurfaceTexture is something Flutter can easily read from. As long as... it can work "off-screen".
If --wid does not work, I will bother with --vo=gpu etc. & go down that road (hoping that'd work).

I've re-opened this issue for targeting Android issue. Why keep it all just a discussion :)
I'm assigning myself for now, however I'm kind of busy these days. I'd love to work on supporting Android.

I made initial implementation. Try out APK: https://drive.google.com/file/d/1nqqNGqoUt6oXM1DJ4g7kWCmr5FUzOMUy
Even though this may look ready, there's a large scope of work required before landing #100.

Don't try the stress test for now.


Jg/dcos 38819 new table column name

<!-- Suplemental codeblock -->

Checklist

[ ] Did you add a JIRA issue in a commit message or as part of the branch name?
[ ] Did you add new unit tests?
[ ] Did you add new integration tests?
[ ] If this is a regression, did you write a test to catch this in the future?

Can one of the admins verify this patch?

Can one of the admins verify this patch?

conflicts


Write June 2023 Building blog update

Write development update for Building blog.

Going to skip June and just to July update given that we are one week into July.


CSS Minification/Optimization

Naturally, the SASS community is finding better ways to organize and optimize their stylesheets, but the thought on everyone's mind is, "When will duplicate media queries be minified into single media queries?"
See feature request #116
As such, it would be great if Foundation App was able to use a tool like css-condense to optimize stylesheet size.
I just want to start the discussion on this and perhaps try to incorporate a gulp task into a pull request. Inevitably, complications will arise.

Do these sorts of techniques negatively affect the cascade at all?

Not certain, but probably, the developer says that there is a --safe-mode that will aid in most scenarios, but it would be ideal to structure the project in such a way to compress without safe mode in order to combine media queries.
I'll throw a test scenario together and see if I can duplicate the docs without error.

Looks like you guys are already using the gulp-minify-css package (which uses clean-css), but is not at it's latest version (which contains considerable enhancements).

I have put together a gulp plugin as well as a feature branch to show how css-condense could be used.
For now, the functionality is only applied to the dist set of tasks, but a quick test condensed the 121 media queries from Foundation down to 17. Also, the rest of the css-condense features were applied.
Quickly glancing at the compiled docs, I did not see any initial problems, but this is a good place for us to start. Anyone want to audit this for us?

Here's a gist of css-condense in action. I have turned on line break, but the styles are still mangled.
https://gist.github.com/tatemz/bde16d9fa5f75ff6091c

While exploring some benchmarking techniques (that go beyond browser inspectors), I found this:
https://github.com/axemclion/perfjankie
Any thoughts on implementing this CSS (and AngularJS component) performance tool into a gulp task and travis test?

Yes
On Feb 15, 2015 2:37 PM, "tatemz"<EMAIL_ADDRESS>wrote:

While exploring some benchmarking techniques (that go beyond browser
inspectors), I found this:
https://github.com/axemclion/perfjankie
Any thoughts on implementing this CSS (and AngularJS component)
performance tool into a gulp task and travis test?
—
Reply to this email directly or view it on GitHub
https://github.com/zurb/foundation-apps/issues/440#issuecomment-74432808
.

Here's a first attempt at some browser testing. Looks like perfjankie is a pretty good browser testing tool, but looks like there are some errors to get sorted out.
Since this is off this issue's topic, I'll open a pull request and get started on a gulp module as well as a a test config for perfjankie tests.

As to this issue's topic, I have tested css-condense locally and have found that there are no css errors I have run into. If there is interest in using the proposed gulp task to condense and optimize media queries and css rulesets then I suppose I can open up a PR for that as well, else this issue may be closed.


Add a case .noObjC to StdlibUnittest's TestPredicate

This predicate case evaluates to false #if _runtime(_ObjC), true otherwise.

@gribozavr While we're at it, I was wondering whether cases .Always and .Never should also exist. There are a lot of uses of .Custom({true}, "") around.

I'd personally rather name these "Apple" and "NonApple", rather than using the presence of the runtime as a stand-in. (And if we start testing swift-corelibs-foundation on OS X as "non-objc-runtime", we'll need that distinction!)

Seems to me that referring to the runtime is more precise; and your swift-corelibs-foundation aside appears to undermine the "Apple" and "NonApple" nomenclature. Surely I am misunderstanding?

Let's deal with swift-corelibs-foundation distinction later.  I'm not sure it will even come up, because this repository can't depend on corelibs-foundation -- that would be circular.
For now, for compile-time requirements and for lit REQUIRES tags we have been using the runtime distinction, and I would prefer to keep it the same everywhere, at least to eliminate the subtle differences.
I agree about .Always and .Never, could you submit that as a separate pull request?

@swift-ci Please test


Idea: pre-commit-hook

I think it would be a very useful feature to expose this project as a pre-commit-hook.
This way, people would be able to, say, update their README.md file automatically on each change, without running multi-step CI jobs, or doing that manually.

That's a great idea! I haven't written pre-commit hooks before (only used existing ones). If anyone wants to make a PR, I'll happily review it and add it. Otherwise it will take me a while to learn how to do that and add one.


Test renovate.json

We're currently processing your upload.  This comment will be updated when the results are available.


Share links on moved files do not update / work

Describe the bug
If you share a file, then you move that file, it will still show as shared. The link, however, will not work. The share must be re-made for it to work.
Steps to reproduce

Make a shared file
Move the shared file
Attempt accessing the file at the first link

Expected behavior
Either the share to be broken, the share link to re-point to the file, or the share link to show that it is no longer valid.
Actual behavior
Upon loading the link, the filename is displayed at the top of the screen, but the preview area is blank.

Could not reproduce your problem on https://ocis.ocis-wopi.latest.owncloud.works/

Login as admin
Create file Test.md
Invite einstein on that file
Create a link on that file "Only invited people"
Open new anonymous browser window and log in as einstein
Use the link from 4
as admin move the file
repeat 5 and 6

Maybe that's because you're adding a user. I was making a public link.


Add "Create Tag" page

Details

This PR adds the ability to add a new tag to the workspace in ND.
Fixed Issues

$ https://github.com/Expensify/App/issues/37311
PROPOSAL: N/A
Tests

Create a Control workspace in OD.
Enter the following in the console, while the workspace is open:

var p = Policy.getActive();
p.policy.areTagsEnabled = true;
p.save();

Open ND and go to workspace settings -> tags.
Verify that you can create a new tag.

[x] Verify that no errors appear in the JS console

Offline tests

N/A
QA Steps

Create a Control workspace in OD.
Enter the following in the console, while the workspace is open:

var p = Policy.getActive();
p.policy.areTagsEnabled = true;
p.save();

Open ND and go to workspace settings -> tags.
Verify that you can create a new tag.

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

https://github.com/Expensify/App/assets/30054992/46c6009d-7046-4ca5-9f26-10a159d14a5e

Android: mWeb Chrome

https://github.com/Expensify/App/assets/30054992/2edfed22-f657-4556-95ec-d9862c151bc3

iOS: Native

https://github.com/Expensify/App/assets/30054992/984397cc-19b2-454c-83f7-cd6075ce12a6

iOS: mWeb Safari

https://github.com/Expensify/App/assets/30054992/557a72f1-b7e8-43fe-ac41-2c47a4a782af

MacOS: Chrome / Safari

https://github.com/Expensify/App/assets/30054992/73d39237-dcfa-4159-b8cd-bc45b420b425

MacOS: Desktop

https://github.com/Expensify/App/assets/30054992/a93235fd-1972-4e87-bbc6-3ff8262c87ef

I think so and I do think it's the scope here since we'd add the pendingAction to the call to createPolicyTag here

Same question for where do we show the error for failure scenario. What is expected ?

It would / should show up as a red brick below the list item. Again, I think this should be picked up from the error object inside the policyTagsList object.

Could be expected, but when the tags are loading we don't have the setting button and add tags button is left aligned, the layout feels a little odd

Hm... This is similar to how categories page is behaving. @mountiny / @luacmartins do we need any change here?

interesting, I would say we dont have to worry about it now and handle it together with Categories page as a follow up if the issue is same for both

Woo, the new checklist is working! Let us know when it's ready for final review!

@shawnborton This is ready for a final look, C+ approved, could you have a look please?

We're waiting for translations as well @mountiny

Tests passed when I merged.

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/luacmartins in version: 1.4.52-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/Beamanator in version: 1.4.52-6 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


Might Fix #8619

This PR is puposed to fix https://github.com/go-gitea/gitea/issues/8619
Please have a look at it for further description.
Some notes towards the PR: I never programmed go before and have no language knowledge
but as far as I can see receives the function listUserRepos private repositories only if the bool private is true. So to fix my Issue I removed the too strong condition in ListUserRepos. This allows non admin users(not owning the repo) to also retrieve the private repositories with read permission.
IMO this should not any have other impacts besides fixing the issue because of the santy checks made in line 28. This condition might also be reduced to just checking for read permission but I have no further framework and api knowledge so I did not touch those lines.
I did not had time to test it yet.

Codecov Report

Merging #8621 into master will increase coverage by 0.01%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master    #8621      +/-   ##
==========================================
+ Coverage   41.66%   41.68%   +0.01%
==========================================
  Files         529      529
  Lines       68546    68546
==========================================
+ Hits        28563    28575      +12
+ Misses      36325    36316       -9
+ Partials     3658     3655       -3

Impacted Files
Coverage Δ

routers/api/v1/user/repo.go
51.8% <100%> (ø)
:arrow_up:

modules/process/manager.go
78.37% <0%> (-4.06%)
:arrow_down:

modules/task/migrate.go
24.35% <0%> (-3.85%)
:arrow_down:

models/error.go
32.08% <0%> (-1.25%)
:arrow_down:

models/repo.go
48.94% <0%> (+0.05%)
:arrow_up:

routers/repo/view.go
39.9% <0%> (+0.92%)
:arrow_up:

models/repo_list.go
74.14% <0%> (+0.97%)
:arrow_up:

modules/log/event.go
65.64% <0%> (+1.02%)
:arrow_up:

modules/migrations/gitea.go
11.77% <0%> (+1.49%)
:arrow_up:

modules/migrations/migrate.go
22.9% <0%> (+1.67%)
:arrow_up:

... and 2 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d8161ee...fc14e05. Read the comment docs.

OK, somewhat surprisingly I think this would work. The underlying code appears somewhat inefficient but that's a different problem.

LG-TM? Hello? 😄


Speed test on BrnoCompSpeed dataset

Hi, I tried test.py and it performed well(output the video with 3D BBox). However, I can't find the visualized estimated speed for the detections, and I can't find the speed-related code in other .py files. Cound you please tell me how to find that?

Hi, when I run python dataset_utils/test.py, error happens:
File "dataset_utils/../keras_retinanet/models/resnet.py", line 19, in
import keras_resnet
ModuleNotFoundError: No module named 'keras_resnet'
Could you help me with this error? Thank you.

Hi, the tracking data gets saved to a file defined here:
https://github.com/kocurvik/retinanet_traffic_3D/blob/592ceac767750c65bb3d6678b36e6880a7bb0403/dataset_utils/tracker.py#L61
That is the results folder of the BrnoCompSpeed dataset. The name is usually defined by the model name such as results/session_4_center/system_model_name.json
Then to evaluate the speeds you have to use the official BrnoCompSpeed evaluation code. Directly outputting the speeds for BrnoCompSpeed is now not supported, but you should be able to easily implement this. You can check the code for the evaluation of dataset introduced in Luvizon et al.:
https://github.com/kocurvik/retinanet_traffic_3D/blob/592ceac767750c65bb3d6678b36e6880a7bb0403/dataset_utils/test_luvizon.py#L274
Note that for BrnoCompSpeed there is a single scale for all lanes so you could load that directly into the project_fn.
https://github.com/kocurvik/retinanet_traffic_3D/blob/592ceac767750c65bb3d6678b36e6880a7bb0403/dataset_utils/test_luvizon.py#L80
Specifically modifying the line:
https://github.com/kocurvik/retinanet_traffic_3D/blob/592ceac767750c65bb3d6678b36e6880a7bb0403/dataset_utils/test_luvizon.py#L95
to:
return scale * np.array([getWorldCoordinagesOnRoadPlane(p, focal, roadPlane, pp) for p in pts])
Also it seems that in the referenced code the mean is used instead of median. This was probably just checked in some later iteration version of the code so you should switch it back to median for BrnoCompSpeed. E.g. uncomment the line:
https://github.com/kocurvik/retinanet_traffic_3D/blob/592ceac767750c65bb3d6678b36e6880a7bb0403/dataset_utils/test_luvizon.py#L173
And comment the one below it.

HI, I have a question. If I want to do speed test on BrnoCompSpeed dataset, must I do track_detections function in dataset_utils/test.py to get 'system_{write_name}.json'?
@jinqi2376 Have you successfully visualized the estimated speed for the detections of BrnoCompSpeed dataset?

HI, I have a question. If I want to do speed test on BrnoCompSpeed dataset, must I do track_detections function in dataset_utils/test.py to get 'system_{write_name}.json'? @jinqi2376 Have you successfully visualized the estimated speed for the detections of BrnoCompSpeed dataset?

I assume you can find the answer in #6  The Tracker object should generate the needed system_name_of_the_system.json with either of the approaches described in the referenced issue.

I ran test.py with online=False in test_video and using track_detections and got a system_name_of_the_system.json. Then, I tried compute_speed function in test_luvizon.py on BrnoCompSpeed dataset according to refenrences above. Speed returned were all None. System_name_of_the_system.json file and test_luvizon.py file are in zip file below. Could you help me find out what's the problem?
files used.zip

You are not supposed to use test_luvizon at all if you are working with BrnoCompSpeed. Once you have the file system_name_of_the_system.json you have to use the official BrnoCompSpeed evaluation code which I already mentioned in this issue to calculate the speed measurement accuracy. If you just want to output the individual speeds you would have to write that code yourself. Check out this part of the BrnoCompSpeed evaluation code to see how the calculation is performed.

can you please share the dataset as I am also working on this.
<EMAIL_ADDRESS>


Fix blurry-image issue after scaling up

After setting the width and height parameters to higher-than-default values, the image appears somewhat blurry. For example, even though my YouTube video has a maximum resolution of 1080p, when I set width and height to 960 and 540, respectively (https://markdown-videos.vercel.app/youtube/MtSMa02I1Co?width=960&height=540), the image is blurry:

I don't know if it's intentional or not. But there should be a way to make the image nonblurry. For example, https://img.youtube.com/vi/MtSMa02I1Co/maxresdefault.jpg would generate the maximum-resolution, nonblurry image.
As a side note (in addition to this blurry issue), perhaps you can consider grabbing the maximum-resolution width and height values from, for example, https://img.youtube.com/vi/{video_id}/maxresdefault.jpg, and use those values as the default values? And/or use the image from https://img.youtube.com/vi/{video_id}/maxresdefault.jpg and add the play button on top?

Thanks for shedding light on this!
If you feel up to it you're more than welcome to make a PR on this

No problem! Unfortunately even though I have some amount of Python experience, I have very little knowledge of API--I'll have to leave it up to you to implement this when you get a chance:)

@David-davidlxl if you want, I can help you along :)
The build instructions are in the README... and if you need any more help I can assist you through discord. My username is snailedlt

That's very nice of you! I just sent you a friend request on Discord


[Bug] Refresh function doesn't work

Summary
I would like to automatically refresh feature flags on the client side but I'm unable to do that.
My code.
	context := gb.NewContext().
		WithAPIHost(gbConfig.Host).
		WithClientKey(gbConfig.Key).
		WithTrackingCallback(func(experiment *gb.Experiment, result *gb.Result) {
			log.Println("Viewed Experiment")
			log.Println("Experiment Id", experiment.Key)
			log.Println("Variation Id", result.VariationID)
		})

	g := gb.New(context)
	g.WithAttributes(gb.Attributes{
		"id":       "foo",
		"deviceId": "foo",
		"company":  "foo",
		"loggedIn": true,
		"employee": true,
		"country":  "foo",
		"browser":  "foo",
		"url":      "foo",
	})

	fmt.Println(g.GetAPIInfo())
	g.LoadFeatures(&gb.FeatureRepoOptions{})
	fmt.Println(g.LatestFeatureUpdate())

	if g.EvalFeature("my-feature").On {
		fmt.Println("feature is enabled!")
	}

	fmt.Println("Sleep!")
	time.Sleep(time.Second * 10)

	g.LoadFeatures(&gb.FeatureRepoOptions{
		SkipCache: true,
	})

	fmt.Println(g.LatestFeatureUpdate())

	g.RefreshFeatures(&gb.FeatureRepoOptions{
		AutoRefresh: false,
		SkipCache:   true,
		Timeout:     5,
	})

	if g.EvalFeature("my-feature").On {
		fmt.Println("feature is enabled!")
	}
	fmt.Println(g.LatestFeatureUpdate())

Expected Behavior
Growthbook refresh features on client side.
Current Behavior
I only see correct flag state on start. If I change flag state during runtime, it's not refreshed properly.
Logs based on above code (toggle OFF):
https://<host> <key>
2023-08-31 17:14:01.765 +0000 UTC
Sleep! (here toggle ON)
2023-08-31 17:14:01.765 +0000 UTC
2023-08-31 17:14:01.765 +0000 UTC

Logs based on above code (toggle ON):
2023-08-31 17:24:06.249 +0000 UTC
feature is enabled!
Sleep! (here teoggle OFF)
2023-08-31 17:24:06.249 +0000 UTC
feature is enabled!
2023-08-31 17:24:06.249 +0000 UTC

I believe this should be fixed now in v0.1.6. This is the same problem as #16.


Testing for draft pr

Please prefix your pull request with one of the following: [FEATURE] [FIX] [IMPROVEMENT].
In raising this pull request, I confirm the following (please check boxes):

[ ] I have read and understood the contributors guide.
[ ] I have checked that another pull request for this purpose does not exist.
[ ] I have considered, and confirmed that this submission will be valuable to others.
[ ] I accept that this submission may not be used, and the pull request closed at the will of the maintainer.
[ ] I give this submission freely, and claim no ownership to its content.

My familiarity with the project is as follows (check one):

[ ] I have never used the project.
[ ] I have used the project briefly.
[ ] I have used the project extensively, but have not contributed previously.
[ ] I am an active contributor to the project.

{pull request content here}

Codecov Report
Patch coverage: 80.00% and no project coverage change.

Comparison is base (b21f6f0) 84.17% compared to head (6573704) 84.18%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
Additional details and impacted files
@@           Coverage Diff           @@
##           master      #29   +/-   ##
=======================================
  Coverage   84.17%   84.18%
=======================================
  Files          36       36
  Lines        3678     3679    +1
  Branches      741      741
=======================================
+ Hits         3096     3097    +1
  Misses        452      452
  Partials      130      130

Flag
Coverage Δ

unittests
84.18% <80.00%> (+<0.01%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

mod_ci/controllers.py
74.85% <80.00%> (+0.02%)
:arrow_up:

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


valtype for AbstractHamiltonian and ProjectorMonteCarloProblem

Throw meaningful error message when attempting to build ProjectorMonteCarloProblem with complex Hamiltonian

Pull Request Test Coverage Report for Build<PHONE_NUMBER>5
Details

5 of 6 (83.33%)  changed or added relevant lines in 3 files are covered.
1 unchanged line in 1 file lost coverage.
Overall coverage decreased (-0.03%) to 94.855%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/projector_monte_carlo_problem.jl
2
3
66.67%

Files with Coverage Reduction
New Missed Lines
%

src/BitStringAddresses/sortedparticlelist.jl
1
89.03%

Totals

Change from base Build<PHONE_NUMBER>6:
-0.03%

Covered Lines:
6859

Relevant Lines:
7231

💛  - Coveralls

merged into #278


acs-engine deploy is missing kube-proxy on windows node

Is this a request for help?:
yes
Is this an ISSUE or FEATURE REQUEST? (choose one):
issue
What version of acs-engine?:
Version: v0.20.8
GitCommit: 5d847c195
GitTreeState: clean

Orchestrator and version (e.g. Kubernetes, DC/OS, Swarm)
kubernetes v1.10.6
What happened:
Deployed a hybrid  cluster of 3 linux nodes and one windows node into a custom Vnet. The deployment proccess was pretty jenky with a few work arounds. the deployment ended up looking like this:
PS C:\WINDOWS\system32> kubectl get nodes
NAME                        STATUS    ROLES     AGE       VERSION
37463k8s9010                Ready         7h        v1.10.6
k8s-linuxpool1-37463772-0   Ready     agent     7h        v1.10.6
k8s-linuxpool1-37463772-1   Ready     agent     7h        v1.10.6
k8s-master-37463772-0       Ready     master    7h        v1.10.6
pods:
kube-system   azure-cni-networkmonitor-6sqbt                         1/1       Running            1          7h
kube-system   azure-cni-networkmonitor-cxjn8                         1/1       Running            1          7h
kube-system   heapster-75f5b5c44c-4h2wm                              2/2       Running            2          7h
kube-system   jxing-nginx-ingress-controller-5d889ff66b-5bbqc        1/1       Running            0          5h
kube-system   jxing-nginx-ingress-default-backend-84f46c65d6-l4vww   1/1       Running            0
kube-system   kube-addon-manager-k8s-master-37463772-0               1/1       Running            1          7h
kube-system   kube-apiserver-k8s-master-37463772-0                   1/1       Running            1          7h
kube-system   kube-controller-manager-k8s-master-37463772-0          1/1       Running            1          7h
kube-system   kube-dns-5b97576b6d-449z4                              3/3       Running            4          7h
kube-system   kube-proxy-4xq2m                                       1/1       Running            1          7h
kube-system   kube-proxy-trlq2                                       1/1       Running            1          7h
kube-system   kube-proxy-znn56                                       1/1       Running            1          7h
kube-system   kube-scheduler-k8s-master-37463772-0                   1/1       Running            1          7h
kube-system   kubernetes-dashboard-654df547cd-9np52                  1/1       Running            4          7h
kube-system   metrics-server-64f6d6b47-p8dpf                         1/1       Running            2          7h
kube-system   tiller-deploy-55fdff5b45-lllts                         1/1       Running            0          5h
What you expected to happen:
I'm not sure. I would like to know if the network has been set up properly. I don't believe it is 100% from the fact that there are only three kube-proxies, and non on the windows node. As well there is only 2 azure cni network monitors. I would like to know what I should expect for a proper network deplyment, and how to test if the network is setup properly.
How to reproduce it (as minimally and precisely as possible):
create a deployment with kubernetes 1.10, 3 linux nodes and one windows and a custom vnet.

kube-proxy is run on the host, and won't show up in docker ps or kubectl get pod output for Windows nodes.


Code climate

Pull request opened by github-pullrequestcreator.

 Update node-eslint-config to use public Code Climate and Travis CI


Increase limit on number of listed folders

The default limit for results when calling /api/folders is 1000. This
increases the limit for client GetFolderByTitle to match that.
See https://grafana.com/docs/grafana/v7.5/http_api/folder/
GetFolderByTitle will still produce unexpected results if there are
more than 1000 folders.

Grafana 8.x accepts a page parameter. That will make it possible to iterate over all folders.

Seems like this should be "good enough" for now, especially without dropping support of Grafana 7.x for this.
Thanks :)


Re-enable flaky integration tests plan

test--dev--coda-batch-payment-test
test--test_postake_five_even_txns
To Prioritize and triage

These tests have been known to catch actual issues, so current plan is to leave them required for now.
If they fail, and they are the only test(s) failing then its the author can do the due diligence of making sure that the failure is due to a time out and not an actual issue.  In that case ping an admin and the admin will force merge it.  Annoying enough that it should force us to fix theses tests soon but not blocking current work.

Hey! I'm working on a project for flaky test tracking. If you have a few minutes I would be interested in hearing what some of the hard parts of flaky tests in an OCaml project, if not no worries. project here if you want to take a look: https://testrecall.com


New package: Cclib v0.2.0

Registering package: Cclib
Repository: https://github.com/cclib/Cclib.jl
Created by: @vcanogil
Version: v0.2.0
Commit: a14e987d0f0e158997efbafb96451221b21f2b13
Reviewed by: @vcanogil
Reference: https://github.com/cclib/Cclib.jl/issues/4#issuecomment-1646062350
Description: Parsers and algorithms for computational chemistry logfiles (Julia bindings to the cclib Python package).

Hi there,
On behalf of Cclib's development team, we are very excited to join Julia's ecosystem. Cclib is a library used for parsing and interpreting outputs of computational chemistry programs that has been around for years and is well-known in the cheminformatics community. As such would, we would greatly appreciate being able to retain library's original name.


(feature)[DOE]Support array for Doris on ES

Proposed changes
This is the BE part.
FE part, see #11340
Problem summary
Describe your changes.
Checklist(Required)

[ ] Does it affect the original behavior
[x] Has unit tests been added
[x] Has document been added or modified
[ ] Does it need to update dependencies
[x] Is this PR support rollback (If NO, please explain WHY)

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall and external

run buildall and external

TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 34.05 seconds
stream load tsv:          473 seconds loaded<PHONE_NUMBER>9 Bytes, about 150 MB/s
stream load json:         38 seconds loaded<PHONE_NUMBER> Bytes, about 59 MB/s
stream load orc:          68 seconds loaded<PHONE_NUMBER> Bytes, about 15 MB/s
stream load parquet:          30 seconds loaded 861443392 Bytes, about 27 MB/s
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/tmp/20230222080441_clickbench_pr_101636.html

run buildall and external


Adeyemi Esther Assignment 4

this is wrong, no header, and all sections must use different position styling.

Made corrections


[BUG] BlockingBuffer.bufferUsage metric does not include records in-flight

Describe the bug
The BlockingBuffer.bufferUsage metric is inaccurate. It indicates that it is the percentage of the buffer used. However, it is only the percentage of the buffer used for messages that are waiting. It does not include in-flight messages.
Expected behavior
I expect this metric to include both the records waiting and the records-in-flight when calculating the usage.
Screenshots
We sent these metrics to AWS CloudWatch. You can see in the screenshot below that the sum of recordsInBuffer and recordsInFlight (the line in blue) reaches near the maximum defined size of 1,000,000 records. However, the bufferUsage metric is around 70% at the time that happens.

Additional context
This can lead to confusion when trying to see why events are not writing to the buffer. The metrics indicate that there is capacity, but we fail to write to the buffer due to a timeout exception.
You can see that below.
https://github.com/opensearch-project/data-prepper/blob/b0d253c810e9ae657a8fd66608a3543296257ab2/data-prepper-plugins/blocking-buffer/src/main/java/org/opensearch/dataprepper/plugins/buffer/blockingbuffer/BlockingBuffer.java#L120-L125
This code is what appears to be incorrect. It does not account for the records in-flight.
https://github.com/opensearch-project/data-prepper/blob/b0d253c810e9ae657a8fd66608a3543296257ab2/data-prepper-plugins/blocking-buffer/src/main/java/org/opensearch/dataprepper/plugins/buffer/blockingbuffer/BlockingBuffer.java#L202-L205

An alternative solution is to also update the recordsInBuffer metric to more accurately reflect that it is the totality of all records. Then we could have a recordsWaitingInBuffer.
Or we could add a new metric that expresses both: recordsTotalInBuffer. This would be equal to the sum of both recordsInBuffer and recordsInFlight.

I think there is still value in knowing the number of recordsInBuffer from a debugging standpoint

As discussed offline, I think it is better to have a metric that directly corresponds to the semaphore count that controls the capacity

I'm thinking of making two changes:

Create a new gauge metric on the semaphore's availablePermits() to track the actual buffer capacity - BlockingBuffer.capacityUsed.
Replace the logic for creating the existing bufferUsage such that it is effectively availablePermits() / bufferCapacity.


Missing declared property to BaseView

Well, this is not an issue. I just found out there is a container property to BaseView object, but it's not declared or documented.

Hey @Djules ,
yes, I added it but actually I forgot to document it (shame on me!)
I found that it's super useful to have access to the associated container.
It's even more useful when you have to create transitions between pages that share the same template / same View.
Thanks for the issue, I will try to update the doc as soon as possible (along with the v2..)

Yeah, just saw that, when did you add it? I was using some internal code to retrieve the associated container until I found that.
It was necessary in my own opinion. 👍


Unable to subscribe to events

I'm trying to follow the directions in Building an app with Bolt for Python ( https://api.slack.com/start/building/bolt-python#start) but am unsuccessful in subscribing to events.
The Bolt app is running; shows the message "Bolt app is running! (development server)" on the python console.
It's not clear what is needed to obtain verification of the ngrok url.
Working on Ubuntu 18.04.
Reproducible in:
pip freeze | grep slack
python --version
sw_vers && uname -v # or `ver`

The slack_bolt version
slack-bolt==0.9.6b0
slack-sdk==3.0.0rc1
slackclient==2.9.3
Python runtime version
Python 3.8.0
OS info
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.5 LTS
Release:	18.04
Codename:	bionic
Steps to reproduce:
(Share the commands to run, source code, and project settings (e.g., setup.py))

Follow the steps in Getting Started down to "Subscribing to Events":

App code

# Use the package we installed
from slack_bolt import App

# Third-party imports
from dotenv import load_dotenv

# Environment variables
dirpath = os.path.dirname(os.path.abspath(__file__))
config_path = os.path.join(dirpath, "config", "account_creation_notify_config.txt")
load_dotenv(dotenv_path=config_path)

try:
    SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"]
except KeyError:
    print("There is a problem with the SLACK_BOT_TOKEN environment variable.")
    exit(1)

try:
    SLACK_SIGNING_SECRET = os.environ["SLACK_SIGNING_SECRET"]
except KeyError:
    print("There is a problem with the SLACK_SIGNING_SECRET environment variable.")
    exit(1)

# Initializes your app with your bot token and signing secret
app = App(
    token=SLACK_BOT_TOKEN,
    signing_secret=SLACK_SIGNING_SECRET
)

# Start your app
if __name__ == "__main__":
    a = int(os.environ.get("PORT", 3000))
    app.start(port=int(os.environ.get("PORT", 3000)))

Enter the ngrok url in Request URL.

Expected result:
Challenge response ok and URL accepted to receive Slack events
Actual result:
Challenge response is "Your URL didn't respond with the value of the challenge parameter."
The ngrok dashboard shows a response of 404 Not Found to the challenge request.
Bolt app and ngrok dashboard

Slack app event subscription

Requirements
Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.

Hi @BruceP99166, thanks a lot for trying Bolt for Python out! It might be a bit confusing but as mentioned in the document you mentioned,

By default Bolt for Python listens for all incoming requests at the /slack/events route, so for the Request URL you can enter your ngrok URL appended with /slack/events.

The Request URL needs to be https://{your subdomain}.ngrok.io/slack/events. The cause of the 404 error is that your Request URL is missing the path: /slack/events.

Hi seratch,
Thanks, that worked.  Thanks much for your assistance.
BruceP


Feature Request: globalCommandRequirements as client option instead of assigning it after

A cool thing could actually be to make
globalCommandRequirements

a client option instead of a property to assign later as the code will look a little bit cleaner
Making it look like something like:
const client = new Client({
  otheroptions: 'bla',
  globalCommandRequirements: {
    dmOnly: false,
    guildOnly: true
  }
})

This seems like a logical request, I'm not entirely sure why global command requirements are set by a method call rather than in the constructor. Maybe when I go to implement it I'll find a reason it is the way it is, but hopefully not...

Oki 👍

Currently we do have a client option ignoreGlobalRequirements which is probably not necessary anymore if we're setting the requirements from the constructor - you should be able to just do globalCommandRequirements: someCondition ? {} : {...yourCustomRequirements} instead. To avoid a breaking change, that option will still exist for now, but I should make an issue to revert that for the next major version before I close this issue.


tests: kernel: device: Exclude beaglev_starlight_jh7100

The beaglev_starlight_jh7100 uses a full 64-bit devicetree map
which uses #{address/size}-cells = 2.  The device test expects
that #{address/size}-cells = 1 so exclude beaglev_starlight_jh7100
from the test.
Signed-off-by: Kumar Gala<EMAIL_ADDRESS>

This fixes a build failure in the nightly build.


FOCI feature and AppMetadata support in cache

This PR has changes to:

Create AppMetadata cache when Foci is sent in the sever response
Modified CacheManager to read cache data with helpers
Added unit tests

Coverage decreased (-0.5%) to 82.878% when pulling 71b97268aa726b72cecae75986f5cad923899d4f on appmetadata-foci into 1c1a65f9ccdf7f31b53e10f0a1fe5397afd4d788 on dev.