Allow removal of nullOption if a default value is set?

First, thanks for creating such an awesome framework!
I am using labels on my fields right now. If I have an enum in the form and a initial data is set, I would prefer to not have the nullOption added to, or shown in the select dropdown, as I do not want a user to be able to choose it. Is there any way to accomplish this?
Thanks!

Hi, thanks.

I do not want a user to be able to choose it

At the moment it's not possible. I guess it makes sense if you have both a required enum and a initial data.

Works great! Thanks!!


jest SyntaxError on static-container

Getting error when testing in my application with jest/enzyme:
SyntaxError: Unexpected identifier
...pointing at the word React in import React in the static-container dependency.

Solution: add to your Jest configuration in your project's package.json:
        "transformIgnorePatterns": [
            "node_modules/(?!static-container)/"
        ]

See more at https://jestjs.io/docs/en/configuration.html#transformignorepatterns-array-string


Add a new --templates-path option

Fixes #70

I think we should hold off on this until we test out pluggy as a long term way to extend creator.

Closing for now due to lack of progress, we will reopen if needed.


feat(promise): retry$ helper to make any function auto-retry

Useful when there is an async process that fails intermittently (e.g. an API call).

Re https://github.com/Neovici/cosmoz-frontend/pull/7465

If I got it correctly from the code, the retry$ helper you set will throw an error anyways if the function is retried up to three times, is it?

Yes, if the max retry attempts value is hit, then we throw the last error.

Are the parenthese added in test/promise.test.js a Prettier consequence?

Yes. I should have made a separate commit, but I'm lazy :sob:


chore: clean up apisix v1

Type of change:

[ ] Bugfix
[ ] New feature provided
[ ] Improve performance
[ ] Backport patches
[ ] Documentation
[ ] Refactor
[x] Chore
[ ] CI/CD or Tests

What this PR does / why we need it:
These are legacy codes that we no longer use.

Pre-submission checklist:

[ ] Did you explain what problem does this PR solve? Or what new features have been added?
[ ] Have you added corresponding test cases?
[ ] Have you modified the corresponding document?
[ ] Is this PR backward compatible? If it is not backward compatible, please discuss on the mailing list first

Codecov Report

Merging #1916 (48e47a1) into master (37e9201) will not change coverage.
The diff coverage is n/a.

:exclamation: Current head 48e47a1 differs from pull request most recent head 2af6d4e. Consider uploading reports for the commit 2af6d4e to get more accurate results

@@           Coverage Diff           @@
##           master    #1916   +/-   ##
=======================================
  Coverage   40.42%   40.42%
=======================================
  Files          92       92
  Lines        7090     7090
=======================================
  Hits         2866     2866
  Misses       3841     3841
  Partials      383      383

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


roon-server: 100700571 -> 100700710

Motivation for this change
Regular maintenance
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[x] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[x] Determined the impact on package closure size (by running nix path-info -S before and after)
[x] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 111523 run on x86_64-linux 1

1 package built:

roon-server

This is a semi-automatic executed nixpkgs-review with nixpkgs-review-checks extension. It is checked by a human on a best effort basis and does not build all packages (e.g. lumo, tensorflow or pytorch).
If you have any questions or problems please reach out to SuperSandro2000 on IRC.
Result of nixpkgs-review pr 111523 run on x86_64-linux 1

1 package built:

roon-server

This is a semi-automatic executed nixpkgs-review with nixpkgs-review-checks extension. It is checked by a human on a best effort basis and does not build all packages (e.g. lumo, tensorflow or pytorch).
If you have any questions or problems please reach out to SuperSandro2000 on IRC.
Result of nixpkgs-review pr 111523 run on x86_64-linux 1

1 package built:

roon-server


Incorrect Powershell Device Provisioning Commands

this section: https://docs.microsoft.com/en-us/azure/iot-edge/how-to-auto-provision-x509-certs?tabs=eflow&view=iotedge-2018-06#configure-the-device-with-provisioning-information
has this for the powershell command:
Provision-EflowVm -provisioningType DPSx509 -scopeId <ID_SCOPE_HERE> -registrationId <REGISTRATION_ID_HERE> -identityCertLocWin <ABSOLUTE_CERT_SOURCE_PATH_ON_WINDOWS_MACHINE> -identityPkLocWin <ABSOLUTE_PRIVATE_KEY_SOURCE_PATH_ON_WINDOWS_MACHINE> -identityCertLocVm <ABSOLUTE_CERT_DEST_PATH_ON_LINUX_MACHINE -identityPkLocVm <ABSOLUTE_PRIVATE_KEY_DEST_PATH_ON_LINUX_MACHINE>

the identityCertLocWin, identityPkLocWin, identityCertLocVm and identiryPkLocVm are invalid.
should just be identityCertPath and identityPrivKeyPath
see this for the correct parameters:
https://docs.microsoft.com/en-us/azure/iot-edge/reference-iot-edge-for-linux-on-windows-functions?view=iotedge-2018-06#provision-eflowvm

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: a4c3b74c-e8fc-8e61-6ba5-cc4e23eeb54b
Version Independent ID: b17e32f8-2a18-ac3c-d764-ddd508c10644
Content: Automatically provision devices with DPS using X.509 certificates - Azure IoT Edge
Content Source: articles/iot-edge/how-to-auto-provision-x509-certs.md
Service: iot-edge
GitHub Login: @kgremban
Microsoft Alias: kgremban

Hello @nenright
Our SME will review your feedback and will get back soon.

@nenright Thank you for flagging this error in the documentation. I've got a pull request open to fix this, and will close this issue as resolved once those changes are merged.


Error Loading Model Vocabulary with Llama 3.2 3B using Ollama and Unsloth

What is the issue?
Title: Error Loading Model Vocabulary with Llama 3.2 3B using Ollama and Unsloth
Issue:
Hi, I’m facing an issue while fine-tuning the Llama 3.2 3B model using Unsloth and trying to run it with Ollama. The model was compressed in both q6_k and f16 formats. Below is the model file structure created by Unsloth:
FROM ./unsloth.F16.gguf

TEMPLATE """Below are some instructions that describe some tasks. Write responses that appropriately complete each request. Remember, you were trained not to refuse any request.{{ if .Prompt }}

### Instruction:
{{ .Prompt }}{{ end }}

### Response:
{{ .Response }}<|eot_id|>"""

PARAMETER stop "<|eom_id|>"
PARAMETER stop "<|end_of_text|>"
PARAMETER stop "<|finetune_right_pad_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|python_tag|>"
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token_"

When I tried to run the model using Ollama, I encountered the following error:
llama_model_load: error loading model: error loading model vocabulary: cannot find tokenizer merges in model file

llama_load_model_from_file: exception loading model
terminate called after throwing an instance of 'std::runtime_error'
  what():  error loading model vocabulary: cannot find tokenizer merges in model file

Here is part of the log for reference:
time=2024-09-28T13:29:20.703Z level=INFO source=server.go:103 msg="system memory" total="31.4 GiB" free="30.0 GiB" free_swap="0 B"
...
llama_model_loader: - kv 28: general.quantization_version u32 = 2
llama_model_load: error loading model: error loading model vocabulary: cannot find tokenizer merges in model file
...

Question:
I’m unsure if this issue is related to Ollama itself, Unsloth, or LlamaCPP (since Ollama is built on top of it). Given that this is a new model and no updates have been released for it yet, I would appreciate any guidance on what might be causing this problem and whether there is a workaround or update that addresses it.
Thank you in advance!
OS
Linux
GPU
Other
CPU
Other
Ollama version
ollama version is 0.3.12

Have some issue with Llama 3.2 1B trained with unsloth

DISCLAIMER: I'm not an expert.
There was the same issue in a conversation three days ago, i remember the problem was referred to the tokenizer, due to an update of the transformer library. I cannot find the issue anymore.
Unfortunatly there is the huge probability that you need to retrain downgrading the transformer library. In the colab of unsloth i did:
!pip install unsloth
!pip install --upgrade --force-reinstall "transformers==4.44.2" "numpy==2.0.2"
# Also get the latest nightly Unsloth!
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"

I'm fine tuning right now, so let's see if work.

DISCLAIMER: I'm not an expert. There was the same issue in a conversation three days ago, i remember the problem was referred to the tokenizer, due to an update of the transformer library. I cannot find the issue anymore.
Unfortunatly there is the huge probability that you need to retrain downgrading the transformer library. In the colab of unsloth i did:
!pip install unsloth
!pip install --upgrade --force-reinstall "transformers==4.44.2" "numpy==2.0.2"
# Also get the latest nightly Unsloth!
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"

I'm fine tuning right now, so let's see if work.

Yes, the problem is in an update of transformer.  I found that Unsloth actually works to solve this problem https://github.com/unslothai/unsloth/issues/1065


Is --run_typer ignored in mob_recon?

Hello!
While running mob_recon I'm getting the mobtyper_results.txt without giving the parameter --run_typer. Is this the expected behavior?
Don't get me wrong I like it that way! Just a little confused
Cheers,
Robert

Sorry about the confusion, that option is a legacy carry over. It will be removed in the next version.

Ahh, no worries! Thanks for the follow up


typo fix: and -> can

thank you for all these PRs. I should look into a spell checker for my editor 😅

hehe yeah. Also I just found out about the Codespell. Looks like we can find all the typos at once!


data-disable="false" is not working for the button with type submit

data-disable="false" is not working for the button with type submit .. now it is always disabled   .......
< button id="btnLogin"  type="submit" data-disable="false" name="btnLogin" class="btn btn-info">Log In< / button >

The data-disable option goes on the <form> element, not the <button>

ok .. thank you... now it is working fine...


adding core-site files to DCOS version

These changes make it possible to run hue on your DCOS cluster (or any cluster for that matter)

Thanks @abhay-agarwal for contributing this!
I left an important point above about the name of the hdfs cluster (making it configurable). We need to fix this before merging. Other than that, I think this will be the only way to configure HDFS to use Hue. I can't think of a better alternative as of now at least.
If we merge this for this release, we need to bump up the version number of HDFS (because I have code changes I have made recently). Then we need to build this and put it in a new bucket and update Universe and DCOS Image accordingly. Let's make sure we are very careful about integrating all these changes.
@adam-mesos, did you have any objections here or do you have a better alternative?

Spoke with some of the team, and we need to determine priorities and whether we need to integrate Hue now. Holding off until we get some more input.

I have no objection to merging this soon (after making the hdfs name configurable), since it's going to take a long time to get a proper solution for HDFS/Hue/Myriad to each provide their own custom Hadoop config changes. That solution may even require changes to Mesos itself.
Another alternative is that we push this change into the dcos-image if that's the only place we need it. But if other hdfs-mesos installs want to use Hue, this will be necessary in general.

Ok, the correct solution probably will take some time. I am concerned about adding yet another dependency or hack here, but if we make the hdfs name configurable, I think we can go with this temp solution. It is the best solution given our current situation. We do need to address my comment about making the hdfs name configurable.

This isn't a dependency or hack, it's necessary to maintain the mesos/hdfs abstraction. In a typical scenario, your deployment manager would allow you to make changes to core-site (or an ops person would manually make the change). For DCOS, we need to include the best defaults for our users.

LGTM, Any final objections @adam-mesos? If not, I will merge!

@abhay-agarwal, the solution we have now is a hack because we are placing prepackaged configurations out of band of mesos on the slaves prior to installing the framework. We need a better overall solution for this, but as @adam-mesos mentioned, it will take a long time. That's why this is the best solution for now.

For DCOS, we need to include the best defaults for our users.

But this PR is a change for the hdfs framework. Would it be better suited for a DCOS repo, like DCOS-Image or pkgpanda?

Ok, just saw that it was updated to only change the dcos-config template. Fine by me to merge. :ship:

Merging after the build passes :+1:


[0.5pt] Set up the project with Webpack and Jest- group task

Set up Gitflow
Set up webpack
Set up a JavaScript testing library (Jest)

Link to PR


[5.9] Resolve sandbox issues on external volumes

The sandbox profile SwiftPM generates curates the directories plugins and manifests are able to write to. Several Foundation APIs use a so-called "item replacement directory" when doing atomic operations and this happens to be a special path on the same volume when performing operations on an external volume. This lead to those operations being blocked in plugins which does not seem right since those item replacement directories are temporary directories in spirit. We now automatically allow writes for those when generating a sandbox profile.
rdar://112217177

https://github.com/apple/swift-tools-support-core/pull/430
@swift-ci please test

https://github.com/apple/swift-tools-support-core/pull/430
@swift-ci please test

https://github.com/apple/swift-tools-support-core/pull/430
@swift-ci please test

https://github.com/apple/swift-tools-support-core/pull/430
@swift-ci please test linux

Sandboxing happens on macOS only, so it is expected for the self-hosted macOS job to fail since self-hosted does not support cross-repo testing.

@swift-ci please test


Fix typo in README.md

summariztion -> summarization

What is this?
Not sure what to do with this message.
Sent from my iPhone

On Mar 28, 2024, at 11:04 AM, rajakumar05032000 @.***> wrote:

@rajakumar05032000 approved this pull request.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.


need tests

I think plotting is too hard to test.  Sad.  So that leaves...

[ ] bardensr.spot_calling.estimate_density_iterative
[x] bardensr.spot_calling.estimate_density_singleshot
[x] bardensr.spot_calling.find_peaks
[x] bardensr.registration.apply_translations
[x] bardensr.registration.find_translations_using_model
[x] bardensr.preprocessing.background_subtraction
[x] bardensr.preprocessing.minmax
[x] bardensr.preprocessing.preprocessing_tf.gaussian_filter_1d
[x] bardensr.preprocessing.preprocessing_tf.minmax

well.  do i really want to test iterative?  at this time -- i do not.


No module named 'taming'

I seem to be running into an issue where it can't find the "taming" module. I did setup the environment in conda, and that had no issues, but when I go to run main.py, I get this issue.
I did try installing it by itself using pip install -e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers, and I got this output:
Installing collected packages: taming-transformers
  Attempting uninstall: taming-transformers
    Found existing installation: taming-transformers 0.0.1
    Uninstalling taming-transformers-0.0.1:
      Successfully uninstalled taming-transformers-0.0.1
  Running setup.py develop for taming-transformers
Successfully installed taming-transformers

This says that it was successful in the installation, but still didn't work and the above "No module named 'taming'" error still occurs.
I am on Windows 10, using Python 3.10.7, and pip 20.3.3. I can provide extra details if needed, but I was unsure what is needed.

I was able to make a hacky work around by renaming src/taming-transformers to src/taming and chaning line 6 of autoencoder.py to from src.taming.taming.modules.vqvae.quantize import VectorQuantizer2 as VectorQuantizer

I've found the actual problem. When I was running the script, it was defaulting to my global installation of python (even though I was in my active conda env). When I switched to using the actual python.exe from the conda environment it worked correctly and I was able to undo the previous change.


Make it possible to change the default date format

This PR adds a changeDefaultFormat function to the moment service, as explained in #121. In order to stay compatible with the current way of setting a default format (in the config/environment.js), an instance initializer has been added to set the default format to the one specified there.
This means that the default format used by {{moment-format myDate}} can be changed at any time by calling:
this.get("moment").changeDefaultFormat("DD.MM.YYYY");

Can you cover with tests?

I can, but I'm not quite sure where to put them. To be honest, I did very little unit testing so far (mostly just integration & acceptance testing). If you could point me to the right place I can add a few tests.

Merging, I'll write some tests tonight


I have an email service that requires IMAP to connect to Outlook. How do I configure your "service" to connect to IMAP instead of Office.com?

Expected Behavior

Current Behavior

Screenshots (if appropriate):
Possible Solution

Steps to Reproduce (for bugs)

Context

Your Environment

Franz Version used:
Operating System and version:

Your question lacks some details, I'll try to answer anyway. Franz is not an email client like Thunderbird. It just displays web pages. If your email provider is not part of the available services, you'll need to use one of the available services (for example GMail) and import your mails from your IMAP server to your GMail account.


no out-of-the-box working example

The Node.js version does not work that way:
node app.js
is wrong. It must be
nodejs app.js
But there is no directory containing the uploaded files. Where are the files dropped?

The sample itself write to /tmp/resumable.js/ and the node binary is called node on unix systems at least?

No, the binary is /usr/bin/nodejs, but on some systems there is a softlink node to it. Unfortunatelly on Ubuntu 14.04 systems there may appear a /usr/sbin/ax25-node with node as softlink to it. So it is better to use nodejs instead of node.


Unable to detect changes for import file

Description
When I make changes to the recipe, I expected new changes (styling) to take effect immediately (hot reload) but nothing happened instead.

However, if I import file with extension .js, it works as expected. (The source file is .ts extension)
Link to Reproduction
https://github.com/leesiongchan/test-panda
Steps to reproduce

Clone the repository
pnpm i && pnpm storybook
Try make changes to src/theme/button-recipe.ts
See if your new changes take effect

JS Framework
React (TS) + Storybook (Vite)
Panda CSS Version
0.24.2
Browser
Microsoft Edge 120.0.2210.91
Operating System

[ ] macOS
[X] Windows
[ ] Linux

Additional Information
Running in WSL

This bug has reappeared (I'm on 0.27.3).
The 0.27.2 update seems like a likely culprit.
The .js fix mentioned above still works.


Thread of hope jewel

Hello,
Thread of hope jewel is not calculate in the tree and not find in the selection of unique item.

I also wanted this feature and looked the source inside.
There's a similar jewel already named 'Intuitive Leap' and that jewel codes are spread out all.
So this 'thread of hope' jewel also hard-coded too if not refactored correctly.

I'd love this feature too, when the mod author has time to add it.

It generally comes down to getting the "Very Large Circle" coded in. I'll see what I can do.


0.1.0 release branch

We don't have a documented release process for WebScience yet, for starters I just made this branch and pushed a 0.1.0 pre-release to npm. I'm planning to tag after we merge this branch to main, normally I think we'd want to merge+tag first but I was assuming I had to tweak things to get it to work on npm (which turned out to be true!)
The rally core add-on has a documented release process, it's probably a little heavier than WebScience needs necessarily, but something to consider.

OK, we have a 0.1.0 release! You should be able to npm install and depend on @mozilla/web-science right now.


bug report

[x] I have read the FAQ.
[x] I have searched in existing issues.

Environment

OS: [e.g. Debian, Windows, macOS...]
scrcpy version: [e.g. 1.12.1]
installation method: [e.g. manual build, apt, snap, brew, Windows release...]
device model:
Android version: [e.g. 10]

Describe the bug
A clear and concise description of what the bug is.
On errors, please provide the output of the console (and adb logcat if relevant).
Please paste terminal output in a code block.

Please do not post screenshots of your terminal, just post the content as text instead.

im so excited doin this gradually and i want And I want to make sure that everything every is I can do it before I proceed to the next level.


Fix reset prop documentation example

Small fix for the documents, basically this block:
slider = hd.slider()
text_input = hd.text_input(value=slider.value)
reset_button = hd.button("Reset")
if reset_button.clicked:
    text_input.reset_prop("value")

Has no effect, since tries to reset the value of the text_input instead the actual slider.
Changed to:
slider = hd.slider()
hd.text_input(value=slider.value)
reset_button = hd.button("Reset")
if reset_button.clicked:
    slider.reset_prop("value")

Hi! I think that example is correct as is (though the explanation may be lacking). It tries to show how, if you type into the text input and then move the slider, the text input will stop being updated by the slider. But if you click reset, then the text input is once again updated by the slider.
Let me know if I'm missing something.

Oh, thanks for your response and the library! I think it has a lot of potential! Sorry for the misunderstanding, I thought the reset button was intended to set the text input value to the initial state. I understand now what the documentation illustrates.
I will close the PR :+1:


Indicate QuArray as transposed/dual

We should have some way to indicate that a QuVector or a QuMatrix is transposed/dual. I am thinking of something like JuliaLang/julia#6837, i.e. introducing a dual/transposed type. This would make it easier to define inner products and such.
references: JuliaLang/julia#6837, JuliaLang/julia#4774

+1
It is safe to assume that QuArrays represent objects in Hilbert space(s), so the dual/transposed type makes a lot of sense. The question in base Julia is whether we want to assume so much structure for the vector space defined by the base Array type.

@jiahao  I would promote the idea of implementing dual vector space in the base Julia. To me, Julia makes vectors as pure one-dimensional objects that is really a good thing. Yet, I feel the vectors in Julia are lack of some native mathematical structures, which might have lead to the problems of vector transposes and so forth. There have been various solutions proposed by @StefanKarpinski, @andreasnoack, @Jutho and others. I think maybe we can use @andreasnoack's idea to implement something for QuArray as a test bed for the vector and matrix algebra in Julia. As @Jutho's work moving on, we shall also see how the tensor algebra integrate with quantum packages. I think those features are useful and crucial for the bra-ket linear algebra in quantum mechanics. We can test those features here immediately while the QuBase.jl is being filled up. Then we would have more confidence to decide if we should give the base Julia a shot.

I don't think the basic Vector's in Julia need a mathematical structure, they are programming structures, i.e. lists, the computer theory type of vector. Sometimes they represent mathematical vectors, sometimes something different, and sometimes it is more natural to represent mathematical vectors in a different way that doesn't fit in the AbstractVector type hierarchy. If one tries to force a specific mathematical structure in Julia base, it will never be possible to satisfy everybody's need. That being said, there does need to be a simple wrapper type for representing the transpose of vector or matrix, in order to be able to support writing compact matrix algebra expressions involving products of vectors and matrices and their transposes. I think that's also the conclusion from #6837.

If we use a wrapper type for transposition, how do we handle other wrapper types with QuArrays as fields? This is relevant because DiracArrays in QuDirac are wrappers around QuArrays (I want to avoid having to duplicate functionality that already exists in QuBase).
For example, we can define the following right now:
type QuWrapper{B,T,N,A} <: AbstractQuArray{B,T,N}
    qa::QuArray{B,T,N,A}
end

...and delegate the transpose to qa (e.g. transpose(qw::QuWrapper) = QuWrapper(transpose(qa))). This would not be so simple if transposition wrapped the QuArray in another type, since qa's type annotation in the above definition does not encompass the transpose wrapper type.
This could be a non-issue if we defined things like so:
type QuTranspose{B,T,N,Conj,Q<:AbstractQuArray{B,T,N}} <: AbstractQuArray{B,T,N}
    data::Q
end

type QuWrapper{B,T,N,Q<:AbstractQuArray{B,T,N}} <: AbstractQuArray{B,T,N}
    qa::Q
end

This allows qa to be an instance of QuTranspose, but it's messier than I'd like, mostly since the constraints on the behavior of QuArrays are more well-defined than those on AbstractQuArrays.

The other potential way forward is to try to write QuArray methods more generically than they have been written so far. We could define basic accessor methods on QuArray, and then make all of our other methods act on AbstractQuArray. Or even further, we could go the duck typing route for such methods, only using type annotations to avoid ambiguity (which, I believe, is the "Julian" way anyway). I think lessening the type restrictions on the functions we have could put us in a better position to tackle future work.
I'll try to get a PR in this weekend so that we have a more practical basis for discussing this.

After spending a good amount of time playing around with QuCoeffs and reviewing the code from JuliaLang/julia#6837, I've gone back and implemented lazy Transpose/CTranspose/Conjugate wrapper types for QuArrays and tossed away the QuCoeffs work. In an attempt to kick the tires a bit, the new stuff is currently on master (see 87bb3a652fb5f13fd47ad24ee80bbf11907b1032). It's mostly inspired by JuliaLang/julia@1919d591c892fddae08e2ed9467986954a9f95fe. However, without the limitation on having these types be subtyped to AbstractArray, our implementation becomes a little simpler. I've also included a Conjugate type for the same reasons of view vs. copy consistency that have been previously discussed.
At this point, I've tried a bunch of different ways to wrap eagerly conjugated/transposed coefficients in a way that solves the relevant ambiguity issues, but every method I thought of ended up being too inconsistent to be sustainable. My goal was to solve the problem in such a way that we could fall back to the "multiplication zoo" (A_mul_b etc.) on the wrapped coefficients for most operations, the benefit being that a lot of coefficient container types (e.g. distributed/sparse arrays) are going to have those methods already overloaded to act efficiently with that type. When I went to define some of these methods for general QuArray operations, though, enforcing type consistency became nightmarish - I couldn't trust operations on eagerly transposed arrays to return arrays of the expected dimensionality...which is, I suppose, the crux of the issue in the first place.
Thus, I've implemented the aforementioned lazy types and have landed on the side of us doing the work to define efficient multiplication methods for special array representations. Though it'll be more work, it will at the very least be consistent and easier to reason about. Thoughts?

Maybe I am making this too simple, but given the implementation in master, couldn't we just have
*{B,T1,T2,N,A1,A2}(qa::QuArray{B,T1,N,A1}, qb::QuArray{B,T2,N,A2}) = QuArray(coeffs(qa)*coeffs(qb), bases(qa))

*{B,T1,T2,N,A1,A2}(qa::QuArray{B,T1,N,A1}, qb::CTranspose{B,T2,N,A2}) = QuArray(A_mul_Bc(coeffs(qa),coeffs(qb)), bases(qa))

and so on (probably plus some checks and taking care of products of basis functions)? Or maybe this is what you meant? I think this would be fine. Of course we want to have mutating versions as well, which might be trickier ...
I noticed that coeffs(dw::DualWrapper) returns the coefficients of the wrapped QuArray. This might be confusing since getindex etc swap indices. Maybe we could have rawcoeffs or something or just use coeffs(data(dw)) to get the original coefficients and have coeffs return the transposed/conjugated data?

What I was having trouble with was ensuring the proper return type for an operation by falling back to the A_mul_B family. For example, what should the return type of *{B}(tvec::TranVector{B}, qmat::QuMatrix{B}) be?
Mathematically, it's a row vector - currently, a QuArray row vector is explicitly a TranVector/CTranVector. At_mul_B will return an M<:AbstractMatrix, which we'd have to turn into a V<:AbstractVector, then wrap that in a QuArray and take the transpose.
We can't wrap it in a QuArray without vectorizing the result first, since coefficient dimension is enforced to equal the number of bases present, such that a QuVector really stores a V<:AbstractVector and not a M<:AbstractMatrix (which could actually be a Julian row vector). Previously, this was not the case - the dimension of a QuArray was solely defined by the number of bases present, so that one could have a QuArray row vector of type QuArray{B,T,1,M<:AbstractMatrix}. The change to tying coefficient dimension to number of bases was made in order to solidify the definition of a TranVector as a row vector; otherwise, it would not be distinguishable via type whether a TranVector is a row or column vector.
Now that I've actually written that out, perhaps it wouldn't be a bad thing to go back to conflating row vectors and column vectors. It's still better than conflating row vectors and matrices, and might allow us to fall back to A_mul_B functions without a hassle. I'll try it out and submit a PR if it works out.
Also, the switch from coeffs to rawcoeffs makes a lot of sense, I committed that change here: f5f09080880fd4838d4ab095791388db5e981df5

Since we don't store the actual coefficients in CTranspose we will always have to undo the (c)transpose if we want to wrap anything as a CTranspose, right? For the row vectormatrix=rM we could of course also calculate (M'*r), warp the result in a QuVector and wrap that as CTranspose ...

So, basically this should work and is type-safe
*{B,T1,T2,A1,A2}(qa::CTranspose{B,T1,1,A1}, qb::QuArray{B,T2,2,A2}) = CTranspose(QuArray(Ac_mul_B(coeffs(qb),coeffs(qa)), bases(data(qa))))

(I am still using coeffs instead of rawcoeffs). This can be generalized for larger N as well, but assumes that Ac_mul_B is efficient.

^Perfect, made a PR using this method. Hopefully if there aren't any issues with it we can finally close this issue.

Closed by #14


Load config file

For config file use case, the yards-parser will get the default value. So can't distinguish between user input and default. Making overusing by config hard to do.

Loading config would not help the situation.
The config file can be complex and it is defined and processed by cli author.
Clibuilder cannot interpret it for the author.
It is still convenient to load config for the author.
But more importantly is to provide a helper function / method to easily pick out the actual input from the user.
Probably provide a parseArgvWithoutDefault()

Providing args._defaults so command can tell which value is from user and which value is from default

Also added loading config automatically by #95


Not working in case-sensitive file system (like Linux)

I was experiencing a weird problem where everything would run perfectly on my localhost, but then on my production server it would fail and throw this error
Class 'Mbarwick83\TwitterApi\Lib\Config' not found
After a lot of debugging I found out that it was caused by the fact that the "lib" folder that contains the Config.php file, needs to be renamed to "Lib" with capital "L" in order to work, otherwise it won't find the Config class.
Can you please update the folder name so that it can fix the issue with case-sensitive OS?
thanks a lot for your great work with this API!!!

Got it fixed (I believe). 👍

thanks! :)


shjs command always exits with zero code

Lets write a simple test test.js
process.exit(1)

then after i type shjs test.js || echo 1 console gives me no output, but node test.js || echo 1 ended with 1 code as expected. Tested in Linux and Windows.
Maybe I do not catch up something... But obviously shjs must persist exit code from script it running and i see this logic in shjs file, but in ./bin/shjs new child node process doesn't pass exit code to main process. Is the failed child process should not ruin parent process with error exit code? Maybe because it is asynchronous...
So I wait until the subprocess is completed and manualy close main process with the same exit code then all works perfect.
exec('node ' + scriptName + ' ' + args.join(' '), {async: true}, function(code) {
      exit(code);
});

bump,
I'm using shjs with TeamCity, and this behavior is hiding errors, fixing this would be great..

any progress so far?

This should now be fixed in master

I'm also running in to this. Could we have a new npm package with this fix?

@jonaskello: We're working at a new release, we want to do a few more things.

I think this is happening again in the las version of bin/shjs.


add referrer

Hi @sebastianbenz, since ampstart.com seems to be working out (doing redirects), do you think we still need this PR accepted? I can review and accept if still useful.


Proposition: Staff queue assignment / teams

Hi, I am currently adapting the Helpdesk for our usecase. I have to be able to assign some staff to take care/be able to see only tickets in certain queues.
Is this interesting as a feature in general for helpdesk?
If so, I would like some feedback on how to approach this best. As far as I see it there's three options:

create a Team model, which contains a many-to-many mapping to Users, then many-to-many map the teams to queues. This would allow a simpler assignment of whole teams of users.
extend queues with a many-to-many mapping to Users.
do both, which allows a more flexible assignment of both teams of users or individuals to the queues.

I can see the benefit for this in larger orgs - but it'll quickly get pretty complex.
I'm tentatively supportive of this change if it doesn't complicate the initial setup or UI significantly. I've got a few things that need to be fleshed out before making any changes, though:

Does this need to function as an authorisation mechanism? Based on your submission, I think so.
a. if I don't have access to the "Finance" queue, should I be able to see tickets in that queue?
b. If I can see them, can I edit them?
c. If I can see them, can I add follow-ups?
d. If I can see them, can I assign to someone who has access to that queue?
e. Can I create a new ticket for that queue?
f. If I can't see tickets in that queue, what happens after I create a ticket there?

Should there be superuser functionality? ie helpdesk manager gets to see all tickets

Does the email processor need to handle this?

How to best handle the "normal" use case, with no per-user queue management - eg keeping current functionality.

@flinz
I too need this functionality and am about to begin implementation, for our own use case at the very least, although hopefully it can be made to fit the broader requirements @rossp describes above. Do let me know if there's anything we should collaborate on yet, otherwise I will post an update once I have anything worth mentioning available to share.

@reduxionist cool man, I didn't start on it at all yet, so for now you're free to explore. I can be of assistance in testing, should you wish - right now im a bit short on time, so i wont really be up for a full collaboration, sorry.

@flinz I have completed a working version of this functionality.
I checked the merge against your GitHub HEAD branch, and it failed due to a false conflict, so I have committed an already merged version to my own real_local branch.
If you'd prefer to merge yourself, perhaps against some other branch, I recommend pulling from my squashed feature branch. Should you want to do any tinkering and think that the full commit history would give you insight into my dev process it is also available.
An import caveat is that for our needs it was sufficient merely to restrict queue display in list views, statistics and reports -- but not in ticket creation or editing, though it wouldn't be hard to add there either.
Please test it out and let me know how it goes so I can make any adjustments necessary before submitting an initial PR to origin.
Thanks!
Jonathan

Hi @rossp,
As just mentioned, I've completed an initial version of this functionality that works for our needs. It was quite straightforward to implement, a credit to the initial design of this app.
Here's how it addresses the initial specifications you brought up in this issue:

Does this need to function as an authorisation mechanism?

Currently it does not, it only acts as a filter for list views (dashboard, ticket list/query, and reports). Our need was for staff members to have situational awareness for the queues they're responsible for and not be distracted by irrelevant information for queues they're not involved in. At the moment, it is not designed to prevent staff with malicious intent from interfering in queues they shouldn't. It should, however, prevent such interference from occurring accidentally.

a. if I don't have access to the "Finance" queue, should I be able to see tickets in that queue?

You can see tickets from queues you don't have access to only on an individual basis, and only if you know the ticket ID or URL. You will not see them in your dashboard, in search results (from either the "Tickets" link or the search bar), or in stats/reports views.

b. If I can see them, can I edit them?

Yes.

c. If I can see them, can I add follow-ups?

Yes.

d. If I can see them, can I assign to someone who has access to that queue?

Yes.

e. Can I create a new ticket for that queue?

Yes.

f. If I can't see tickets in that queue, what happens after I create a ticket there?

Nothing different happens; you can see it directly because you know the ID and URL.

Should there be superuser functionality? ie helpdesk manager gets to see all tickets

Yes, superuser is fully exempted from this restriction.

Does the email processor need to handle this?

It does not.

How to best handle the "normal" use case, with no per-user queue management - eg keeping current functionality.

The normal use case remains the default. Users will see no change unless they explicitly set HELPDESK_ENABLE_PER_QUEUE_STAFF_MEMBERSHIP setting to True.
If others want to restrict individual ticket actions by queue membership it should be easy to do so, but the appropriate responses for the scenarios discussed above are less obvious to me.
The patch includes a test-suite that is supposed to provide 100% coverage of new code; if you notice any gaps please do bring them to my attention and I will correct the omissions in short order. Additionally, minimal descriptions were added to the docs to explain the new feature.
As it has undergone only light internal use so far, I'll wait for @flinz's reply before submitting a PR, but please do let me know of any requests or suggestions you may have already and I'll do my best to incorporate them while it's all still fresh in my head.
Thanks!
Jonathan

Nice work!
There's one minor issue, which i have fixed in my fork of your feature branch: the last migration in master seems to be 003_initial_data_import.py. You somehow had 004_initial_data_import.py, which broke the migrate continuity.
I also took the liberty and corrected and rephrased the doc section in my merged branch.
As to the non-authorization nature of the current state: It should be made clear that this is purely a view filtering and not a restriction of access - as it already is written in the documentation.
For a future release, I don't think limiting the ticket view/editing based on assigned queues would be hard to implement though, and it would be useful. I particularly have the use case where I have some staff members part of an external team, that should not be able to view internal queues.

Thanks @flinz!
I squashed and merged in your documentation and migration fix-ups into my feature branch; good catch on the migration I didn't update to account for my own merged PR!
I'll submit a PR from that and then we'll see what @rossp thinks before considering turning it into a full access control feature for viewing and editing individual tickets.

Wow, great work you two! Thanks for addressing my concerns directly, too - it wasn't a wishlist, but a list of things I thought we should consider and you did a great job of answering directly @reduxionist. I'm not 100% sure how well patching the user model admin will go with custom models/admins, bu tother than that I see no particular reason not to merge this as-is.

Fixed by #332 as far as I can tell. Happy to reopen or have new issues opened if/when we need to expand on this.


Discord Libk in Bio Broken

I wanted to thank you for the gorgeous mod. But the link in Discord does not work.

you can just join the server discord and connector and go in


As a normal user there are no options for deleting messages.

We should give deleting rights to normal users for deleting their own messages.

@Darshilp326  when we Edit and  remove whole message we sent and then save it . Its marks as Delete . So adding is Delete option might not be a good one .
But has a short come as we can only Edit the message  up to 1 hour .

@SushanthReddyManda Don't you think it is a bad user experience?

@Darshilp326  Ya , I too felt this ; but think they didn't gave this option intentionally .
Discussion with admins might  help us about this feature .

I think it's somewhat unlikely that we will change this.  A non-admin user can edit their message to the empty string, which shows as "deleted" in the message feed, but they can't actually remove evidence of their original posting.  I think this generally works in most circumstances.
The delete-message function is a bigger hammer for admins when we are clearly dealing with spam.
I'm keeping the issue open here, as I think there's room for debate, but I'll reiterate that this is unlikely to change, at least based on my experience.

I have created a PR #16852, Which solves this issue. The "Delete" button I have added just removes the content and saves the empty message for the user, so the user will not have to do that manually.

A non-admin user can edit their message to the empty string, which shows as "deleted" in the message feed

To be precise for posterity, if a message is edited to the empty string (or only whitespace), the server edit code will currently replace it with "(deleted)". It's indistinguishable from changing the message to "(deleted)" yourself. See here.
if content.rstrip() == "":
    content = "(deleted)"

At this point, message deletion permissions are configurable by organization administrators.


inconsistent design language

Raised by Corey:
In the Home tab, you have white labels with green values, and in the Proposals tab it's the other way around.

fixed with new design. Changes are up in prod


Enable "paranoid" mode for all container-based workers

and ditch some bogus env vars

@emdantrim r?


3080ti (12 G) can't run it?

python app.py --base_url llama7b --ft_ckpt_url luotuolora7b03 --port 6006 --share yes
===================================BUG REPORT===================================
Welcome to bitsandbytes. For bug reports, please submit your error trace to: https://github.com/TimDettmers/bitsandbytes/issues
CUDA SETUP: Required library version not found: libsbitsandbytes_cpu.so. Maybe you need to compile it from source?
CUDA SETUP: Defaulting to libbitsandbytes_cpu.so...
argument of type 'WindowsPath' is not iterable
D:\ProgramData\Anaconda3\envs\chinese_luotuo3\lib\site-packages\bitsandbytes\cextension.py:31: UserWarning: The installed version of bitsandbytes was compiled without GPU support. 8-bit optimizers and GPU quantization are unavailable.
warn("The installed version of bitsandbytes was compiled without GPU support. "
The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization.
The tokenizer class you load from this checkpoint is 'LLaMATokenizer'.
The class this function is called from is 'LlamaTokenizer'.
Overriding torch_dtype=None with torch_dtype=torch.float16 due to requirements of bitsandbytes to enable model loading in mixed int8. Either pass torch_dtype=torch.float16 or don't pass this argument at all to remove this warning.
Traceback (most recent call last):
File "D:\chinese_alpaca_lora\Chinese-alpaca-lora\notebook\Alpaca-LoRA-Serve\app.py", line 178, in
run(args)
File "D:\chinese_alpaca_lora\Chinese-alpaca-lora\notebook\Alpaca-LoRA-Serve\app.py", line 79, in run
model, tokenizer = load_model(
File "D:\chinese_alpaca_lora\Chinese-alpaca-lora\notebook\Alpaca-LoRA-Serve\model.py", line 12, in load_model
model = LlamaForCausalLM.from_pretrained(
File "D:\ProgramData\Anaconda3\envs\chinese_luotuo3\lib\site-packages\transformers\modeling_utils.py", line 2588, in from_pretrained
raise ValueError(
ValueError:
Some modules are dispatched on the CPU or the disk. Make sure you have enough GPU RAM to fit
the quantized model. If you want to dispatch the model on the CPU or the disk while keeping
these modules in 32-bit, you need to set load_in_8bit_fp32_cpu_offload=True and pass a custom
device_map to from_pretrained. Check
https://huggingface.co/docs/transformers/main/en/main_classes/quantization#offload-between-cpu-and-gpu
for more details.

win10 + 3080ti
I type in command and get these...it seems my GPU RAM (12 G) is not enough for it?

Thank you for your interest and testing. First of all, 3080ti is sufficient for model inference and we have been able to run the inference code successfully on colab's k80. Secondly, your problem is an error in the runtime environment, bitsandbytes does not recognize your GPU, it may be that the environment such as bitsandbytes or cuda is not properly configured, we suggest to try to reconfigure the runtime environment.

Thank you for your interest and testing. First of all, 3080ti is sufficient for model inference and we have been able to run the inference code successfully on colab's k80. Secondly, your problem is an error in the runtime environment, bitsandbytes does not recognize your GPU, it may be that the environment such as bitsandbytes or cuda is not properly configured, we suggest to try to reconfigure the runtime environment.

Thanks! I think i got the answer. you're right, the answer is Windows
 ——https://github.com/TimDettmers/bitsandbytes

That's it! It's OK with linux~~


HWKALERTS-57

Preliminar work for:

Updating action architecture to pass alert and definitions into the plugin.
Support for plain and html templating in email plugin.

There are some tasks that are not fully finished as it depends of other JIRAs:

We need to unify jackson/gson libraries with jackson to simplify the json serialization/deserialization and use just one annotation (I have a JIRA for that).
It doesn't send email on alert resolution yet, as it can create a "spam" sent of emails (thinking on "Resolve All" button), so that it will be added when UI uses the AUTO-RESOLVE mode, in order to not add noise from plugins.
Integration profile -Drest is not working in master, as we have the WF9 on the way, when WF9 is out, I will update the profile again (the HWKALERTS-57 was tested with Alpha1 and no major issue found).

I've rebased with master to make the merge more easy, I would suggest to merge it and we can add fix for pending topics later.

It doesn't send email on alert resolution yet, as it can create a "spam" sent of emails

If we add actions to any lifecycle event I would expect that they would be configurable just like they are for the "Open" event (i.e. alert  create time).  This is probably your understanding as well, but I wanted to make sure because the sentence above made it seem like it may be fixed to an e-mail notification or something like that.

Correct. At the moment, we send actions on "open" alert, but not on "ack" and "resolve".
I introduced in the PR but finally I thought is better to define first the scenario and configuration parts.
With the current UI, a "Resolve All" would send a lot of emails with no useful info.
But your point is right, it is just a matter of definition about configuration for sending actions per "ack" and "resolve" mode (perhaps we may want to send on "resolve" but not "ack"), so, anyway, the PR only sends on open to avoid introducing new behaviours that may lead into confusion.

Lucas,  Overall this is good and I could have merged it as-is.  I will give a you a chance to review the comments and make any changes you see fit.  I will merge it tomorrow after confirming that you have no more commits to put in.

Thx for the review, I'm going to send a last commit with a couple of small changes and the PR will be ready to merge.

Looks good!  Merging...


update missing styles

Pull Request Test Coverage Report for Build 238

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 94.69%

Totals

Change from base Build 232:
0.0%

Covered Lines:
80

Relevant Lines:
83

💛  - Coveralls


[Feature Request]: RAGFlow API proposal

Is there an existing issue for the same feature request?

[X] I have checked the existing issues.

Describe the feature you'd like
RAGFlow's API interfaces are not enough and theAPI are not RESTful style. The goal of this issue is to propose the RESTFul APIs which covers most functions of RAGFlow.
Knowledge base

[x] create knowledge base #1106
[x] remove knowledge base #1186
[x] update knowledge base #1201
[x] list knowledge bases #1123
[x] get the description of a specific knowledge base #1201

Content management in knowledge base

[x] upload files #1264
[x] download files #1354
[x] remove files #1290
[x] update file attributes(name, enable status, ...) #1341
[x] list files #1327
[x] get the description of a specific file
[x] start parsing a file #1377
[x] abort file parsing
[x] get parsing progress
[x] get the chunk list of a parsed file
[x] remove chunks of  a parsed file
[ ] download/fetch a chunk of a parsed file
[ ] update the chunk status
[x] insert a new chunk to a parse file
[x] retrieval test on a specific knowledge base

AI assistant management

[x] create an assistant
[x] remove assistants
[x] list assistants
[x] update assistant config
[x] get the description of a specific assitant

Conversation management

[x] create a conversation
[x] delete conversations
[x] list conversations
[x] chat
[x] get the conversation history.

File management

[ ] create a directory
[ ] remove directories from a directory
[ ] move a directory
[ ] copy a directory
[ ] get the description of a specific directory
[ ] list file or directory from a parent directory
[ ] upload files into a specific directory
[ ] remove files from a specific directory
[ ] download files from a specific directory
[ ] move file
[ ] copy file
[ ] attach files to a knowledge base.
[ ] get the description of a specific file

Related issues: #345 #717

Is there an existing issue for the same feature request?

[x]  I have checked the existing issues.

Describe the feature you'd like
RAGFlow's API interfaces are not enough and theAPI are not RESTful style. The goal of this issue is to propose the RESTFul APIs which covers most functions of RAGFlow.
Knowledge base

[x]  create knowledge base API: create dataset #1106
[ ]  remove knowledge base
[ ]  update knowledge base
[ ]  list knowledge bases
[ ]  get the description of a specific knowledge base

Content management in knowledge base

[ ]  upload files
[ ]  download files
[ ]  remove files
[ ]  update file attributes(name, enable status, ...)
[ ]  list files
[ ]  get the description of a specific file
[ ]  start parsing a file
[ ]  abort file parsing
[ ]  get parsing progress
[ ]  get the chunk list of a parsed file
[ ]  remove chunks of  a parsed file
[ ]  download/fetch a chunk of a parsed file
[ ]  update the chunk status
[ ]  insert a new chunk to a parse file
[ ]  retrieval test on a specific knowledge base

File management

[ ]  create a directory
[ ]  remove directories from a directory
[ ]  move a directory
[ ]  copy a directory
[ ]  get the description of a specific directory
[ ]  list file or directory from a parent directory
[ ]  upload files into a specific directory
[ ]  remove files from a specific directory
[ ]  download files from a specific directory
[ ]  move file
[ ]  copy file
[ ]  attach files to a knowledge base.
[ ]  get the description of a specific file

AI assistant management

[ ]  create an assistant
[ ]  remove assistants
[ ]  list assistants
[ ]  update assistant config
[ ]  get the description of a specific assitant

Model management

[ ]  list models
[ ]  get the description of a specific model

Conversation management

[ ]  create a conversation
[ ]  delete conversations
[ ]  list conversations
[ ]  chat
[ ]  get the conversation history.

Related issues: #345 #717

I 澳门wondering with  flaskrest,flaskrestplus  will helps a lot.

create a knowledge base
is it supposed to work? I could not make it work.
There seem to be a few issues with the SDK, including configuring the wrong URL path.

for me:
self.api_url = f"{base_url}/api/{version}"
should be:
self.api_url = f"{base_url}/{version}/api"
Also even after this change I could not call the create dataset endpoint.

create a knowledge base
is it supposed to work? I could not make it work.
There seem to be a few issues with the SDK, including configuring the wrong URL path.

for me: self.api_url = f"{base_url}/api/{version}" should be: self.api_url = f"{base_url}/{version}/api"
Also even after this change I could not call the create dataset endpoint.

Hi jeremi, thanks for your question. The api url is http://<host_address>/api/v1/ . If you want to create a dataset, you can use http://<host_address>/api/v1/dataset by POST.

I tried it by building the latest main, and it does not work; I get a 404 with some HTML as a returned value.
If I invert API and version number, I get a JSON response, but with a 404 in the body:
200
b'{"data":null,"retcode":100,"retmsg":"<NotFound \'404: Not Found\'>"}\n'

Could you share your screenshot for the input and output?

I tried it by building the latest main, and it does not work; I get a 404 with some HTML as a returned value.
If I invert API and version number, I get a JSON response, but with a 404 in the body:
200
b'{"data":null,"retcode":100,"retmsg":"<NotFound \'404: Not Found\'>"}\n'

i have the same question

I tried it by building the latest main, and it does not work; I get a 404 with some HTML as a returned value.
If I invert API and version number, I get a JSON response, but with a 404 in the body:
200
b'{"data":null,"retcode":100,"retmsg":"<NotFound \'404: Not Found\'>"}\n'

Same issue.
If I post http://localhost/api/v1/dataset it returns:

	<title>405 Not Allowed</title>

405 Not Allowed

	nginx/1.18.0 (Ubuntu)

I've checked the code and I guess it happens because login is required to make a requests. So my question is, how do I login?

I tried it by building the latest main, and it does not work; I get a 404 with some HTML as a returned value.
If I invert API and version number, I get a JSON response, but with a 404 in the body:
200
b'{"data":null,"retcode":100,"retmsg":"<NotFound \'404: Not Found\'>"}\n'

Same issue.
If I post http://localhost/api/v1/dataset it returns:

	<title>405 Not Allowed</title>

405 Not Allowed

	nginx/1.18.0 (Ubuntu)

I've checked the code and I guess it happens because login is required to make a requests. So my question is, how do I login?

First, http://localhost/api/v1/dataset is not a valid URL. Additionally, when using the API, there is no need to log in, but a token is required. You can create an assistant in the chat, and then obtain the token using the Chat Bot API's API key.

这部分创建知识库API的代码 https://github.com/infiniflow/ragflow/pull/1106 看上去和 https://github.com/infiniflow/ragflow/blob/main/api/apps/kb_app.py#L39 应用中的创建知识库API的方法内容差距挺大，而且 API的路径也完全不同，我理解这出自不同开发人员，而且知识库和数据集确实是一一对应的，但创建知识库就是创建知识库，用 /api/v1/dataset 这样的url会很难受啊
我之前因为急需要用 retrieval api 所以也提了个 PR https://github.com/infiniflow/ragflow/pull/1763 但其实方法的内容主要都是从 https://github.com/infiniflow/ragflow/blob/main/api/apps/chunk_app.py#L256 的retrieval_test方法复制过来的
这样的开发方式让我对代码的健壮性比较担忧，屎山都是你一铲子我一铲子堆起来的，趁屎堆不大就该早点解决
所以能不能对 API 部分重构一下，我初步的设想：

抽象出一个 service 层，实现应用端和API端所共用的逻辑
API 风格：API 路径要和应用端一一对应 vs API端和应用端都重构为Restful风格 vs 只把API端改为 Restful 风格，这三种我倾向在后两种选一个

大家如果有更好的想法可以提出来我们一起讨论，有好的方案我可以来开发这部分内容

这部分创建知识库API的代码 #1106 看上去和 https://github.com/infiniflow/ragflow/blob/main/api/apps/kb_app.py#L39 应用中的创建知识库API的方法内容差距挺大，而且 API的路径也完全不同，我理解这出自不同开发人员，而且知识库和数据集确实是一一对应的，但创建知识库就是创建知识库，用 /api/v1/dataset 这样的url会很难受啊
我之前因为急需要用 retrieval api 所以也提了个 PR #1763 但其实方法的内容主要都是从 https://github.com/infiniflow/ragflow/blob/main/api/apps/chunk_app.py#L256 的retrieval_test方法复制过来的
这样的开发方式让我对代码的健壮性比较担忧，屎山都是你一铲子我一铲子堆起来的，趁屎堆不大就该早点解决
所以能不能对 API 部分重构一下，我初步的设想：

抽象出一个 service 层，实现应用端和API端所共用的逻辑
API 风格：API 路径要和应用端一一对应 vs API端和应用端都重构为Restful风格 vs 只把API端改为 Restful 风格，这三种我倾向在后两种选一个

大家如果有更好的想法可以提出来我们一起讨论，有好的方案我可以来开发这部分内容

IMHO 依我拙见，可以基于RAGFLOW已有实现的可以对外提供的resources[dataset,agent,dialog,conversation,tenant]来RESTFUI，或者openAPI标准更佳:- ）

@Valdanitooooo @yangboz Thank you guys comments on RAGFlow API.
We intend to create an international community, so we encourage using English for communication.

Good point. We're gona spend more time on this.

@yangboz @JinHai-CN @KevinHuSh In order to not disrupt existing functionality, I am attempting to refactor the API in a new directory. The most ideal scenario is for the Web APP API, Server API, and SDK API to all use the same code. I hope everything goes smoothly.

Hint: APIs to Web/SDK/developers are somewhat different.

@yangboz @JinHai-CN @KevinHuSh In order to not disrupt existing functionality, I am attempting to refactor the API in a new directory. The most ideal scenario is for the Web APP API, Server API, and SDK API to all use the same code. I hope everything goes smoothly.

What about choosing a relative naive one to file a pull request?

What about choosing a relative naive one to file a pull request?

I won't do everything at once. I hope to only complete the API for the dataset as a starting point, and then everyone can discuss together what defects and issues are. If the solution is mature, then assign the API of each resource to different people to complete.
I think we must be cautious. I am still using version 0.8.0, and the bugs in the new version are causing me headaches. I don't want to create more bugs for this project.

I tried it by building the latest main, and it does not work; I get a 404 with some HTML as a returned value.
If I invert API and version number, I get a JSON response, but with a 404 in the body:
200
b'{"data":null,"retcode":100,"retmsg":"<NotFound \'404: Not Found\'>"}\n'

Same issue.
If I post http://localhost/api/v1/dataset it returns:

	<title>405 Not Allowed</title>

405 Not Allowed

	nginx/1.18.0 (Ubuntu)

I've checked the code and I guess it happens because login is required to make a requests. So my question is, how do I login?

First, http://localhost/api/v1/dataset is not a valid URL. Additionally, when using the API, there is no need to log in, but a token is required. You can create an assistant in the chat, and then obtain the token using the Chat Bot API's API key.

It actually is a valid URL. As you can se in the documentation of  ragflow_api, http://<host_address>/api/v1/dataset is a valid endpoint.
Not only do you require the token to use this endpoint, but also a login is needed, just check the dataset_api.py file:

The decorator @login_required can be found in the line 128 before the Get dataset list method.
If you compare this code with another used to implement a method that just requires a valid token, lets say, Get conversation history, we can notice how the @login_required is commented:

Or like in the case of the Get answer method, just isn't there at all.

So, anyone knows how to log in?

I tried it by building the latest main, and it does not work; I get a 404 with some HTML as a returned value.
If I invert API and version number, I get a JSON response, but with a 404 in the body:
200
b'{"data":null,"retcode":100,"retmsg":"<NotFound \'404: Not Found\'>"}\n'

Same issue.
If I post http://localhost/api/v1/dataset it returns:

	<title>405 Not Allowed</title>

405 Not Allowed

	nginx/1.18.0 (Ubuntu)

I've checked the code and I guess it happens because login is required to make a requests. So my question is, how do I login?

First, http://localhost/api/v1/dataset is not a valid URL. Additionally, when using the API, there is no need to log in, but a token is required. You can create an assistant in the chat, and then obtain the token using the Chat Bot API's API key.

It actually is a valid URL. As you can se in the documentation of  ragflow_api, http://<host_address>/api/v1/dataset is a valid endpoint.
Not only do you require the token to use this endpoint, but also a login is needed, just check the dataset_api.py file:

The decorator @login_required can be found in the line 128 before the Get dataset list method.
If you compare this code with another used to implement a method that just requires a valid token, lets say, Get conversation history, we can notice how the @login_required is commented:

Or like in the case of the Get answer method, just isn't there at all.

So, anyone knows how to log in?

I tried it by building the latest main, and it does not work; I get a 404 with some HTML as a returned value.
If I invert API and version number, I get a JSON response, but with a 404 in the body:
200
b'{"data":null,"retcode":100,"retmsg":"<NotFound \'404: Not Found\'>"}\n'

Same issue.
If I post http://localhost/api/v1/dataset it returns:

	<title>405 Not Allowed</title>

405 Not Allowed

	nginx/1.18.0 (Ubuntu)

I've checked the code and I guess it happens because login is required to make a requests. So my question is, how do I login?

First, http://localhost/api/v1/dataset is not a valid URL. Additionally, when using the API, there is no need to log in, but a token is required. You can create an assistant in the chat, and then obtain the token using the Chat Bot API's API key.

It actually is a valid URL. As you can se in the documentation of ragflow_api, http://<host_address>/api/v1/dataset is a valid endpoint.
Not only do you require the token to use this endpoint, but also a login is needed, just check the dataset_api.py file:

The decorator `@login_required` can be found in the line [128](https://github.com/infiniflow/ragflow/blob/main/api/apps/dataset_api.py#L128) before the [Get dataset list](https://github.com/infiniflow/ragflow/blob/main/docs/references/ragflow_api.md#get-dataset-list) method.
If you compare this code with another used to implement a method that just requires a valid token, lets say, Get conversation history, we can notice how the @login_required is commented:

Or like in the case of the [Get answer](https://github.com/infiniflow/ragflow/blob/main/docs/references/api.md#get-answer) method, just isn't there at all.

So, anyone knows how to log in?

The ragflow_api may have some issues. You can look init.py, then you will find http://localhost/api/v1/dataset directs to api/apps/sdk/dataset.py, but / is not implemented.In this file, token_required instead of login_required. To get the token, reference ragflow_api since authentication part is correct.

It actually is a valid URL. As you can se in the documentation of ragflow_api, http://<host_address>/api/v1/dataset is a valid endpoint.
Not only do you require the token to use this endpoint, but also a login is needed, just check the dataset_api.py file:

The decorator `@login_required` can be found in the line [128](https://github.com/infiniflow/ragflow/blob/main/api/apps/dataset_api.py#L128) before the [Get dataset list](https://github.com/infiniflow/ragflow/blob/main/docs/references/ragflow_api.md#get-dataset-list) method.
If you compare this code with another used to implement a method that just requires a valid token, lets say, Get conversation history, we can notice how the @login_required is commented:

Or like in the case of the [Get answer](https://github.com/infiniflow/ragflow/blob/main/docs/references/api.md#get-answer) method, just isn't there at all.

So, anyone knows how to log in?

The ragflow_api may have some issues. You can look init.py, then you will find http://localhost/api/v1/dataset directs to api/apps/sdk/dataset.py, but / is not implemented.In this file, token_required instead of login_required. To get the token, reference ragflow_api since authentication part is correct.

It actually is a valid URL. As you can se in the documentation of ragflow_api, http://<host_address>/api/v1/dataset is a valid endpoint.
Not only do you require the token to use this endpoint, but also a login is needed, just check the dataset_api.py file:

The decorator @login_required can be found in the line 128 before the Get dataset list method.
If you compare this code with another used to implement a method that just requires a valid token, lets say, Get conversation history, we can notice how the @login_required is commented:

Or like in the case of the Get answer method, just isn't there at all.

So, anyone knows how to log in?

The ragflow_api may have some issues. You can look __init__.py, then you will find http://localhost/api/v1/dataset directs to api/apps/sdk/dataset.py, but / is not implemented.In this file, token_required instead of login_required. To get the token, reference ragflow_api since authentication part is correct.

I used RAGFlow as a knowledge base management tool and refactored some APIs that need to be used in my application.
If anyone needs more APIs, they can contribute code, and I will also take some vacation time to add more APIs.

api
branch: https://github.com/infiniflow/ragflow/tree/api

swagger docs: http://your_ragflow_address/v1/docs

sdk
python sdk: https://github.com/infiniflow/ragflow/tree/api/sdk/python

sdk usage
import os

from dotenv import load_dotenv
from ragflow import RAGFlow

load_dotenv()

RAGFLOW_API_KEY = os.environ.get("RAGFLOW_API_KEY", "")
RAGFLOW_ADDRESS = os.environ.get("RAGFLOW_ADDRESS", "")
EMBEDDING_MODEL = os.environ.get("EMBEDDING_MODEL", "")

ragflow = RAGFlow(RAGFLOW_API_KEY, RAGFLOW_ADDRESS)

# 查询所有知识库
def get_all_datasets():
    res = ragflow.dataset.list()
    if "retmsg" in res and res["retmsg"] == "success":
        return res["data"]
    raise Exception(res)

# 通过名字查询知识库
def get_dataset_by_name(dataset_name):
    res = ragflow.dataset.find_by_name(dataset_name)
    if "retmsg" in res and res["retmsg"] == "success":
        return res["data"]
    raise Exception(res)

# 创建知识库
def create_dataset(dataset_name):
    res = ragflow.dataset.create(dataset_name)
    if "retmsg" in res and res["retmsg"] == "success":
        return res["data"]
    raise Exception(res)

# 创建知识库
def update_dataset(kb_id):
    res = ragflow.dataset.update(
        kb_id=kb_id, language="Chinese", embd_id=EMBEDDING_MODEL, parser_id="naive", parser_config={
            "raptor": {"use_raptor": False}, "chunk_token_num": 256, "layout_recognize": True
        }
    )
    if "retmsg" in res and res["retmsg"] == "success":
        return res["data"]
    raise Exception(res)

# 上传文档到知识库
def upload_documents_2_dataset(kb_id: str, file_paths: list[str]):
    res = ragflow.document.upload(kb_id, file_paths)
    if "retmsg" in res and res["retmsg"] == "success":
        return res["data"]
    raise Exception(res)

# 查询知识库中的文档
def get_all_documents(kb_id: str):
    res = ragflow.dataset.list_documents(kb_id)
    if "retmsg" in res and res["retmsg"] == "success":
        return res["data"]
    raise Exception(res)

# 修改文档解析方法
def change_document_parser(doc_id: str, parser_id: str, parser_config: dict):
    res = ragflow.document.change_parser(doc_id, parser_id, parser_config)
    if "retmsg" in res and res["retmsg"] == "success":
        return res["data"]
    raise Exception(res)

# 执行解析文档
def documents_run_parsing(doc_ids):
    res = ragflow.document.run_parsing(doc_ids=doc_ids)
    if "retmsg" in res and res["retmsg"] == "success":
        return res["data"]
    raise Exception(res)

def retrieval(kb_id, question, top):
    res = ragflow.dataset.retrieval(
        kb_id=kb_id, question=question, page_size=top, top_k=top, similarity_threshold=0.2)
    if "retmsg" in res and res["retmsg"] == "success":
        try:
            chunks = res['data']['chunks']
            docs_str = ""
            if len(chunks) > 0:
                for chunk in chunks:
                    docs_str += "\n-------\n\n" + chunk["content_with_weight"].replace("\r", "\n") + "\n\n"
            print(docs_str)
            return docs_str
        except Exception as e:
            print(e)
    return "未检索到结果"

I tried it by building the latest main, and it does not work; I get a 404 with some HTML as a returned value.
If I invert API and version number, I get a JSON response, but with a 404 in the body:
200
b'{"data":null,"retcode":100,"retmsg":"<NotFound \'404: Not Found\'>"}\n'

Same issue.
If I post http://localhost/api/v1/dataset it returns:

	<title>405 Not Allowed</title>

405 Not Allowed

	nginx/1.18.0 (Ubuntu)

I've checked the code and I guess it happens because login is required to make a requests. So my question is, how do I login?

First, http://localhost/api/v1/dataset is not a valid URL. Additionally, when using the API, there is no need to log in, but a token is required. You can create an assistant in the chat, and then obtain the token using the Chat Bot API's API key.

It actually is a valid URL. As you can se in the documentation of ragflow_api, http://<host_address>/api/v1/dataset is a valid endpoint.
Not only do you require the token to use this endpoint, but also a login is needed, just check the dataset_api.py file:

The decorator `@login_required` can be found in the line [128](https://github.com/infiniflow/ragflow/blob/main/api/apps/dataset_api.py#L128) before the [Get dataset list](https://github.com/infiniflow/ragflow/blob/main/docs/references/ragflow_api.md#get-dataset-list) method.
If you compare this code with another used to implement a method that just requires a valid token, lets say, Get conversation history, we can notice how the @login_required is commented:

Or like in the case of the [Get answer](https://github.com/infiniflow/ragflow/blob/main/docs/references/api.md#get-answer) method, just isn't there at all.

So, anyone knows how to log in?

I request the interface of login, and give the payload data(account and password), and successfully acquire the response.


Problem with file uploading

Strange error happened to 100% working code (I mean this code has been working brilliantly for a while, but now gives strange errors).
Using flask (0.7.2), flask-wtf, flask-uploads.
Main code:
@app.route('/task/new', methods=['GET', 'POST'])
def task():
    form = TaskForm(request.form)
    if request.method == 'POST' and form.validate():
        print type(form.image) # <class 'flaskext.wtf.file.FileField'>
        print type(form.image.file) # <type 'unicode'>
        print type(form.image.data) # <type 'unicode'>
        print form.image.file.filename # gives AttributeError: 'unicode' object has no attribute 'filename'

Some part from forms.py:
from flaskext.wtf import ....... FileField,  file_allowed
from flaskext.uploads import UploadSet, IMAGES

images = UploadSet("images", IMAGES)

class TaskForm(Form):
    url = TextField(u'URL', [validators.Length(min=4, max=400), validators.Required()])
    title = TextField(u'TITLE', [validators.Length(min=4, max=4000), validators.Required()])
    description = TextAreaField(u'Desc', [validators.Length(min=4, max=4000), validators.Required()])
    image = FileField(u'Image', [file_allowed(images, "Images only!")])

Jinja 2 template:
<form action="{{ url_for('task', task_id=task.id) }}" method="POST" enctype="multipart/form-data">
	{{ form.hidden_tag() }}
	{{ help.render_field(form.url) }} # using rendering form macro, no problem there
	{{ help.render_field(form.title) }}
        {{ help.render_field(form.description) }}
        {{ help.render_field(form.image) }}
        <button class="positive" type="submit">Save</button>
</form>

In Firefox submitting this form makes required fields (url, title, description) giving error "This field is required. " (Surely they are filled correctly).
In Chrome it's OK, but (from the main code):

    print type(form.image) # <class 'flaskext.wtf.file.FileField'>
    print type(form.image.file) # <type 'unicode'>
    print type(form.image.data) # <type 'unicode'>
    print form.image.file.filename # gives AttributeError: 'unicode' object has no attribute 'filename'

Enctype is correct (it was working well, no changes were made).
So what can I do with this errors? It was working great, but now crashes. If needed, hosting is ep.io

@untitaker I'm suggesting this be closed, it looks like @akolesnikov93 simply had a bug in their code.


Maintenance of Ungoogled Chromium Fedora

I started recently using Fedora as one of my daily driver, and came across both this unmaintained repo and the COPR distributed version by @wojnilowicz.
Since Ungoogled Chromium is currently my daily driver, and I'd like to use it on Fedora, I propose to get Ungoogled Chromium Fedora back into officially maintained state, maybe migrating to COPR. I can be the maintainer of the project.
And, just curious, @wojnilowicz do you have any interest maintaining the Ungoogled Chromium Fedora here?
Opinions? /cc @PF4Public @networkException

I think it would be better to restore the chromium-browser-privacy package at RPM Fusion but that means more maintenance burden.
I guess I could copy over my repository (ungoogled-chromium-copr) to this one (ungoogled-chromium-fedora) and build ungoogled-chromium from it instead but what's the use? It would still have to be built on a private COPR like mine.
I also don't know what do you mean by "[...] maybe migrating to COPR". I've already migrated it there.
I also don't understand when you write "I can be the maintainer of the project.". Now when everything is setup to work with COPR it's very low maintenance work and I'm happy to do it on my own.
I should mention though that this low maintenance is possible thanks to great work from @ngothan for maintaining the base chromium at https://src.fedoraproject.org/rpms/chromium and recently I see mostly @Ahrotahn  for keeping ungoogled-chromium patches current at https://github.com/ungoogled-software/ungoogled-chromium. Thanks.

@wojnilowicz

I think it would be better to restore the chromium-browser-privacy package at RPM Fusion but that means more maintenance burden.

If it is worth it, I think we can do it.

I guess I could copy over my repository (ungoogled-chromium-copr) to this one (ungoogled-chromium-fedora) and build ungoogled-chromium from it instead but what's the use? It would still have to be built on a private COPR like mine.

I think, let it be maintained in a more "official" way? At least a private COPR under "ungoogled-chromium"? Maybe not a very big change, just a very personal idea.

I also don't know what do you mean by "[...] maybe migrating to COPR". I've already migrated it there.

This repo is not using COPR as you can see, and I am taking specifically what can be done to this repo.

I also don't understand when you write "I can be the maintainer of the project.". Now when everything is setup to work with COPR it's very low maintenance work and I'm happy to do it on my own.

If that's the case, no problem.

I should mention though that this low maintenance is possible thanks to great work from @ngothan for maintaining the base chromium at src.fedoraproject.org/rpms/chromium and recently I see mostly @Ahrotahn for keeping ungoogled-chromium patches current at ungoogled-software/ungoogled-chromium. Thanks.

Of course, everyone who worked on this deserves their credit.
Happy to continue the discussion if needed, thanks for your response.

I guess I could copy over my repository (ungoogled-chromium-copr) to this one (ungoogled-chromium-fedora) and build ungoogled-chromium from it instead but what's the use? It would still have to be built on a private COPR like mine.

I think, let it be maintained in a more "official" way? At least a private COPR under "ungoogled-chromium"? Maybe not a very big and necessary change, just a very personal idea.

I see that Gentoo's official way links to this . Similarly in OpenSUSE's case. Could you just link mine maintained ungoogled-chromium-copr or COPR to be official as well as I believe is suggested at here and we're done with this? I mean if a private COPR is not an issue here anyway.

I also don't know what do you mean by "[...] maybe migrating to COPR". I've already migrated it there.

This repo is not using COPR as you can see, and I am taking specifically what can be done to this repo.

I see. Then I think you meant copy-paste (a lot less work than migrating) my repo to this repo 🙂

I also don't understand when you write "I can be the maintainer of the project.". Now when everything is setup to work with COPR it's very low maintenance work and I'm happy to do it on my own.

If that's the case, no problem. I am more or less merging two ideas together here, you may be interested in some of my proposal and discuss what can be done, or maybe I will have to maintain it entirely, regardless if it's RPM or COPR package to be maintained. Sorry for the confusion.

No problem. And by RPM you mean RPM Fusion?
The thing is that there is no shortage of maintainer of COPR. It seems to me that you really just want to overtake this maintainership, and continue doing low effort work. I don't see how this would help.
The thing is that there is no maintainer for the abandoned RPM Fusion package. AFAIK it was built from ungoogled-chromium-fedora or at least the author was the same. I would love to see it maintained because I think RPM Fusion has wider reach in Fedora and would provide less fragmentation of sources of software. If you're up to that task, then I think it might be a real help. In that case I would have to thank you for raising this issue.

I see that Gentoo's official way links to this . Similarly in OpenSUSE's case. Could you just link mine maintained ungoogled-chromium-copr or COPR to be official as well as I believe is suggested at here and we're done with this? I mean if a private COPR is not an issue here anyway.

Yes.

I see. Then I think you meant copy-paste (a lot less work than migrating to COPR) my repo to this repo 🙂

I am very sorry, again, for the confusion caused here. At the time of writing I don't know if you will be interested to maintain the project here, and I was talking about what happens in that case, me continuing to do this in RPM Fusion or any other RPM repo, or me do the COPR related work again, which I also need opinions on (the reason I ping'ed core members).

No problem. And by RPM you mean RPM Fusion?

Yes.

The thing is that there is no shortage of maintainer of COPR. It seems to me that you really just want to overtake this maintainership, and continue doing low effort work. I don't see how this would help.

This is the same thing as the copy-paste problem. I have no intention of just take over whatever you have done, but there's multiple cases here, I'm just saying that if we say maintain the RPM package is a better idea, or if you don't want to do this at all, I have the intention of doing the work required, high or low, instead of saying "let's see if someone wants to pick it up". Again, for the third time, sorry for the confusion.

The thing is that there is no maintainer for the abandoned RPM Fusion package. AFAIK it was built from ungoogled-chromium-fedora or at least the author was the same. I would love to see it maintained because I think RPM Fusion has wider reach in Fedora and would provide less fragmentation of sources of software. If you're up to that task, then I think it might be a real help. In that case I would have to thank you for raising this issue.

I'am now woking on take the RPM Fusion package back into maintained state. That's what I ment by "I can be the maintainer", and that was my only intention, not to steal work from others and call it a day, if this was more or less the intention I gave to you, sorry about my language.

I see that Gentoo's official way links to this . Similarly in OpenSUSE's case. Could you just link mine maintained ungoogled-chromium-copr or COPR to be official as well as I believe is suggested at here and we're done with this? I mean if a private COPR is not an issue here anyway.

Yes.

Thank you.

I see. Then I think you meant copy-paste (a lot less work than migrating to COPR) my repo to this repo 🙂

I am very sorry, again, for the confusion caused here. At the time of writing I don't know if you will be interested to maintain the project here, and I was talking about what happens in the case you don't, me continuing to do this in RPM Fusion or any other RPM repo, or me do the COPR related work again, which I also need opinions on (the reason I ping'ed core members).

No problem. No offence taken 🙂

No problem. And by RPM you mean RPM Fusion?

Yes.

The thing is that there is no shortage of maintainer of COPR. It seems to me that you really just want to overtake this maintainership, and continue doing low effort work. I don't see how this would help.

This is the same thing as the copy-paste problem. I have no intention of just take over whatever you have done, but there are multiple cases here, I'm just saying that if we say maintain the RPM package is a better idea, or if you don't want to do this at all, I have the intention of doing the work required, high or low, instead of saying "let's see if someone wants to pick it up".

The thing is that there is no maintainer for the abandoned RPM Fusion package. AFAIK it was built from ungoogled-chromium-fedora or at least the author was the same. I would love to see it maintained because I think RPM Fusion has wider reach in Fedora and would provide less fragmentation of sources of software. If you're up to that task, then I think it might be a real help. In that case I would have to thank you for raising this issue.

I am now working to take the RPM Fusion package back into maintained state. That's what I meant by "I can be the maintainer", and that was my only intention, not to steal work from others and call it a day, if this was more or less the impression I gave to you, sorry about my inappropriate way to express my thoughts.

As said earlier no problem, and no offence taken. After all the license allows you to take my work without asking and do a lot with it without being accused of stealing. That's also not what I wanted to express (i.e. the stealing part), so sorry if it sounded like that.
For me it was a bit strange that you would like to help with a perfectly working distribution system that I've created with COPR. It was also strange that you were asking about it instead of directly copying my repo and making it official under your maintenance. That confused me about your intentions.

P.S.:
Here's my promise: no matter what, I won't copy a maintained repo and say I'm maintaining it. I know this is not how it works. More specifically to our case, my idea was, if you want to maintain the COPR repo under ungoogled-chromium/ungoogled-software's name, we can directly move your repo here. This is the only case where your repo would and should be copy-pasted.

No need to denounce youself. The way you think about how it works make me feel that there is still a sense of justice (if one could define it 🙂) in the world, and I'm greatful for that.
Returning to the point, I would have to see some advantage in maintaining it under the ungoogled-software name, and I waged some like e.g. being able to use webooks, but was unable to figure out a system that would bring me even less work 🙂

I will be working on the RPM Fusion package in this repo, which I am not familiar of and might take lots of time, but I am committed to it. If you want to maintain the COPR version under ungoogled-software, tell me, and I'm happy to work on that. (My initial idea was that if it is maintained "officially" it might get more attention and interest.) In the meantime, I will create a PR to add your repo to the README. Thanks for the work you've done.

Great to hear that you've motivaton to work on the RPM Fusion package. I think it's the best way to get more attention and interest (and before all, availability). If you'll get stuck with it then don't hesitate to post a question here. In fact I explored a few ways into getting ungoogled-chromium to work in Fedora until I decided to go with COPR, so I had some ideas on how it could be maintained for RPM Fusion. I'm also a maintainer of one package there, so I know a bit on how it goes.

As said earlier no problem, and no offence taken. After all the license allows you to take my work without asking and do a lot with it without being accused of stealing. That's also not what I wanted to express (i.e. the stealing part), so sorry if it sounded like that. For me it was a bit strange that you would like to help with a perfectly working distribution system that I've created with COPR. It was also strange that you were asking about it instead of directly copying my repo and making it official under your maintenance. That confused me about your intentions.

My intention was to ask if you want to maintain under the ungoogled-software name, if you do, we can just move your repo, if you don't, then I'm willing to do it (that's why I said I can be a maintainer), and do the work required.
Even in the second case, I wouldn't just copy your repo. I think we all agree that, even if the license doesn't say anything about it, copying your repo, grab the attention and make it looks like that I'm working on it is not helpful to anything. So, at least I would listen to your opinion on it.

No need to denounce youself. The way you think about how it works make me feel that there is still a sense of justice (if one could define it 🙂) in the world, and I'm greatful for that. Returning to the point, I would have to see some advantage in maintaining it under the ungoogled-software name, and I waged some like e.g. being able to use webooks, but was unable to figure out a system that would bring me even less work 🙂

I will be working on the RPM Fusion package in this repo, which I am not familiar of and might take lots of time, but I am committed to it. If you want to maintain the COPR version under ungoogled-software, tell me, and I'm happy to work on that. (My initial idea was that if it is maintained "officially" it might get more attention and interest.) In the meantime, I will create a PR to add your repo to the README. Thanks for the work you've done.

Great to hear that you've motivaton to work on the RPM Fusion package. I think it's the best way to get more attention and interest (and before all, availability). If you'll get stuck with it then don't hesitate to post a question here. In fact I explored a few ways into getting ungoogled-chromium to work in Fedora until I decided to go with COPR, so I had some ideas on how it could be maintained for RPM Fusion. I'm also a maintainer of one package there, so I know a bit on how it goes.

I am very new to RPM Fusion and am currently confused on how to get started, as their guide doesn't seem to mention what should be done if we want to continue to maintain a currently existing but unmaintained package.
I am trying to find someone that can help me go through the beginner process and help me to familiarize the process of contributing, I am planning to email the mail list before I got your response for seeking help, but I will be very happy if you can help me.

Nicolas Chauvet and Leigh Scott are the ones you would like to talk to. The first one gave me my permissions. It did not take long as I wanted to take care of an unmaintained package. If I remember correctly, everything played itself out in a bug report where the package would be either abandoned or somebody would stand up and continue maintaining it.
I assume that you already know how to package an app in a rpm.

Nicolas Chauvet and Leigh Scott are the ones you would like to talk to. The first one gave me my permissions. It did not take long as I wanted to take care of an unmaintained package. If I remember correctly, everything played itself out in a bug report where the package would be either abandoned or somebody would stand up and continue maintaining it.

Got it.

I assume that you already know how to package an app in a rpm.

I am now trying to build the latest ungoogled-chromium.


Support for multiple base64 strings

If we have multiple pdf base64 strings, we should be able to send an array. Any idea's how to do this or if you will support it?

In order to upload multiple base64 strings, I would suggest you create a putter instance for each one, no plans to support multiple strings, I would also recommend you do this serially for if you have too many b64 strings in memory you'll probably hit a heap limit (~1.7gb is the max). The idea here is to limit the amount of buffers your application has in memory at a given time.
Although if your strings are relatively small, you could loop through the array and instantiate a putter in each iteration. I think something like this might work:
const options = {}
const strings = ['/9j/4QAYRXhpZg...', '...']

let jobs = 0

strings.forEach((str, i) => {
  const putter = new Putter(options)
  putter.put(str, `images/success_${i}.jpg`, 'image/jpeg', 'public-read')
  putter.on('progress', data => {
    console.log(`progress for ${i}`, data)
  })
  putter.on('response', data => {
    console.log(`response for ${i}`, data)
    jobs-=1
    if (jobs === 0) // your done
  })
  jobs+=i
})


Add options for players to configure displaying of nametags

This could be based on distance.

Also could add option to set colors or add a symbol.


"Server do not support X-OC-MTime" from owncloudcmd

While using owncloudcmd to sync files to a Davros grain, I get a message in my owncloudcmd log that says:
Server do not support X-OC-MTime ""
I suspect it would be wise for us to add support to this to Sandstorm. Presumably my client is going to submit duplicated requests to Davros based on not having access to remote mtimes, so I thought I should file this.
Slightly longer log snippet:
!!! OCC::PUTFileJob created for "https://api.rose.sandcats.io/" + "/pub/pub/scrapy-talk/_static/up.png"
void OCC::PropagateUploadFileQNAM::slotPutFinished<EMAIL_ADDRESS>FINISHED WITH STATUS QNetworkReply::NetworkError(NoError) "" QVariant(int, 201) QVariant(QString, "Created")
Server do not support X-OC-MTime ""
*==* duration UPLOAD 363 0 1166
OCC::SyncJournalFileRecord::SyncJournalFileRecord(const OCC::SyncFileItem&, const QString&) "./pub/pub/scrapy-talk/_static/up.png" Retrieved inode  331892 (previous item inode:  331892 )
"INSERT OR REPLACE INTO metadata (phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote) VALUES (?1 , ?2, ?3 , ?4 , ?5 , ?6 , ?7,  ?8 , ?9 , ?10, ?11, ?12, ?13, ?14);" -1275537046966359755 34 "pub/pub/scrapy-talk/_static/up.png" 331892 0 "1374686074" "0" "e06a5c2d79aa917614dcd2977bbbd27c" "" "" 363 0
"DELETE FROM uploadinfo WHERE path=?1" "pub/pub/scrapy-talk/_static/up.png"
void OCC::SyncJournalDb::commitInternal(const QString&, bool) Transaction commit  "upload file start" and starting new transaction
void OCC::SyncEngine::slotItemCompleted(const OCC::SyncFileItem&, const OCC::PropagatorJob&) "pub/pub/scrapy-talk/_static/up.png" INSTRUCTION_NEW 4 ""
!!! OCC::PUTFileJob created for "https://api.rose.sandcats.io/" + "/pub/pub/scrapy-talk/_static/view-source.img"

Moving here from https://github.com/sandstorm-io/sandstorm/issues/1205

Funny enough, the first search result for "x-oc-mtime" is now this github issue. In digging around in the owncloud source, it seems that x-oc-mtime is actually just a piece of metadata the server is expected to hold onto.
Unfortunately right now Davros' storage is just the filesystem, so I'm not sure there's an easy way to keep these around. At some point in the mid-term future I'd like to revamp the storage layer to add things like metadata and versioning, and at that point it would be a lot easier to support this.

FWIW, since Davros uses the filesystem, and the x-oc-mtime seems to mirror
the filesystem's concept of "modified time" aka "mtime", it seems to me
that Davros can use
https://nodejs.org/api/fs.html#fs_fs_futimes_fd_atime_mtime_callback
fs.futimes() to change the mtime.
Other reference:

http://owncloud.10557.n7.nabble.com/API-to-set-MTIME-of-files-td14962.html

I have a partially working implementation of this, but it turns out that X-OC-MTime needs both a request and response header in order to work. (client sends X-OC-MTime: 123456789, server sends X-OC-MTime: accepted) So I think the best bet is to wait on https://github.com/sandstorm-io/sandstorm/pull/1202 to be merged.

Just wanted to add I saw this error today too in this constellation:
Installed owncloud client on my MACbook, copied a folder with some 20 files or so into it, then installed the client on Windows 10 and about 6 files or so were giving this error and had not been synced to the Win10 machine. I then quit/restarted the client on the MAC and the files were synced to my sandstorm instance. Once I quit and restarted the Win10 client the changes were synced there too.No more X-OC-Time errors.
No idea what went on here but there you go.

So if davros gives  me this mtime error, that does mean those files have not been synced, right?

Unfortunately it looks like we're still stuck on https://github.com/sandstorm-io/sandstorm/pull/1202, but I don't believe the x-oc-mtime warning should hurt anything. It may just involve an extra request as the client verifies its version matches the server's.

I had believed that this was just a warning, but it appears that there may be some mysterious off-by-one error in the Owncloud client which causes crashes relating to this header. smashbox (the owncloud acceptance test suite) fails hard when no X-OC-MTime: accepted header is sent, but works when it is.
It's doubly unfortunate since mtime is a totally unreliable thing to sync across machines due to clock differences, etc.

This is now fixed.


Added two python books

I suggest writing down what books are open source so people seeking to translate a book can find one quickly.

I think it's not worth the effort.

I have also thought about doing this; I would help out if we could get agreement on how to go about it. Perhaps the best way to approach it is to create an issue.

I.think creating a issue is the best way to really test this.

going to have to put it in alphabetical order later. thx for your contribution!


form to js to table working

all working -still need header

had header -it disappeared, still need footer


python38Packages.telethon: Patch find_library call for libssl

https://github.com/LonamiWebs/Telethon/blob/8330635a725717390e1981848737b8988a419fe1/telethon/crypto/libssl.py#L19

Motivation for this change
Telethon can use libssl to speed up encryption, this is especially useful when sending files.
See https://docs.telethon.dev/en/latest/developing/philosophy.html:

If libssl is available on your system, the library will make use of it to speed up some critical parts such as encrypting and decrypting the messages. Files will notably be sent and downloaded faster.

The ctypes.util.find_library call fails on NixOS because the environmental variables that get checked (by ldconfig, gcc, etc) are obviously missing so we patch it with a direct path to libssl.
Things done

[X] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[X] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[X] Tested execution of all binary files (usually in ./result/bin/)
[X] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[X] Fits CONTRIBUTING.md.

Okay, it should work now.


fix(tabs): Show active tab at full opacity

Fixes #2058

Closing in favor of #14623, though we may decide to just let this be fixed by the MDC-based tabs.