Thank you for your interest in making tensor search more accessible!
You can submit bug reports on our GitHub repo
We welcome contributions to the codebase. Here are some coding guidelines to follow:
- Where possible, we explicitly state the arg names when calling a function.
This makes refactoring easier. If possible, use
func(a=1, b=2)
rather thanfunc(1, 2)
- Errors raised that concern non-user-facing functionality
(for example, related to vectors), should raise an
InternalError
or its subclass - Errors arising from calls S2 Inference's API should raise an
S2InferenceError
We use semantic versioning.
- We are in major version 0 (0.x.x). Because of this, we may release major breaking changes by incrementing the minor version (0.2.4 -> 0.3.0) rather than the major version.
- We do regular minor releases. These are releases that are additive and don't break existing functionality. These may additively extend the API. During a minor release we bump the patch number: 0.1.5 -> 0.1.6
- In-between minor releases, we release bug-fixes and optimisations where we optionally bump the patch number: 0.2.12 -> 0.2.13
- If there are any breaking changes, there will be a major release, recorded as incrementing the minor version: 0.2.4 -> 0.3.0
- Once Marqo is in major version 1 (1.0.0), the public API will be considered 'defined' and Marqo's versioning will follow the typical semantic versioning pattern
- If we are still in major version 0, and complexity and stability needs necessitates it, we can force all bug fixes and optimisations to increment the patch number (rather than it being optional). In this case this section will be updated to reflect the change.
-
Run unit tests and ensure they all pass (read the testing section below for more details)
-
Generate a pull request to the
mainline
branch. These will be reviewed before merging -
After merging to
mainline
, please delete the branch with the pull request -
A Github integration pipeline will run. After all tests pass, build a multiplatform docker image for the
linux/arm64
andlinux/amd64
platforms, pushing it to themarqoai/marqo
repository. Make sure it is tagged with the version number (-t marqoai/marqo:0.1.5
). If it is a pre-release intended for testing, also push it to the test tag (add-t marqoai/marqo:test
). If it is a release, also push it to the latest tag (add-t marqoai/marqo:latest
). -
For releases, please record changes in
RELEASE.md
. Then create a github release (with a short summary of changes) that links to the changes inRELEASE.md
. -
For releases that change the API, update py-marqo to make those changes accessible.
-
To release a change to py-marqo, bump py-marqo's version (major.minor.patch, see below for more details), run all the tests, build the package and push it to PyPi. py-marqo's version is independent from Marqo.
-
Then, use the following format for releasing changes:
- . # Release x.y.z
- small blurb about release
- . ## Breaking changes
- . ## Deprecations
- . ## Caveats
- adding/bumping of dependencies
- lack of platform support (for certain features)
- other (non-breaking) caveats to new features/fixes
- . ## New features
- Non-breaking changes
- . ## Bug fixes
- . ### Testing
- . ## Contributor shout outs
- . # Release x.y.z
WARNING: Be very careful if your environment has access to a Marqo production instance. These tests will arbitrarily modify, create and delete indices on the Marqo instances it uses for testing.
Tips
If you don't have the exact python version specified in the tox.ini
file, you can run tox like this: tox -e py
. This tells tox
to use whatever python version it finds on your machine.
- Ensure you have marqo-os running:
docker rm -f marqo-os
docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" --name marqo-os marqoai/marqo-os:0.0.3
- run
tox
in the Marqo home directory
To run integration tests, pull the api testing repo. Then, follow the instructions in the README.
The Python Marqo client has its own test suite. Clone the repo, cd
into the client home directory and then run tox
.
- Separation between data and configuration
- Usability is super important, unless it clashes with performance. In that case, performance takes precedence.
- Easy things should be easy, hard things should be possible