Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ jobs:
strategy:
fail-fast: false
matrix:
version: ["1.32.27", "1.33.18", "1.34.20", "1.35.16", "1.36.10", "1.37.2"]
version: ["1.32.27", "1.33.18", "1.34.20", "1.35.16", "1.36.10", "1.37.5-e0fe0d5.amd64"]
uses: ./.github/workflows/test-on-weaviate-version.yml
secrets: inherit
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-on-weaviate-version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
echo "🏃 DRY-RUN MODE: Skipping actual unit tests"
echo '<?xml version="1.0" encoding="utf-8"?><TestRun><ResultSummary outcome="Completed"><Counters total="91" executed="91" passed="91" failed="0" error="0" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" /></ResultSummary></TestRun>' > ./test-results/test-unit-${{ inputs.weaviate-version }}.trx
else
WEAVIATE_VERSION=${{ inputs.weaviate-version }} dotnet test --no-restore \
dotnet test --no-restore \
--filter "FullyQualifiedName~Unit" \
--logger "trx;LogFileName=test-unit-${{ inputs.weaviate-version }}.trx" \
--results-directory ./test-results
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Removed

- **`ReplicationAsyncConfig.MaxWorkers` and `ReplicationAsyncConfig.AliveNodesCheckingFrequency`** — Both fields have been no-ops on the server since Weaviate 1.37.3 and are now removed from the user-facing model, the OpenAPI spec, and the generated DTO. Existing code that sets these properties will not compile after upgrading; no behavioral change results from the removal.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this also need to be removed from PublicAPI.Shipped.txt?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, when the release is cut


---

## [1.1.0] — 2026-05-11
Expand Down
3 changes: 3 additions & 0 deletions ci/docker-compose-cluster.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ services:
DEFAULT_VECTORIZER_MODULE: text2vec-transformers
ENABLE_MODULES: text2vec-transformers
AUTOSCHEMA_ENABLED: 'false'
DEFAULT_VECTOR_INDEX: '${DEFAULT_VECTOR_INDEX:-hfresh}'
REPLICA_MOVEMENT_ENABLED: 'true'
TRANSFORMERS_INFERENCE_API: http://transformers:8080

Expand Down Expand Up @@ -54,6 +55,7 @@ services:
DEFAULT_VECTORIZER_MODULE: text2vec-transformers
ENABLE_MODULES: text2vec-transformers
AUTOSCHEMA_ENABLED: 'false'
DEFAULT_VECTOR_INDEX: '${DEFAULT_VECTOR_INDEX:-hfresh}'
REPLICA_MOVEMENT_ENABLED: 'true'
TRANSFORMERS_INFERENCE_API: http://transformers:8080

Expand Down Expand Up @@ -88,6 +90,7 @@ services:
DEFAULT_VECTORIZER_MODULE: text2vec-transformers
ENABLE_MODULES: text2vec-transformers
AUTOSCHEMA_ENABLED: 'false'
DEFAULT_VECTOR_INDEX: '${DEFAULT_VECTOR_INDEX:-hfresh}'
REPLICA_MOVEMENT_ENABLED: 'true'
TRANSFORMERS_INFERENCE_API: http://transformers:8080
...
1 change: 1 addition & 0 deletions ci/docker-compose-okta-cc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ services:
AUTHENTICATION_OIDC_GROUPS_CLAIM: 'groups'
AUTHORIZATION_ADMINLIST_ENABLED: 'true'
AUTHORIZATION_ADMINLIST_USERS: '0oa7e9ipdkVZRUcxo5d7'
DEFAULT_VECTOR_INDEX: '${DEFAULT_VECTOR_INDEX:-hfresh}'
DISABLE_TELEMETRY: 'true'
...
1 change: 1 addition & 0 deletions ci/docker-compose-okta-users.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ services:
AUTHENTICATION_OIDC_GROUPS_CLAIM: 'groups'
AUTHORIZATION_ADMINLIST_ENABLED: 'true'
AUTHORIZATION_ADMINLIST_USERS: 'test@test.de'
DEFAULT_VECTOR_INDEX: '${DEFAULT_VECTOR_INDEX:-hfresh}'
AUTHENTICATION_OIDC_SCOPES: 'openid,email'
DISABLE_TELEMETRY: 'true'
...
1 change: 1 addition & 0 deletions ci/docker-compose-rbac.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ services:
AUTHORIZATION_ENABLE_RBAC: "true"
AUTHENTICATION_DB_USERS_ENABLED: "true"
AUTHENTICATION_OIDC_ENABLED: 'true'
DEFAULT_VECTOR_INDEX: '${DEFAULT_VECTOR_INDEX:-hfresh}'
AUTHENTICATION_OIDC_CLIENT_ID: 'Peuc12y02UA0eAED1dqSjE5HtGUrpBsx'
AUTHENTICATION_OIDC_ISSUER: 'https://auth.weaviate.cloud/Peuc12y02UA0eAED1dqSjE5HtGUrpBsx'
AUTHENTICATION_OIDC_USERNAME_CLAIM: 'email'
Expand Down
1 change: 1 addition & 0 deletions ci/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ services:
CLUSTER_HOSTNAME: "singlenode"
AUTOSCHEMA_ENABLED: 'false'
DISABLE_TELEMETRY: 'true'
DEFAULT_VECTOR_INDEX: '${DEFAULT_VECTOR_INDEX:-hfresh}'
DISABLE_LAZY_LOAD_SHARDS: 'true'
OBJECTS_TTL_DELETE_SCHEDULE: "@every 1m"
GRPC_MAX_MESSAGE_SIZE: 100000000 # 100mb
Expand Down
2 changes: 2 additions & 0 deletions ci/start_weaviate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ set -eou pipefail

DEFAULT_VERSION="1.34.0"
MIN_SUPPORTED="1.31.0"
DEFAULT_VECTOR_INDEX_VALUE="hfresh"
REQUESTED_VERSION="${1:-$DEFAULT_VERSION}"

# Compare versions; ensure REQUESTED_VERSION >= MIN_SUPPORTED
Expand All @@ -13,6 +14,7 @@ if [[ $(printf '%s\n' "$MIN_SUPPORTED" "$REQUESTED_VERSION" | sort -V | head -n1
fi

export WEAVIATE_VERSION="$REQUESTED_VERSION"
export DEFAULT_VECTOR_INDEX="${DEFAULT_VECTOR_INDEX:-$DEFAULT_VECTOR_INDEX_VALUE}"

cd "$(dirname "${BASH_SOURCE[0]}")"

Expand Down
8 changes: 8 additions & 0 deletions src/Weaviate.Client.Tests/Common/ServerVersions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,12 @@ internal static class ServerVersions
/// Tests will skip if the running server reports a lower version.
/// </summary>
public const string MinSupported = "1.32.0";

/// <summary>
/// First Weaviate server version that applies a server-side default for
/// <c>vectorIndexType</c> when the client omits it. On this version and later,
/// the C# client must leave an unset <c>VectorIndexType</c> empty rather than
/// injecting <c>"hnsw"</c>.
/// </summary>
public const string DefaultVectorIndexTypeServerSide = "1.37.5";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using Weaviate.Client.Models;
using Weaviate.Client.Tests.Common;

namespace Weaviate.Client.Tests.Integration;

/// <summary>
/// End-to-end coverage for default vector index behavior across server versions.
/// Assertions rely on the connected server version reported by the test client.
/// </summary>
[Collection("DefaultVectorIndexTypeIntegrationTests")]
public sealed class DefaultVectorIndexTypeIntegrationTests : IntegrationTests
{
private const string DefaultVectorIndexEnvVar = "DEFAULT_VECTOR_INDEX";
private const string DefaultVectorIndexFallback = "hfresh";
private static readonly Version ServerDefaultCutoff = Version.Parse(
ServerVersions.DefaultVectorIndexTypeServerSide
);

private string ExpectedDefaultIndexType()
{
Assert.NotNull(_weaviate.WeaviateVersion);

var defaultVectorIndex = Environment.GetEnvironmentVariable(DefaultVectorIndexEnvVar);
if (string.IsNullOrWhiteSpace(defaultVectorIndex))
{
defaultVectorIndex = DefaultVectorIndexFallback;
}

return _weaviate.WeaviateVersion! >= ServerDefaultCutoff
? defaultVectorIndex
: VectorIndex.HNSW.TypeValue;
}

/// <summary>
/// Scenario A on the named-vector path: user omits <c>VectorIndexType</c>
/// when configuring a named vector.
/// <list type="bullet">
/// <item>1.37.5+: server applies <c>DEFAULT_VECTOR_INDEX</c> from the
/// host env var (default <see cref="DefaultVectorIndexFallback"/>).</item>
/// <item>Older: client injects <c>"hnsw"</c> and server stores it.</item>
/// </list>
/// </summary>
[Fact]
public async Task NamedVector_NoIndexType_GetsServerOrInjectedDefault()
{
var create = new CollectionCreateParams
{
Name = MakeUniqueCollectionName(
nameof(NamedVector_NoIndexType_GetsServerOrInjectedDefault)
),
Properties = [Property.Text("title")],
VectorConfig = Configure.Vector("default", v => v.SelfProvided(), index: null),
};

var collection = await CollectionFactory<object>(create);
var config = await collection.Config.Get(TestContext.Current.CancellationToken);
Assert.NotNull(config.VectorConfig);
Assert.True(config.VectorConfig.ContainsKey("default"));
Assert.Equal(ExpectedDefaultIndexType(), config.VectorConfig["default"].VectorIndexType);
}

/// <summary>
/// Scenario B on the named-vector path: user explicitly configures
/// <c>VectorIndex.Flat</c>. Must round-trip as <c>"flat"</c> on every
/// server version — the inject helper must never overwrite an explicit
/// value.
/// </summary>
[Fact]
public async Task NamedVector_ExplicitFlat_IsPreserved()
{
var create = new CollectionCreateParams
{
Name = MakeUniqueCollectionName(nameof(NamedVector_ExplicitFlat_IsPreserved)),
Properties = [Property.Text("title")],
VectorConfig = Configure.Vector(
"default",
v => v.SelfProvided(),
index: new VectorIndex.Flat()
),
};

var collection = await CollectionFactory<object>(create);
var config = await collection.Config.Get(TestContext.Current.CancellationToken);
Assert.NotNull(config.VectorConfig);
Assert.True(config.VectorConfig.ContainsKey("default"));
Assert.Equal(VectorIndex.Flat.TypeValue, config.VectorConfig["default"].VectorIndexType);
}
}
10 changes: 6 additions & 4 deletions src/Weaviate.Client.Tests/Integration/TestCollections.cs
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ public async Task Test_Collections_Export()
name: "MyOwnSuffix",
description: "My own description too",
properties: [Property.Text("Name")],
vectorConfig: Configure.Vector(v => v.SelfProvided())
vectorConfig: Configure.Vector(v => v.SelfProvided(), index: new VectorIndex.HNSW())
);

var export = await _weaviate.Collections.Export(
Expand Down Expand Up @@ -327,7 +327,8 @@ public async Task Test_Collections_Export_NonDefaultValues_Sharding()
collectionNamePartSeparator: "",
vectorConfig: Configure.Vector(
"nondefault",
v => v.Text2VecTransformers(vectorizeCollectionName: false)
v => v.Text2VecTransformers(vectorizeCollectionName: false),
index: new VectorIndex.HNSW()
),
invertedIndexConfig: new()
{
Expand Down Expand Up @@ -485,7 +486,8 @@ public async Task Test_Collections_Export_NonDefaultValues_MultiTenacy()
collectionNamePartSeparator: "",
vectorConfig: Configure.Vector(
"nondefault",
v => v.Text2VecTransformers(vectorizeCollectionName: false)
v => v.Text2VecTransformers(vectorizeCollectionName: false),
index: new VectorIndex.HNSW()
),
multiTenancyConfig: new()
{
Expand Down Expand Up @@ -736,7 +738,7 @@ public async Task Test_Collection_Config_Update()
// Arrange
var collection = await CollectionFactory(
name: "TestCollectionUpdate",
vectorConfig: Configure.Vector(t => t.SelfProvided()),
vectorConfig: Configure.Vector(t => t.SelfProvided(), index: new VectorIndex.HNSW()),
properties: [Property.Text("name"), Property.Int("age")],
multiTenancyConfig: new()
{
Expand Down
2 changes: 1 addition & 1 deletion src/Weaviate.Client.Tests/Integration/TestMultiVector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public async Task Test_Should_Get_Config_Of_Created_Collection()
name: "TestMultiVectorCollectionConfig",
vectorConfig: new[]
{
Configure.Vector("regular", v => v.SelfProvided()),
Configure.Vector("regular", v => v.SelfProvided(), index: new VectorIndex.HNSW()),
Configure.MultiVector("colbert", v => v.SelfProvided()),
}
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ public async Task ServerSideBatch_InsertManyWithOptions_Success()
/// <summary>
/// Tests that InsertManyAsync returns proper UUIDs in handles
/// </summary>
[Fact(Timeout = 10000)]
[Fact(Timeout = 30000)]
public async Task ServerSideBatch_TaskHandleUuid_MatchesInserted()
{
// Arrange
Expand Down
Loading
Loading