Changelog
View SourceAll notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.7.4] - 2025-12-30
Added
- CI testing against Weaviate versions 1.31.x through 1.35.x (9 total versions)
- Code coverage reporting via Codecov with excoveralls
- Coverage badge in README
- Supported Weaviate versions table in README
Multi-Target Reference Improvements
WeaviateEx.Types.Beaconmodule for parsing and building beacon URLsBeacon.parse/1- Extract collection and UUID from beacon URLsBeacon.build/2- Build beacon URLs from UUID and optional collectionBeacon.to_map/2- Create beacon maps for API requestsBeacon.extract_uuid/1,Beacon.extract_collection/1- Extract componentsBeacon.valid?/1- Validate beacon URL format
References.add/5,delete/5now acceptReferenceToMultistruct directlyReferences.replace/5now accepts list ofReferenceToMultistructsReference.from_beacon/1andReference.from_map/1now extract target collection from beacon- Improved multi-target reference support in all reference operations
gRPC Reranking
- gRPC-based reranking for search queries via
Query.rerank/2 Rerank.to_grpc/1for converting rerank config to gRPC Rerank message- Rerank score parsing in gRPC result metadata (
rerankScore) - Full support with near_text, near_vector, near_object, hybrid, and bm25 queries
- Works with all reranker modules: Cohere, Transformers, VoyageAI, JinaAI, NVIDIA, ContextualAI
Aggregate Variants (Near Object, Hybrid, Near Image)
Aggregate.with_near_object/4for similarity-based aggregation by reference object UUID- Supports
:distanceand:certaintythreshold parameters - Full property metrics support (numeric, text, boolean)
- Supports
Aggregate.with_hybrid/4for hybrid (keyword + vector) search aggregation:alphaparameter to control keyword/vector weighting (0.0-1.0, default 0.5):fusion_typeoption (:ranked,:relative_score)- Full property metrics support
Aggregate.with_near_image/4for image similarity aggregation- Supports
:distance,:certainty, and:target_vectorsparameters - For multi-modal collections with image vectorizers
- Supports
WeaviateEx.Aggregate.Metricshelper module for cleaner metric specificationsMetrics.count/0- Meta count metricMetrics.text/2- Text property metrics (top_occurrences, count)Metrics.number/2- Numeric property metrics (sum, mean, median, mode, min, max)Metrics.integer/2- Integer property metrics (same as number)Metrics.boolean/2- Boolean property metrics (percentage, totals)Metrics.date/2- Date property metrics (min, max, median, mode)
Fluent Tenant-Scoped API
WeaviateEx.TenantCollectionfor fluent tenant-scoped operationsCollections.with_tenant/3returns tenant-scoped collection referenceTenantCollection.insert/3,insert_many/3,get/3,update/4,delete/3TenantCollection.query/1returns tenant-scoped query builderTenantCollection.batch/2starts tenant-scoped batch contextQuery.with_tenant/2for explicit tenant scoping (alias forQuery.tenant/2)
Multi-Modal Search Convenience Methods
Query.with_near_image/3for image similarity search with automatic input handlingQuery.with_near_audio/3for audio similarity searchQuery.with_near_video/3for video similarity searchQuery.with_near_thermal/3for thermal image searchQuery.with_near_depth/3for depth map searchQuery.with_near_imu/3for IMU data searchQuery.with_near_media/4for generic multi-modal search with type parameterWeaviateEx.Types.MediaInputfor flexible media input handling (file paths, base64, raw binary)WeaviateEx.Types.MediaTypefor media type validation
Object TTL Enhancements
ObjectTTL.from_duration/1- Human-readable TTL configuration (e.g.,from_duration(hours: 24))Collections.update_ttl/3- Convenience function for updating TTL on existing collections- Extended README documentation with comprehensive Object TTL examples
WCS Compatibility (Weaviate Cloud Service)
- Automatic
X-Weaviate-Cluster-URLheader for WCS connections- Required for Weaviate embedding service integration
- Auto-added by
Connect.to_weaviate_cloud/1
- Proper gRPC host parsing for
.weaviate.networkclusters- Uses
{ident}.grpc.{domain}pattern (e.g.,my-cluster.grpc.weaviate.network) - Other WCS domains use
grpc-{host}pattern
- Uses
WeaviateEx.Error.VersionErrorexception for clear version mismatch errors- Includes workaround instructions for
skip_init_checks: true
- Includes workaround instructions for
- Server version compatibility check on connect (requires 1.27.0+)
- gRPC availability check on connect
skip_init_checksoption inConnect.to_weaviate_cloud/1to bypass validation- Extended README documentation with WCS connection examples
Developer Tooling
- Benchmark suite with Benchee (
mix weaviate.bench) - Batch and query performance benchmarks in
bench/ - Pre-commit hooks configuration (
.pre-commit-config.yaml) - Profiling guide (
guides/profiling.md) Mix.Tasks.Weaviate.Benchtask for running benchmarks
gRPC Generative Search (RAG)
gRPC Generative Module (
WeaviateEx.GRPC.Generative):build/1- Build GenerativeSearch message from simple configbuild_with_provider/1- Build with provider-specific configurationparse_generative_result/1- Parse grouped results from gRPC replyextract_single_results/1- Extract per-object generations from results- Support for all major providers: OpenAI, Anthropic, Cohere, Mistral, Ollama, Google, AWS, Databricks, FriendliAI, NVIDIA, XAI, ContextualAI, Anyscale
- Provider-specific parameters: model, temperature, max_tokens, top_p, top_k, etc.
- OpenAI reasoning model support (verbosity, reasoning_effort for o1/o3)
gRPC Search with Generative (
WeaviateEx.GRPC.Services.Search):- New
generativeoption for all search request builders - Single prompt generation via
single_promptconfig - Grouped task generation via
grouped_taskandgrouped_properties - Works with near_text, near_vector, hybrid, bm25 searches
- ~2-3x lower latency compared to GraphQL generative
- New
GenerativeResult Enhancements (
WeaviateEx.Query.GenerativeResult):from_grpc_response/1- Parse gRPC SearchReply into typed result- Extended struct with
:metadatafield for usage/debug info - Proper parsing of grouped and per-object generative results
- Vector parsing from gRPC binary format
HTTP Transport-Level Retry
- HTTP Retry Module (
WeaviateEx.Protocol.HTTP.Retry):with_retry/2- Execute function with automatic retry on transient errorsretryable_status_code?/1- Check if HTTP status code is retryableretryable_status_codes/0- Get list of retryable status codesdefault_retry_opts/0- Get default retry options- Retryable status codes: 408, 429, 500, 502, 503, 504
- Exponential backoff with jitter (±10%)
- Configurable:
max_retries(default: 3),base_delay_ms(default: 100),max_delay_ms(default: 5000)
Per-Operation Timeout Support
- HTTP Timeout Module (
WeaviateEx.Protocol.HTTP.Timeout):for_operation/2- Get timeout for specific operation typebatch_multiplier/0- Get batch timeout multiplier (10×)operation_category/1- Categorize operation for timeout selection- Operation types:
:query,:insert,:batch,:init - Batch operations automatically use extended timeout (insert × 10)
HTTP Client Enhancements
- HTTP client now retries on transient HTTP status codes (503, 429, etc.)
- Automatic batch timeout detection for
/batchendpoints - Support for
operationoption to specify operation type - Support for
retryconfig in client options - Merged retry options from client config and per-request options
Batch Safety Features
Batch Config Module (
WeaviateEx.Batch.Config):- Centralized configuration for batch safety options
new/1- Create config with custom optionsauto_retry_enabled?/1- Check if auto-retry is enabledmerge/2- Merge two configurationsto_keyword/1- Convert config to keyword list- Defaults:
max_stored_results: 100_000,auto_retry: true,max_retries: 3,retry_delay_ms: 1000
Retry Queue Module (
WeaviateEx.Batch.RetryQueue):- GenServer for automatic re-queuing of failed batch objects
enqueue_failed/2- Add failed objects to retry queuedrain/1- Get all queued objects for manual processingget_retry_count/2- Get retry count for specific UUIDclear/1- Clear queue and reset retry countscalculate_backoff/2- Exponential backoff calculationretryable_error?/1- Check if error is retryable- Supports permanent failure callback for objects exceeding max_retries
- Jitter (±20%) for backoff to prevent thundering herd
Dynamic Batch Auto-Retry (
WeaviateEx.Batch.Dynamic):- New options:
:auto_retry,:max_retries,:retry_delay_ms,:on_permanent_failure - Automatically re-queues failed objects with retryable errors
- Integrates with
RetryQueuefor retry tracking - Retryable errors: rate limits, UNAVAILABLE, RESOURCE_EXHAUSTED, ABORTED, DEADLINE_EXCEEDED
- New options:
Journey Tests (Phoenix/Plug Integration)
- Journey Test Scenarios (
WeaviateEx.Journey.Scenarios):simple/1- Create collection, insert 100 objects, query, and cleanupbatch_insert_and_search/1- Batch insert 1000 objects and perform vector searchconcurrent_operations/1- Handle 10 concurrent operations without errors
- Phoenix Integration Tests (
test/journey/phoenix_test.exs):- Client initialized at startup survives multiple requests
- Concurrent requests share client safely
- Client properly cleaned up on shutdown
- Full journey scenarios executed through Phoenix endpoints
- Plug Integration Tests (
test/journey/plug_test.exs):- Client accessible via Application env
- Journey scenarios work through Plug router
- Concurrent Plug requests share client safely
- Test Configuration:
- Journey tests excluded by default (run with
--include journey) - Added
:journeytag to ExUnit exclusions
- Journey tests excluded by default (run with
Property Value Serialization
Serializable Protocol (
WeaviateEx.Types.Serializable):- Protocol for serializing Elixir types to Weaviate-compatible values
- Automatic serialization when creating/updating objects
- Implementations for:
DateTime,NaiveDateTime,Date,GeoCoordinate,PhoneNumber,Blob - Extensible - implement protocol for custom types
Date Type Serialization:
Datestructs serialize to ISO8601 at midnight UTC (e.g.,~D[2024-01-01]→"2024-01-01T00:00:00Z")
Blob Struct (
WeaviateEx.Types.Blob):- New struct for wrapping binary data:
Blob.new(binary_data) Blob.from_file/1/Blob.from_file!/1- Create from fileBlob.to_base64/1- Convert to base64 stringBlob.from_base64/1- Create from base64 string- Automatic base64 encoding when used in object properties
- New struct for wrapping binary data:
Deserialize Module (
WeaviateEx.Types.Deserialize):deserialize/2- Parse Weaviate response values with type hintsdeserialize!/2- Same but raises on errordeserialize_properties/2- Deserialize map with schema hintsauto_deserialize/1- Auto-detect types based on value structure- Supported types:
:date,:geo_coordinates,:phone_number,:blob,:auto
Changed
- Default local test Weaviate version updated to 1.35.0
- Unit tests now generate coverage reports uploaded to Codecov
WeaviateEx.Objects.Payloadnow usesSerializableprotocol internally for type serialization- Payload documentation updated to reflect all supported serialization types
[0.7.3] - 2025-12-29
Added
Transport & Auth
- WCS gRPC Host Parsing:
.weaviate.networkclusters now useident.grpc.<domain>(matches Python client) - Proxy + Pool Wiring: client
connection/proxyoptions are applied to Finch pools and gRPC channels - OIDC Client Auth:
Client.connect/1acceptsWeaviateEx.Authconfigs and auto-refreshes tokens - Skip Init Checks: new
:skip_init_checksoption to bypass meta/version/gRPC health checks - gRPC Header Forwarding:
additional_headersare included in gRPC metadata by default
Batch Operations
- Wait for Vector Indexing (
WeaviateEx.Batch.VectorIndexing):wait_for_indexing/3- Wait for all vectors to be indexed after batch operationswait_for_shards/3- Wait for specific shards to have vectors indexedshard_ready?/3- Check if a specific shard is ready for queriesget_queue_status/2- Get vector queue status for all shardstotal_pending_vectors/2- Get total pending vector countall_indexed?/2- Check if all vectors are indexed- Options:
:timeout,:poll_interval,:how_many_failures,:tenant - Exposed via
WeaviateEx.API.Batch.wait_for_vector_indexing/3
- All-Fail Batch Errors (
WeaviateEx.API.Batch,WeaviateEx.Batch):- Returns
:batch_all_failederror when every object in a batch fails
- Returns
- gRPC Stream Backoff Handling (
WeaviateEx.Batch.Stream):- Applies server backoff by updating the stream buffer size
RBAC Enhancements
User Assignments with Type (
WeaviateEx.API.RBAC):get_user_assignments/3- Get users assigned to role with type infoUserAssignmentstruct withuser_idanduser_typefields- Supports
:db_user,:db_env_user,:oidcuser types
Group Assignments with Type (
WeaviateEx.API.RBAC):get_group_assignments/3- Get groups assigned to role with type infoGroupAssignmentstruct withgroup_idandgroup_typefields
Nodes Permission Collection Filter (
WeaviateEx.RBAC.Permissions):nodes/2now supports:collectionoption for verbose mode- Example:
Permissions.nodes(:verbose, collection: "Article")
Collections/Schema
- Reconfigure Module (
WeaviateEx.Reconfigure):inverted_index/1- Build inverted index update config (BM25, cleanup, stopwords)replication/1- Build replication update config (factor, async, deletion strategy)vector_index_hnsw/1- Build HNSW index update config (ef, max_connections, etc.)named_vectors_update/2- Build named vector update configmulti_tenancy/1- Build multi-tenancy update configdescription/1- Build description updatemerge/1- Combine multiple update configs
- Property Range Filters (
WeaviateEx.Property):index_range_filtersoption maps toindexRangeFilterson schema properties
- Config Struct Serialization (
WeaviateEx.Collections,WeaviateEx.API.Collections):- Auto-serializes
ObjectTTL,AutoTenant, andMultiTenancyConfigin create/update payloads
- Auto-serializes
- Collection Handle Defaults (
WeaviateEx.Collection):new/3,with_tenant/2,with_consistency/2and data ops apply default tenant/consistency
Query Enhancements
- Multi-Vector Queries (
WeaviateEx.Query.NearVector):single/2- Single vector query with optionslist_of_vectors/2- Query with multiple vectors over single spaceper_target/2- Query with different vectors per named vector spaceweighted_targets/2- Weighted multi-target vector queryto_api/1- Convert to API format
- gRPC Search Parity (
WeaviateEx.GRPC.Services.Search):- gRPC search now includes filters, group_by, target vectors, near_image/near_media, references, and vector metadata
- gRPC parsing now returns reference properties and vector metadata when requested
Data Operations
- Fetch Objects by IDs (
WeaviateEx.API.Data):fetch_objects_by_ids/4helper with input order preserved
- Fetch Objects by IDs (
WeaviateEx.Objects):fetch_objects_by_ids/3convenience wrapper using global config
- Payload Validation (
WeaviateEx.Objects.Payload):- Client-side checks for required
propertiesand reserved names (id,vector)
- Client-side checks for required
Generative AI
- Provider Parameter Parity (
WeaviateEx.Generative.Config,WeaviateEx.API.Generative):- Added Databricks options (
frequency_penalty,presence_penalty,log_probs,top_log_probs,n,stop) - Added FriendliAI
nparameter support
- Added Databricks options (
Aggregation
- Near Image Aggregation (
WeaviateEx.API.Aggregate):with_near_image/4- Aggregate with near_image similarity constraint- Support for
:certainty,:distance,:target_vectorsoptions
Users Management
Include Permissions Parameter (
WeaviateEx.API.Users.DB):get_roles/3now supports:include_permissionsoption- When true, returns roles with full permission details
Deactivate with Key Revocation (
WeaviateEx.API.Users.DB):deactivate/3now supports:revoke_keyoption- When true, also revokes the user's API key
Vectorizers
- Multi-Vector Encoding (
WeaviateEx.API.MultiVector.Encoding):muvera/1- Configure Muvera encoding for ColBERT-style multi-vectors- Options:
:ksim,:dprojections,:repetitions none/0- Raw multi-vectors without encoding
Tenant Statuses
- Transitional Tenant Statuses (
WeaviateEx.Types.Tenant):- Added
:offloadingstatus - Tenant is being offloaded to cold storage - Added
:onloadingstatus - Tenant is being loaded from cold storage - Full type support in
activity_statustype
- Added
Cluster API Enhancements
Shard Name Filtering (
WeaviateEx.API.Cluster):nodes/2now supports:shardoption to filter nodes by specific shard name- Combined filtering:
Cluster.nodes(client, collection: "Article", shard: "shard-0")
Delete All Replications (
WeaviateEx.API.Cluster):delete_all_replications/1- Batch delete all completed, failed, and cancelled replication records
Query Sharding State (
WeaviateEx.API.Cluster):query_sharding_state/3- Query sharding state to see which shards exist and their replica nodes:shardoption for filtering by specific shard- Returns
ShardingStatestruct with collection name and list ofShardReplicas
ShardingState Module (
WeaviateEx.Cluster.ShardingState):ShardingStatestruct for collection sharding informationShardReplicassubmodule for shard-to-node replica mappingsfrom_api/1- Parse sharding state from API response
Shard Struct Enhancements
New Shard Fields (
WeaviateEx.Cluster.Shard):nodefield - Which node hosts this shardloadedfield - Boolean indicating if shard is loaded into memory (for lazy loading scenarios)
LAZY_LOADING Status (
WeaviateEx.Cluster.Shard):- Added
:lazy_loadingto shard status enum parse_status/1andstatus_to_api/1support for"LAZY_LOADING"status
- Added
Vectorizer Enhancements
Text2VecOpenAI Vectorizer (
WeaviateEx.API.Vectorizers.Text2VecOpenAI):- Full OpenAI vectorizer configuration support
- Options:
:model,:dimensions,:type,:base_url,:vectorize_collection_name to_api/1,from_api/1for API serialization
Text2VecCohere Vectorizer (
WeaviateEx.API.Vectorizers.Text2VecCohere):- Full Cohere vectorizer configuration support
- Options:
:model,:dimensions,:truncate,:base_url,:vectorize_collection_name to_api/1,from_api/1for API serialization
New Rerankers (
WeaviateEx.API.RerankerConfig):nvidia/2- NVIDIA NIM reranker configurationcontextualai/2- ContextualAI reranker configuration
Query Enhancements
- Hybrid Search Improvements (
WeaviateEx.Query)::max_vector_distanceoption for filtering results by vector distance threshold:bm25_operatoroption for customizing BM25 matching behavior (AND/OR)BM25Operatorstruct for configuring operator and minimum match count
Data Operations
Fetch Objects by IDs (
WeaviateEx.API.Data):fetch_objects_by_ids/4- Efficiently fetch multiple objects by their IDs- Uses GraphQL
ContainsAnyfilter for optimal performance - Supports
:return_propertiesand:tenantoptions
Iterator References (
WeaviateEx.Iterator)::return_referencesoption for including cross-references in iteration- Support for simple references and references with specific properties
- Automatic class name inference from reference names
Insert Many Convenience (
WeaviateEx.Collections):insert_many/3- Batch insert objects with automatic formatting- Supports both raw property maps and structured objects
- Automatic ID, vector, and tenant handling
Multi-Tenancy Enhancements
- AutoTenant Configuration (
WeaviateEx.Config.AutoTenant):enable/1- Enable automatic tenant creation:auto_delete_timeoutoption for automatic cleanup of empty tenantsdisable/0,to_map/1,from_map/1for full lifecycle management
RBAC Enhancements
- Role Scope Parameter (
WeaviateEx.RBAC.Permissions)::scopeoption inroles/3for permission scope control- Supports
:match(exact) and:all(wildcard) scopes
Property Enhancements
- Multi-Target References (
WeaviateEx.Property):reference/3now accepts a list of target collectionsmulti_reference/3alias for explicit multi-target references- Example:
Property.reference("hasContent", ["Article", "BlogPost"])
Integration Enhancements
- Rate Limit Headers (
WeaviateEx.Integrations):- OpenAI:
:requests_per_minute_embeddings,:tokens_per_minute_embeddings - Cohere:
:requests_per_minute_embeddings - Custom
:base_urlsupport for both providers
- OpenAI:
Auth Enhancements
- OIDC Grant Type Validation (
WeaviateEx.Auth.TokenManager):- Validation of OIDC grant types on startup
- Supported types:
:oidc_client_credentials,:oidc_password - Clear error messages for invalid or missing auth configuration
Fixed
Debug
- REST Debug Options (
WeaviateEx.Debug): addnode_nameandconsistency_levelquery params for object fetches - gRPC Debug Filters (
WeaviateEx.Debug,WeaviateEx.GRPC.Services.Search): accept filter path aliases so ID filters apply correctly
Changed
- Updated
@valid_statusesinTenantto include transitional statuses - Improved alias ordering in multiple modules for consistency
Query.execute/3now falls back to GraphQL when a query uses options not supported by gRPC (rerank, sorting, cursor pagination, hybrid vectors)
Stats
- 2612 tests passing (138 new tests added)
- Full Python client parity for gap closure features
- Zero warnings, errors, dialyzer issues, or credo violations
[0.7.2] - 2025-12-29
Added
Multi-Tenancy Enhancements
Fluent TenantClient API (
WeaviateEx.TenantClient):with_tenant/2- Create tenant-scoped client wrappercollection/2- Set collection for subsequent operationsinsert/3,get/3,update/4,replace/4,delete/3- CRUD operationsquery/2,near_vector/3,near_text/3,hybrid/3,bm25/3- Search operationsbatch_insert/3,batch_delete/3- Batch operationscount/2,exists?/2- Utility operations- Automatic tenant injection into all operations
Batch Tenant Updates (
WeaviateEx.API.Tenants):batch_update/3- Update tenants in batches of 100 (matching Python client)batch_size/0- Returns configured batch size
Tenant Struct (
WeaviateEx.Types.Tenant):- Full typed activity status support:
:active,:inactive,:hot,:cold,:frozen,:offloaded new/2,to_map/1,from_map/1- Construction and serializationset_status/2,active?/1,inactive?/1- Status managementvalid_status?/1,valid_statuses/0- Validation helpers
- Full typed activity status support:
Backup/Restore Enhancements
Backup List Sorting (
WeaviateEx.API.Backup):sort_by_starting_time_ascoption inlist/3for chronological ordering
Cancel with Dynamic Location (
WeaviateEx.API.Backup)::locationoption incancel/4for dynamic backup location configuration
BackupInfo Metadata (
WeaviateEx.Backup.Status.BackupInfo):started_at- When the backup started (DateTime)completed_at- When the backup completed (DateTime)size_bytes- Total backup size in byteserror- Error message if backup failed
Auth/Connection Improvements
WCS Header Auto-Detection (
WeaviateEx.Client.Config):is_wcs_host?/1- Detect Weaviate Cloud Services instancesmaybe_add_wcs_headers/1- Add WCS-specific headers automaticallynew_with_wcs_detection/1- Create config with automatic WCS detection- Detects known WCS domains: weaviate.network, wcs.api.weaviate.io, semi.network, weaviate.cloud
Server Version Compatibility (
WeaviateEx.Version):check_compatibility/1- Validate server version from meta responsesupports_grpc?/1- Check if version supports gRPC (1.23.0+)grpc_minimum_version/0- Get minimum gRPC version
OIDC Scope Parsing (
WeaviateEx.Auth.OIDC):parse_scopes/1- Parse scope strings (space or comma separated)
Microsoft Password Flow Validation (
WeaviateEx.Auth.Azure):validate_password_flow/1- Validate ROPC flow requirementspassword_flow_configured?/1- Check if password flow is enabled
Schema/Collections Updates
Multi-Tenancy Configuration (
WeaviateEx.Schema.MultiTenancyConfig):auto_tenant_creation- Automatically create tenants on first insertauto_tenant_activation- Automatically activate tenants when accessedenabled/0,disabled/0- Convenience constructorswith_auto_creation/0,with_auto_activation/0,fully_automatic/0- Preset configurations
Custom Vectorizer Support (
WeaviateEx.API.VectorConfig):custom/2- Configure custom/unlisted vectorizer moduleswith_custom_vectorizer/3- Add custom vectorizer to collection config
Search/Query Enhancements
Aggregate near_object (
WeaviateEx.API.Aggregate):with_near_object/4- Aggregate with near_object similarity constraint
Aggregate hybrid (
WeaviateEx.API.Aggregate):with_hybrid/4- Aggregate with hybrid search constraint:alphaoption for vector/keyword balance:fusion_typeoption for fusion strategy (:rankedor:relative_score)
Data Types/Objects Improvements
Multi-Target References (
WeaviateEx.Types.Reference):to/3- Create reference with optional target vectorsmulti_target/3- Create multi-target reference for named vectorsfrom_beacon/1,to_map/1,from_map/1- Serializationextract_id/1,extract_collection/1- Extraction utilities
Property Validation (
WeaviateEx.Validation.Property):validate/2- Validate property value against data typevalidate_object/2- Validate entire object against schema- Supports all Weaviate data types including arrays
Multi-Dimensional Vectors (
WeaviateEx.Types.Vector):validate/1- Validate 1D or 2D vectors (ColBERT support)shape/1- Get vector dimensionsone_dimensional?/1,multi_dimensional?/1- Type checksdimensionality/1- Get inner dimensionnormalize/1,dot_product/2,cosine_similarity/2- Vector operations
HTTP Enhancements
- Rate Limit Header Tracking (
WeaviateEx.Protocol.HTTP.RateLimit):from_headers/1- Extract rate limit info from response headersshould_wait?/1- Check if client should waitremaining_percent/1- Get remaining request percentagenear_limit?/2- Check if close to rate limitseconds_until_reset/1- Get seconds until resetsummary/1- Human-readable status
HTTP Transport-Level Retry
- HTTP Retry Module (
WeaviateEx.Protocol.HTTP.Retry):with_retry/2- Execute function with automatic retry on transport errorscalculate_backoff/1- Exponential backoff calculation (capped at 32 seconds)retryable_transport_error?/1- Check if error is retryable transport error- Retryable errors: connection refused, connection reset, transport timeout, closed, nxdomain
- Configurable
max_retries(default: 3) andbase_delay_ms(default: 500) - HTTP client now automatically retries on transient transport failures
Per-Operation Timeouts
- HTTP Client Timeout Integration:
- Uses
WeaviateEx.Config.Timeoutmodule for operation-specific timeouts - GET/HEAD requests use
querytimeout (30s default) - POST/PUT/PATCH/DELETE use
inserttimeout (90s default) - GraphQL queries (POST to /v1/graphql) use
querytimeout - Added
pool_timeout(5s default) for connection pool - Added
timeout_configfield toWeaviateEx.Client.Config
- Uses
Batch Memory Safety
- MAX_STORED_RESULTS Limit (
WeaviateEx.Batch.ErrorTracking.Results):- Added 100,000 result limit to prevent memory exhaustion
- Rolling window eviction removes oldest entries when limit reached
max_stored_results/0- Get the configured limitresults_within_limit?/1- Check if results are within limit
Property Value Serialization
- Payload Serialization (
WeaviateEx.Objects.Payload):DateTimevalues automatically serialized to RFC3339 format (ISO8601)NaiveDateTimevalues serialized to RFC3339 format (without timezone)GeoCoordinatestructs serialized to%{"latitude" => lat, "longitude" => lon}PhoneNumberstructs serialized to%{"input" => number, "defaultCountry" => country}- Recursive serialization for nested objects and arrays
- Structs preserved through key normalization for proper serialization
UUID Utilities
- Beacon URL Extraction (
WeaviateEx.Types.UUID):extract_from_beacon/1- Extract UUID from Weaviate beacon URLs- Supports simple format:
weaviate://localhost/<uuid> - Supports collection-prefixed format:
weaviate://localhost/<collection>/<uuid> - Automatic UUID validation and lowercase normalization
Changed
- Enhanced tenant activity status to include all types (active, inactive, hot, cold, frozen, offloaded)
- Backup list now supports optional sorting parameter
[0.7.1] - 2025-12-29
Added
Custom Headers Support
- Additional Headers Configuration (
WeaviateEx.Client.Config):additional_headersoption for custom HTTP headers (e.g.,X-OpenAI-Api-Key,X-Cohere-Api-Key)- Applied to all HTTP requests via Finch
- Applied as gRPC metadata with lowercased keys
- Validation prevents nil header values
Named Vectors in Data Operations
- Named Vectors Support (
WeaviateEx.Objects.Payload):vectorsparameter for multiple named vectors (e.g.,%{"title_vector" => [0.1, 0.2]})- Mutual exclusivity validation between
vector(single) andvectors(named) - Supported in
insert/4,update/4, andreplace/4operations
References During Insert
- Inline References (
WeaviateEx.Objects.Payload):referencesparameter in Data.insert/4 for inline reference creation- Single UUID:
%{"hasAuthor" => "uuid-123"} - Multiple UUIDs:
%{"hasAuthors" => ["uuid-1", "uuid-2"]} - Multi-target:
%{"relatedTo" => %{target_collection: "Category", uuids: "cat-uuid"}} - Automatic beacon format conversion and properties merge
gRPC Exponential Backoff Retry
- Retry Module (
WeaviateEx.GRPC.Retry):with_retry/2- Execute function with automatic retry on transient errorscalculate_backoff/1- Calculate exponential backoff (capped at 32 seconds)retryable?/1- Check if error is retryableretryable_status?/1- Check if gRPC status code is retryable- Retryable status codes: UNAVAILABLE (14), RESOURCE_EXHAUSTED (8), ABORTED (10), DEADLINE_EXCEEDED (4)
- Configurable
max_retries(default: 4) andbase_delay_ms(default: 1000)
Changed
- gRPC services now automatically retry on transient failures:
WeaviateEx.GRPC.Services.Search- All search operationsWeaviateEx.GRPC.Services.Batch- Batch insert, references, deleteWeaviateEx.GRPC.Services.Aggregate- Aggregation queriesWeaviateEx.GRPC.Services.Tenants- Tenant operationsWeaviateEx.GRPC.Services.Health- Health checks (with reduced retry count)
[0.7.0] - 2025-12-29
Added
Multimodal Search Support
- NearImage Search (
WeaviateEx.Query.NearImage) - Image-based vector search for multimodal collections:new/1- Create near_image search with base64 data or file path- Supports
multi2vec-clip,multi2vec-bind, and other image vectorizers - Options:
:image,:image_file,:certainty,:distance,:target_vectors encode_image_file/1- Base64 encode image filesto_grpc/1,to_graphql/1- Protocol conversion utilities
- NearMedia Search (
WeaviateEx.Query.NearMedia) - Media-based vector search for multimodal collections:new/2- Create near_media search with type and media data- Supports 5 media types:
:audio,:video,:thermal,:depth,:imu - Options:
:media,:media_file,:certainty,:distance,:target_vectors media_types/0- List all supported media typesto_grpc/1,to_graphql/1- Protocol conversion utilities
- Query Builder Integration:
Query.near_image/2- Add image-based search to queryQuery.near_media/3- Add media-based search to query- Full GraphQL and gRPC support for multimodal queries
gRPC Health Checking
- gRPC Health Ping (
WeaviateEx.GRPC.Services.Health):ping/2- Lightweight connectivity check returning:okor{:error, reason}- Quick connection verification for startup and heartbeat checks
- Returns
{:error, :no_channel}for nil channels
Server Version Detection
- Version Module (
WeaviateEx.Version) - Parse and validate Weaviate server versions:parse/1- Parse version strings (handles "v" prefix, prereleases, build metadata)meets_minimum?/2- Check if version meets minimum requirementget_server_version/1- Extract version from meta endpoint responsevalidate_server/1- Validate against minimum supported version (1.27.0)minimum_version/0,minimum_version_string/0- Get minimum version infoformat_version/1- Format version tuple to string
Kubernetes Health Endpoints
- K8s Probe Support (
WeaviateEx.Health):alive?/0,alive?/1- Liveness probe via/.well-known/liveendpointready?/0,ready?/1- Readiness probe via/.well-known/readyendpoint- Client and no-client variants for flexibility
- Returns
{:ok, true}or{:ok, false}for consistent handling
Background Batch Processing (Phase 2)
- Background Batcher (
WeaviateEx.Batch.Background) - Process-based async batching:start_link/1- Start background batcher with configurationadd_object/3- Queue object for background processingadd_reference/5- Queue reference with UUID trackingflush/1- Trigger immediate flushget_results/1- Get accumulated resultsstop/2- Stop with optional final flush- Automatic flushing based on batch size or time interval
- Concurrent request management with configurable limits
- UUID tracking for reference ordering
- Error tracking and callback support
- Batch Module Integration:
Batch.background/3- Convenience function to start background batcher
Named Vector Query Integration (Phase 2)
- TargetVectors Enhancements (
WeaviateEx.Query.TargetVectors):combine/2- Create combined target vectors with method (:sum,:average,:minimum)weighted/1- Create manually weighted target vectorsnormalize/1- Normalize various input formats to Config structto_grpc/1- Convert to gRPC formatConfigstruct for structured target vector configuration
- Query Builder Integration:
Query.near_vector/3now accepts:target_vectorsoptionQuery.near_text/3now accepts:target_vectorsoptionQuery.near_object/3now accepts:target_vectorsoption
Advanced Hybrid Search (Phase 2)
- HybridVector Enhancements (
WeaviateEx.Query.HybridVector):near_text/2- Text-based vector search with Move operationsnear_vector/2- Vector-based search with target vectorsto_grpc/1- Convert to gRPC format for query execution- Support for
:move_to,:move_away_from,:target_vectorsoptions queryfield for better naming consistency
- Query.hybrid/3 Enhancements:
:vectoroption accepts HybridVector configuration:propertiesoption for BM25 component:target_vectorsoption for multi-vector collections
Connection Pool Configuration (Phase 2)
- Connection Config (
WeaviateEx.Config.Connection) - Fine-tune connection settings:new/1- Create pool config with size, max connections, timeoutsto_finch_opts/1- Convert to Finch HTTP client optionsto_grpc_opts/1- Convert to gRPC channel options- Options:
:pool_size,:max_connections,:pool_timeout,:max_idle_time
Azure OIDC Support (Phase 2)
- Azure Authentication (
WeaviateEx.Auth.Azure) - Azure-specific OIDC handling:azure_endpoint?/1- Detect Azure/Microsoft token endpointsdefault_scopes/1- Generate Azure-style.defaultscopesapply_azure_defaults/1- Auto-configure Azure authenticationdetect_version/1- Detect Azure v1/v2 endpoint versionbuild_token_params/2- Build Azure-specific token parameters
Dynamic gRPC Message Size (Phase 2)
- Version Module (
WeaviateEx.Version):get_grpc_max_message_size/1- Extract gRPC max message size from server meta
Filter Enhancements (Phase 4)
Property Length Filtering (
WeaviateEx.Filter):by_property_length/3- Filter by string or array lengthlen/1- Create length path helper (e.g.,len("title"))- Operators:
:equal,:not_equal,:greater_than,:greater_or_equal,:less_than,:less_or_equal - Use for filtering empty strings, minimum content length, array element counts
Reference Path Traversal (
WeaviateEx.Filter.RefPath):through/2,through/3- Build multi-level reference pathsproperty/4- Terminate path with property filterbuild_path/2- Build path list from segmentsto_path/1- Get path without final propertydepth/1- Get number of hops in reference path- Enables deep filtering:
RefPath.through("hasAuthor", "Author") |> RefPath.through("worksAt", "Company") |> RefPath.property("industry", :equal, "Tech")
Multi-Target Reference Filters (
WeaviateEx.Filter.MultiTargetRef):new/2- Create multi-target reference filter builderwhere/4- Add property filter on specific target collectiondeep_where/2- Deep path filtering with RefPathas_ref_path/1- Convert to RefPath for chaining- Filter different target collections:
MultiTargetRef.new("relatedTo", "Article") |> MultiTargetRef.where("title", :like, "Tech*")
Filter Module Integration:
by_ref_path/4- Create filter from RefPathby_ref_multi_target/5- Create multi-target reference filter
Query Reference Enhancements (Phase 4)
Multi-Target References (
WeaviateEx.Query.QueryReference):multi_target/3- Create query for specific target collectionmulti_target?/1- Check if reference is multi-target- Query different targets:
QueryReference.multi_target("relatedTo", "Article", return_properties: ["title"])
Return Metadata Option:
return_metadataoption for references- Accepts
:full,:common, or list of atoms (:uuid,:distance,:certainty,:creation_time, etc.) - Include metadata in referenced objects:
QueryReference.new("hasAuthor", return_metadata: [:uuid, :distance])
Named Vector Config Updates (Phase 4)
- Update Configuration (
WeaviateEx.API.NamedVectors):update_config/2- Create update config for existing named vectorupdate_to_api/1- Convert update to API formatbuild_update_config/1- Build combined update for multiple vectors- Vector index options:
:ef,:dynamic_ef_min,:dynamic_ef_max,:dynamic_ef_factor,:flat_search_cutoff - Quantizer options:
:type(:pq,:bq,:sq),:segments,:centroids,:training_limit,:rescore_limit - Example:
NamedVectors.update_config("title_vector", vector_index: [ef: 200], quantizer: [type: :pq, segments: 128])
Custom Provider Configurations (Phase 4)
Custom Generative Providers (
WeaviateEx.API.GenerativeConfig):custom/2- Create config for unlisted generative AI providers- Automatic snake_case to camelCase conversion
- Pass any options: api_endpoint, model, api_key_header, temperature, max_tokens, etc.
- Example:
GenerativeConfig.custom("my-llm", api_endpoint: "https://llm.example.com", model: "custom-gpt")
Reranker Configuration Module (
WeaviateEx.API.RerankerConfig):cohere/2- Cohere Rerank configurationtransformers/1- Local transformers rerankervoyageai/2- Voyage AI rerankerjinaai/2- Jina AI rerankercustom/2- Custom/unlisted reranker providersnone/0- Disable reranking- All providers support
:base_urloption for custom endpoints
Changed
- Updated Query struct to include
near_imageandnear_mediafields - Enhanced GraphQL query building with nearImage and nearMedia support
Test Infrastructure
Supertester Integration
- Added
supertester ~> 0.4.0as test dependency for robust, async-safe testing - Eliminated all Process.sleep calls from unit tests using supertester-style patterns:
token_manager_test.exs: Replaced 8 sleep calls with deterministic state pollingdynamic_test.exs: Replaced 1 sleep call with state-based synchronizationstate_test.exs: Replaced 1 sleep call with explicit time-wait pattern
- New Test Helpers (
WeaviateEx.TestHelpers):wait_until/2- Polls until condition is met with configurable timeout/intervalwait_for_genserver_state/3- Waits for GenServer state to match a conditiontrigger_and_wait/4- Sends message and waits for state change
- All 2151 tests pass with full async execution support
Stats
- Phase 1-4: 20+ new feature modules/functions
- Phase 4: 6 new modules (RefPath, MultiTargetRef, RerankerConfig) + major enhancements
- Full test coverage for all new features
- Backward compatible with v0.6.0
- Test suite now fully async-safe with zero timing-based synchronization
[0.6.0] - 2025-12-29
Added
Quantizer Support
- Quantizer Module (
WeaviateEx.API.Quantizer) - Typed structs for vector quantization:PQConfig- Product Quantization with segments, centroids, encoder configurationBQConfig- Binary Quantization with cache and rescore optionsSQConfig- Scalar Quantization with training limit configurationRQConfig- Rotational Quantization with configurable bit depth- Each config provides
new/1,to_api/1,from_api/1for serialization round-trips - Convenience aliases:
Quantizer.pq/1,Quantizer.bq/1,Quantizer.sq/1,Quantizer.rq/1 detect_type/1- Auto-detect quantizer type from API responsefrom_api/1- Parse any quantizer from API response
Core Vectorizer Modules
- Text2VecAWS (
WeaviateEx.API.Vectorizers.Text2VecAWS) - AWS vectorizer support:- Bedrock service with model selection (Titan, Cohere, etc.)
- SageMaker service with endpoint, target model, and variant options
new/1,to_api/1,from_api/1,vectorizer_name/0
- Text2VecGoogle (
WeaviateEx.API.Vectorizers.Text2VecGoogle) - Google vectorizer support:- Vertex AI service with project ID and region
- Gemini service (Google AI Studio) with auto-configured endpoint
- Task type, title property, and dimensions configuration
new/1,to_api/1,from_api/1,vectorizer_name/0
- Text2VecWeaviate (
WeaviateEx.API.Vectorizers.Text2VecWeaviate) - Weaviate-hosted embeddings:- Model selection for Weaviate-managed embedding service
- Base URL configuration for custom deployments
new/1,to_api/1,from_api/1,vectorizer_name/0
- Img2VecNeural (
WeaviateEx.API.Vectorizers.Img2VecNeural) - Neural image vectorizer:- Image fields configuration for multi-image objects
new/1,to_api/1,from_api/1,vectorizer_name/0
OIDC Token Management
- OIDC Module (
WeaviateEx.Auth.OIDC) - OpenID Connect support:discover/1- OIDC configuration discovery from issuer URLget_token/2- Token exchange for client_credentials and password grantsrefresh_token/2- Token refresh using refresh tokensOIDC.Configstruct for provider configurationOIDC.TokenResponsestruct with expiration helpers:expires_at/1- Calculate expiration timestampexpired?/1- Check if token is expiredexpiring_soon?/2- Check if token expires within buffer time
- TokenManager GenServer (
WeaviateEx.Auth.TokenManager) - Automatic token management:start_link/1- Start with OIDC config or issuer URLget_token/1- Get current valid tokenget_access_token/1- Get just the access token stringforce_refresh/1- Force immediate token refresh- Automatic background token refresh before expiration
- Configurable refresh buffer (default: 60 seconds before expiry)
child_spec/1- Easy integration with supervision trees
- Auth Module Extensions:
get_oidc_headers/1- Get authorization headers from TokenManageroidc_config/1- Create OIDC configuration for TokenManager
Generative Search Integration
- Query.Generate Module (
WeaviateEx.Query.Generate) - Combine search with AI generation:new/1- Create generative query for collectionnear_text/3,near_vector/3,near_object/3- Vector similarity with generationbm25/3,hybrid/3- Keyword and hybrid search with generationsingle/2- Single-object generation (generate per result)grouped/2- Grouped generation (generate once for all results)return_properties/2,where/2,limit/2,offset/2,tenant/2additional/2- Request additional metadata fieldsto_graphql/1- Convert to GraphQL query stringexecute/2- Execute query and parse resultsparse_response/2- Parse API response to GenerativeResult
- GenerativeResult Struct (
WeaviateEx.Query.GenerativeResult):objects- List of result objects with propertiesgenerated- Grouped generation resultgenerated_per_object- List of per-object generation results
- Query Module Integration:
Query.generate/4- Convert Query struct to Generate query
Nested Properties Support
- Property.Nested Module (
WeaviateEx.Property.Nested) - Nested object schema support:new/1- Create nested property with name, data_type, nested_propertiesto_api/1- Serialize to Weaviate API formatfrom_api/1- Parse from API response (supports recursive nesting)valid?/1- Validate nested property configurationobject_type?/1- Check if property is object or object_array type
- Property Module Integration:
Property.object/3- Create object property with nested propertiesProperty.object_array/3- Create object array property with nested properties
- DataType Module:
:objectand:object_arraydata types for nested structures
Batch Improvements
- Concurrent Batch Operations (
WeaviateEx.Batch.Concurrent):insert_many/4- Parallel batch insertion using Task.async_stream- Configurable:
max_concurrency,batch_size,ordered,timeout split_into_batches/2- Split objects into batchesaggregate_results/2- Combine results from parallel batchesretryable_error?/1- Detect retryable errorsResultstruct withall_successful?/1,has_failures?/1,summary/1
- Batch Queue (
WeaviateEx.Batch.Queue) - FIFO queue for failure tracking:new/0- Create empty queueenqueue/2- Add object to pending queuedequeue_batch/2- Get batch of objects for processingmark_failed/3- Move object to failed queue with reasonrequeue_failed/2- Move failed objects back to pending (respects max_retries)pending_count/1,failed_count/1,empty?/1FailedObjectstruct with retry count and failure timestamp
- Rate Limit Detection (
WeaviateEx.Batch.RateLimit):detect/1- Detect rate limiting from HTTP responserate_limited?/1- Check if error indicates rate limitingcalculate_backoff/1- Calculate exponential backoff with jitterextract_retry_after/1- Extract retry-after from headers- Provider-specific patterns: OpenAI (429), Cohere (rate limit errors)
- Server Queue Monitoring (
WeaviateEx.API.Cluster):batch_stats/1- Get cluster batch statistics (queue_length, rate_per_second, failed_count)- Aggregates stats from all nodes for dynamic batch sizing
- Dynamic Batch Sizing (
WeaviateEx.Batch.Dynamic)::monitor_server_statsoption - Enable server queue monitoring:poll_intervaloption - Configure stats polling frequencyget_server_batch_stats/1- Get current server stats from GenServer
gRPC Batch Streaming (Weaviate 1.34+)
- Batch Stream Service (
WeaviateEx.GRPC.Services.BatchStream) - Low-level gRPC streaming:open/2- Open bidirectional gRPC streamsend_objects/2- Send batch objects over streamsend_references/2- Send cross-references over streamreceive_results/2- Receive batch results with timeoutclose/1- Close stream and clean up resourcesstart_message/1,stop_message/0,data_message/2- Protocol message builders
- High-Level Batch Stream (
WeaviateEx.Batch.Stream) - Client-side buffered streaming:new/3- Create stream session with buffer configurationadd/2- Add object to buffer (auto-flush when full)flush/1- Manually flush buffer to serverclose/1- Close stream and return all results- Configurable:
buffer_size,flush_interval_ms,auto_flush,auto_reconnect - Automatic connection management and error recovery
RBAC Enhancements
- Scope Permissions (
WeaviateEx.API.RBAC.Scope) - Fine-grained access control:all_collections/0- Create scope for all collectionscollection/1- Create scope for specific collectioncollections/1- Create scope for list of collectionswith_tenants/2- Add tenant restrictions to scopewith_shards/2- Add shard restrictions to scopeto_api/1,from_api/1- API serialization
- Permission Builder (
WeaviateEx.API.RBAC.Permission) - Permission construction:new/3- Create permission with resource, action, and scoperead_collection/1,manage_data/1- Common permission shortcutsadmin/0- Full administrative permissionsviewer/0- Read-only permissionsto_api/1,from_api/1- API serialization
- Database User Management (
WeaviateEx.API.Users.DB) - DB-backed users:create/3- Create DB user (returns API key)get/3- Get DB user detailslist/2- List all DB usersdelete/3- Delete DB userrotate_api_key/3- Rotate user's API keyassign_roles/4,revoke_roles/4- Role management
- OIDC User Management (
WeaviateEx.API.Users.OIDC) - OIDC-backed users:get/3- Get OIDC user detailslist/2- List OIDC usersassign_roles/4,revoke_roles/4- Role management- Note: OIDC users cannot be created/deleted via API
Additional Vectorizers
- Text2VecTransformers (
WeaviateEx.API.Vectorizers.Text2VecTransformers) - Local transformer models:- Pooling strategy configuration (
:masked_mean,:cls) - Separate passage/query inference URLs for asymmetric search
new/1,to_api/1,from_api/1,vectorizer_name/0
- Pooling strategy configuration (
- Text2VecOllama (
WeaviateEx.API.Vectorizers.Text2VecOllama) - Ollama embeddings:- Model selection (nomic-embed-text, mxbai-embed-large, etc.)
- Custom API endpoint configuration
new/1,to_api/1,from_api/1,vectorizer_name/0
- Text2VecJinaAI (
WeaviateEx.API.Vectorizers.Text2VecJinaAI) - Jina AI embeddings:- Model selection with dimensions support
new/1,to_api/1,from_api/1,vectorizer_name/0
- Text2VecVoyageAI (
WeaviateEx.API.Vectorizers.Text2VecVoyageAI) - VoyageAI embeddings:- Truncation support for long inputs
new/1,to_api/1,from_api/1,vectorizer_name/0
- Text2VecPalm (
WeaviateEx.API.Vectorizers.Text2VecPalm) - Google PaLM/Vertex AI:- Project ID and model ID configuration
- Custom API endpoint support
new/1,to_api/1,from_api/1,vectorizer_name/0
- Text2VecAzureOpenAI (
WeaviateEx.API.Vectorizers.Text2VecAzureOpenAI) - Azure OpenAI:- Resource name and deployment ID configuration
new/1,to_api/1,from_api/1,vectorizer_name/0
- Multi2VecClip (
WeaviateEx.API.Vectorizers.Multi2VecClip) - CLIP multimodal:- Image and text field configuration with weights
- Custom inference URL support
new/1,to_api/1,from_api/1,vectorizer_name/0
- Multi2VecGoogle (
WeaviateEx.API.Vectorizers.Multi2VecGoogle) - Google multimodal:- Image, text, and video field support
- Project ID, location, model ID, dimensions configuration
new/1,to_api/1,from_api/1,vectorizer_name/0
- Multi2VecCohere (
WeaviateEx.API.Vectorizers.Multi2VecCohere) - Cohere multimodal:- Image and text field configuration
- Truncation strategy support (NONE, START, END)
new/1,to_api/1,from_api/1,vectorizer_name/0
- Multi2VecVoyageAI (
WeaviateEx.API.Vectorizers.Multi2VecVoyageAI) - VoyageAI multimodal:- Image and text field configuration with weights
new/1,to_api/1,from_api/1,vectorizer_name/0
- Ref2VecCentroid (
WeaviateEx.API.Vectorizers.Ref2VecCentroid) - Reference centroid:- Reference properties configuration
- Centroid calculation method (mean)
new/1,to_api/1,from_api/1,vectorizer_name/0
Debug Module
- Debug API (
WeaviateEx.Debug) - Protocol comparison and troubleshooting:get_object_rest/4- Fetch object via REST/HTTP protocolget_object_grpc/4- Fetch object via gRPC protocolcompare_protocols/4- Compare REST and gRPC responses with detailed diffconnection_info/1- Get HTTP and gRPC connection diagnostics
- ObjectCompare (
WeaviateEx.Debug.ObjectCompare) - Deep object comparison:compare/2- Compare two objects and detect differencesdiff/2- Generate list of differences between objectsformat_diff/1- Format differences as human-readable report
- RequestLogger (
WeaviateEx.Debug.RequestLogger) - Request logging GenServer:start_link/1- Start logger with optional nameenable/1,disable/1- Toggle request logginglog_request/2- Log HTTP/gRPC request detailsget_logs/2- Retrieve logs with optional filters (protocol, min_duration_ms)export_logs/3- Export logs to file (JSON or text format)clear_logs/1- Clear all logged requests
- Main Module Integration:
WeaviateEx.debug_get_rest/4- Convenience delegate to Debug.get_object_restWeaviateEx.debug_compare/4- Convenience delegate to Debug.compare_protocols
Backup Enhancements
- RBAC Restore Options (
WeaviateEx.API.Backup):roles_restoreoption - Restore role definitions from backupusers_restoreoption - Restore user role assignments from backupoverwrite_aliasoption - Overwrite existing collection aliases during restore
- Location Struct Support (
WeaviateEx.API.Backup):create/4now accepts Location structs (Filesystem, S3, GCS, Azure) directlyrestore/4now accepts Location structs directly- Dynamic location configuration for programmatic backend selection
- Backup Config Enhancement (
WeaviateEx.Backup.Config.Create):- Added
chunk_sizeoption - Configure backup chunk size in megabytes
- Added
Connection Management
- Pool Configuration (
WeaviateEx.Client.Pool) - Connection pool settings:new/1- Create pool config with size, overflow, strategy, timeoutsdefault/0- Default pool configurationdefault_http/0- HTTP-optimized pool (larger pool for parallel requests)default_grpc/0- gRPC-optimized pool (smaller pool due to multiplexing)to_finch_opts/1- Convert to Finch HTTP client optionsto_grpc_opts/1- Convert to gRPC channel options- Configurable: size, overflow, strategy (:fifo/:lifo), timeout, idle_timeout, max_age
- Client State Tracking (
WeaviateEx.Client.State) - Lifecycle state management:new/0- Create initial state with timestampsconnected/1,disconnected/2,closed/1- State transitionsrecord_request/1- Track successful requestsrecord_error/2- Track errors with details- Status tracking:
:initializing,:connected,:disconnected,:closed - Statistics: request_count, error_count, created_at, last_used_at, last_error
- Client Lifecycle (
WeaviateEx.Client):close/1- Close client and release all connectionsclosed?/1- Check if client has been closedstatus/1- Get current client statusstats/1- Get client statistics (request/error counts, timestamps)with_client/2- Execute function with auto-managed client lifecycle- Added
statefield to client struct for tracking lifecycle
- ClosedClientError (
WeaviateEx.Error.ClosedClientError) - Exception for closed client:- Raised when operations are attempted on a closed client
- Includes
closed_attimestamp for debugging
[0.5.0] - 2025-12-28
Added
Proxy Support
- Proxy Configuration (
WeaviateEx.Config.Proxy) - HTTP, HTTPS, and gRPC proxy support:new/1- Create proxy config with explicit optionsfrom_env/0- Read from environment variables (HTTP_PROXY, HTTPS_PROXY, GRPC_PROXY)configured?/1- Check if any proxy is configuredhttp_proxy_for/2- Get appropriate proxy for a URL schemeto_finch_opts/1- Convert to Finch HTTP client optionsto_grpc_opts/1- Convert to gRPC channel options
- Environment variable reading with case-insensitive support (uppercase takes precedence)
- Automatic fallback from HTTPS to HTTP proxy when HTTPS not configured
Inverted Index Configuration
- Inverted Index Config (
WeaviateEx.API.InvertedIndexConfig) - Collection index configuration:bm25/1- BM25 algorithm configuration withbandk1parametersstopwords/1- Stopwords configuration with preset, additions, and removalsindex_timestamps/1- Enable/disable timestamp indexingindex_property_length/1- Enable/disable property length indexingindex_null_state/1- Enable/disable null state indexingcleanup_interval_seconds/1- Set cleanup intervalbuild/1- Build complete inverted index configurationmerge/2- Merge two configurationsvalidate/1- Validate configuration values
- Supported stopwords presets:
en,none - BM25 parameter validation (b: 0-1, k1: positive)
Generative Search Configuration
- Generative Config (
WeaviateEx.API.GenerativeConfig) - 13+ provider configurations:openai/1- OpenAI GPT modelsazure_openai/1- Azure OpenAI deploymentscohere/1- Cohere Command modelsanthropic/1- Anthropic Claude modelsmistral/1- Mistral AI modelsgoogle/1- Google Gemini/PaLM modelsaws/1- AWS Bedrock/SageMaker modelsollama/1- Ollama local modelsdatabricks/1- Databricks endpointsnvidia/1- NVIDIA NIM modelsfriendliai/1- FriendliAI modelsxai/1- XAI Grok modelsanyscale/1- Anyscale modelscontextualai/1- ContextualAI models
providers/0- List all supported providersprovider_module/1- Get Weaviate module name for provider- Full parameter support: model, temperature, maxTokens, baseURL, topK, topP
Collection Aliases API
- Aliases API (
WeaviateEx.API.Aliases) - Zero-downtime collection management (requires Weaviate v1.32.0+):create/3- Create an alias for a collectiondelete/2- Delete an aliasupdate/3- Update alias to point to different collectionget/2- Get alias detailslist/2- List all aliases (optionally filter by collection)exists?/2- Check if alias existsminimum_version/0- Get minimum required Weaviate version
- Alias Struct (
WeaviateEx.API.Aliases.Alias):from_api/1- Parse API response to struct- Fields:
alias,collection
ZSTD Compression Options
- Extended Compression (
WeaviateEx.Backup.Compression) - Additional compression algorithms::zstd_default- Balanced ZSTD compression:zstd_best_speed- Fast ZSTD compression:zstd_best_compression- Maximum ZSTD compression:no_compression- Disable compressiongzip?/1- Check if compression level uses GZIPzstd?/1- Check if compression level uses ZSTD
- ZSTD provides faster compression with better ratios than GZIP
Query Move Integration
- Move in near_text (
WeaviateEx.Query) - Semantic direction control:near_text/3now supports:move_toand:move_awayoptions- Move concepts toward or away from specific terms
- Accepts
WeaviateEx.Query.Movestructs or keyword options - Proper GraphQL generation for move parameters
- Example:
Query.near_text("technology", move_to: [concepts: ["AI"], force: 0.8])
Changed
- Updated test count to 1575 tests
- Enhanced Query module with Move struct integration
- Extended Backup.Compression with ZSTD support while maintaining backward compatibility
Stats
- 6 new feature modules
- Full test coverage for all new features
- Backward compatible with v0.4.0
[0.4.0] - 2025-12-28
Added
Cluster Management
- Cluster API (
WeaviateEx.API.Cluster) - Complete cluster management:nodes/2- Get cluster node information with optional verbose outputshards/2- Get shards for a collectionstatistics/1- Get cluster-wide statisticsreplicate/4- Trigger shard replication between nodeslist_replications/2- List ongoing replication operationsget_replication/3- Get replication operation statuscancel_replication/2- Cancel an ongoing replicationdelete_replication/2- Delete a replication operation recordwait_for_replications/2- Wait for all replications to complete
- Cluster Type Structs:
WeaviateEx.Cluster.Node- Node with status, version, shards, statsWeaviateEx.Cluster.Shard- Shard with status, vector indexing, object countWeaviateEx.Cluster.Replication- Replication operation with progress trackingWeaviateEx.Cluster.Replication.Operation- Individual replication operation
Query Rerank & GroupBy Integration
- Query.Rerank enhancements:
to_map/1- Convert to map format for gRPCvalid?/1- Validate rerank configuration- Improved
to_graphql/1with proper string escaping
- Query.GroupBy enhancements:
- Support for list paths (nested properties)
to_map/1- Convert to map format for gRPCvalid?/1- Validate group_by configuration
- Query Builder Integration:
Query.rerank/2- Add rerank to queryQuery.group_by/2- Add group_by to query- Works with all query types: near_text, near_vector, hybrid, bm25
Batch Advanced Features
- wait_for_vector_indexing (
WeaviateEx.Batch):- Poll until all vectors are indexed
- Configurable timeout, poll interval, max failures
- Optional shard filtering
- Auto UUID Generation (
WeaviateEx.Batch.FixedSize):add_object/4auto-generates UUID if not provided- Uses
WeaviateEx.Types.UUID.generate/0
- Multi-Target References (
WeaviateEx.Batch.FixedSize):add_reference/6now supports list of targets- Each target specifies collection and uuid
- DeleteResult Struct (
WeaviateEx.Batch.DeleteResult):- Typed result for batch delete operations
from_api/1- Parse API responseall_successful?/1,has_failures?/1failed_objects/1,successful_objects/1summary/1- Human-readable summaryDeletedObjectsubmodule for individual objects
Reranker Configurations
- 6 Reranker Types in
WeaviateEx.API.VectorConfig:reranker_cohere/1- Cohere reranker (existing)reranker_transformers/1- Local transformers rerankerreranker_voyageai/1- VoyageAI rerankerreranker_jinaai/1- Jina AI rerankerreranker_nvidia/1- NVIDIA rerankerreranker_contextualai/1- Contextual AI reranker
- Builder Function:
with_reranker/3- Add reranker to collection config
Backup & Restore Module
- Backup API (
WeaviateEx.API.Backup) - Complete backup and restore functionality:create/4- Create backup with include/exclude collections, config, wait_for_completionrestore/4- Restore backup with include/exclude collections, config, wait_for_completionget_create_status/3- Get backup creation statusget_restore_status/3- Get restore operation statuslist/2- List all backups for a storage backendcancel/3- Cancel in-progress backupwait_for_completion/5- Poll until operation completes with configurable timeout
- Storage Backend Enum (
WeaviateEx.Backup.Storage) - 4 supported backends::filesystem- Local filesystem storage:s3- Amazon S3 or S3-compatible storage:gcs- Google Cloud Storage:azure- Azure Blob Storage- Helper functions:
all/0,valid?/1,to_api_path/1,from_api/1
- Compression Level Enum (
WeaviateEx.Backup.Compression)::default- Balanced compression:best_speed- Faster compression, larger files:best_compression- Slower compression, smaller files
- Backup Status Types (
WeaviateEx.Backup.Status):- Status values:
:started,:transferring,:transferred,:success,:failed,:canceled - Response structs:
CreateResponse,RestoreResponse,BackupInfo - Helper functions:
completed?/1,success?/1,in_progress?/1
- Status values:
- Backup Configuration (
WeaviateEx.Backup.Config):Createstruct withcpu_percentageandcompressionoptionsRestorestruct withcpu_percentageoption- Factory functions:
create/1,restore/1
- Storage Location Structs (
WeaviateEx.Backup.Location):Filesystem- Local path configurationS3- Bucket, path, endpoint, region, credentials, SSLGCS- Bucket, path, project ID, credentialsAzure- Container, path, connection string- Factory functions:
filesystem/1,s3/3,gcs/3,azure/3
- Backup Error Types (
WeaviateEx.Error):backup_not_found/2,backup_already_exists/2,backup_failed/2restore_failed/2,backup_timeout/2,invalid_backend/1
- Main Module Backup Functions:
create_backup/4,restore_backup/4,list_backups/2cancel_backup/3,get_backup_status/3,get_restore_status/3
Role-Based Access Control (RBAC)
- RBAC Module (
WeaviateEx.RBAC) - Complete role-based access control support:Actions- Action type definitions and conversions for all 11 permission typesPermission- Permission struct with encoding/decoding for API communicationPermissions- Builder API for constructing permissions fluentlyRole- Role struct with permission management
- RBAC API (
WeaviateEx.API.RBAC) - Role CRUD operations:list_roles/1- List all rolesget_role/2- Get role by namecreate_role/3- Create role with permissionsdelete_role/2- Delete a roleadd_permissions/3- Add permissions to roleremove_permissions/3- Remove permissions from rolehas_permissions?/3- Check if role has permissionsget_users_for_role/2- Get users assigned to roleget_groups_for_role/2- Get groups assigned to roleexists?/2- Check if role exists
- 11 Permission Types: collections, data, tenants, roles, users, groups, cluster, nodes, backups, replicate, alias
- Type-safe Permissions Builder (
WeaviateEx.RBAC.Permissions):collections/2- Collection schema permissionsdata/3- Data CRUD permissions with tenant/object filterstenants/3- Tenant management permissionsroles/2- Role management permissionsusers/2- User management permissionsgroups/2- OIDC group permissionscluster/1- Cluster info permissionsnodes/1- Node info permissions (minimal/verbose)backups/1- Backup management permissionsreplicate/2- Replication permissionsalias_permission/2- Collection alias permissions
User Management
- User Structs (
WeaviateEx.Users.User):User.DB- Database-managed users with API keyUser.OIDC- OIDC-managed users with groupsUser.Own- Current authenticated user info
- Users API (
WeaviateEx.API.Users) - User lifecycle management:create/2- Create DB user (returns API key)get/2- Get user by IDlist_all/1- List all usersdelete/2- Delete useractivate/2- Activate userdeactivate/2- Deactivate userrotate_key/2- Rotate API keyassign_roles/3- Assign roles to userrevoke_roles/3- Revoke roles from userget_assigned_roles/2- Get user's rolesget_my_user/1- Get current user info
Group Management
- Group Struct (
WeaviateEx.Groups.Group) - OIDC group representation - Groups API (
WeaviateEx.API.Groups) - OIDC group operations:list_known/1- List known OIDC groupsget_assigned_roles/2- Get roles assigned to groupassign_roles/3- Assign roles to grouprevoke_roles/3- Revoke roles from group
Error Types
- Cluster Errors (
WeaviateEx.Error):node_not_found/1- Node not found in clustershard_not_found/2- Shard not found in collectionreplication_failed/2- Replication operation failedreplication_timeout/1- Replication timed outcluster_not_ready/0- Cluster not readyvector_indexing_timeout/1- Vector indexing timed out
- RBAC-specific Errors (
WeaviateEx.Error):rbac_error/3- Create RBAC error with categoryrole_not_found/1- Role not found errorpermission_denied/2- Permission denied erroruser_not_found/1- User not found errorinvalid_permission/1- Invalid permission error
Main Module Delegations
- Cluster convenience functions:
cluster_nodes/2,cluster_shards/2,cluster_statistics/1 - Replication functions:
replicate_shard/4,list_replications/2,get_replication/3 - Replication control:
cancel_replication/2,delete_replication/2,wait_for_replications/2 list_roles/1,get_role/2,create_role/3,delete_role/2create_user/2,get_user/2,list_users/1,delete_user/2,get_my_user/1list_groups/1,assign_group_roles/3,revoke_group_roles/3
gRPC Protocol Support
- gRPC Channel Management (
WeaviateEx.GRPC.Channel) - Persistent connection management:connect/3- Establish gRPC channel with TLS supportdisconnect/1- Clean channel shutdownbuild_metadata/1- Auth metadata for gRPC calls- Automatic reconnection handling
- gRPC Services - High-performance data operations:
WeaviateEx.GRPC.Services.Search- Vector similarity search (near_vector, near_text, near_object, bm25, hybrid)WeaviateEx.GRPC.Services.Batch- Batch insert, delete, and reference operationsWeaviateEx.GRPC.Services.Aggregate- Count and group_by aggregationsWeaviateEx.GRPC.Services.Tenants- Multi-tenancy operationsWeaviateEx.GRPC.Services.Health- gRPC health checks
- Protocol Buffer Definitions - Generated from Weaviate v1 protos:
- 11 proto files in
priv/protos/v1/ - Generated Elixir modules in
lib/weaviate_ex/grpc/generated/v1/
- 11 proto files in
- gRPC Error Handling (
WeaviateEx.Error):from_grpc_status/3- Map gRPC status codes to error typesfrom_grpc_error/1- Convert gRPC errors to WeaviateEx.Errorgrpc_retryable?/1- Identify retryable gRPC errors
- gRPC Retry Logic (
WeaviateEx.Retry):- Retry on UNAVAILABLE, RESOURCE_EXHAUSTED, ABORTED status codes
- Exponential backoff with jitter
- Client Configuration (
WeaviateEx.Client.Config):grpc_host- gRPC endpoint hostnamegrpc_port- gRPC port (default: 50051)grpc_max_message_size- Maximum message size for gRPC callsuse_tls?/1- TLS detection for gRPC connections
Changed
- Updated documentation with new module groups
- Improved test coverage for all new features
- Hybrid Architecture: gRPC for data operations (queries, batch, aggregations), HTTP retained for schema operations (Weaviate gRPC API doesn't support schema management)
- Client Connection (
WeaviateEx.Client):connect/1now establishes both HTTP (Finch) and gRPC channels- New
grpc_channelfield in client struct - Automatic gRPC fallback to HTTP when channel unavailable
- Query Execution (
WeaviateEx.Query):execute/2with client uses gRPC when availableexecute/1without client uses HTTP (backwards compatible)
- Batch Operations (
WeaviateEx.API.Batch):create_objects/3uses gRPC when client has gRPC channeldelete_objects/2uses gRPC for batch deletes
- Aggregations (
WeaviateEx.API.Aggregate):- Simple count/group_by use gRPC
- Complex aggregations (multiple properties) use GraphQL
- Tenants (
WeaviateEx.API.Tenants):list/2,get/3,exists?/3use gRPC- Create/update/delete remain HTTP (not in gRPC API)
Dependencies
- Added
{:grpc, "~> 0.9"}- Elixir gRPC client - Added
{:protobuf, "~> 0.13"}- Protocol Buffer support - Retained
{:finch, "~> 0.18"}- For schema operations and HTTP fallback
Stats
- Full gRPC support for data operations
- Complete Backup & Restore support with 4 storage backends
- Complete RBAC support matching Python client functionality
- Complete Cluster management with replication support
- Backwards compatible - existing code continues to work
[0.3.0] - 2025-12-28
Added
Query Enhancements
- Move Configuration (
WeaviateEx.Query.Move) - Move to/away from concepts in near_text queries - Rerank Configuration (
WeaviateEx.Query.Rerank) - Reranking for search results - Target Vectors (
WeaviateEx.Query.TargetVectors) - Named vector targeting with combination strategies (sum, average, minimum, manual weights, relative score) - BM25 Operator (
WeaviateEx.Query.BM25Operator) - AND/OR operators with minimum_should_match - Hybrid Vector (
WeaviateEx.Query.HybridVector) - Vector sub-search for hybrid queries - GroupBy (
WeaviateEx.Query.GroupBy) - Result grouping configuration - Metadata Helpers (
WeaviateEx.Query.Metadata) - Metadata field selection utilities - Query Reference (
WeaviateEx.Query.QueryReference) - Cross-reference query configuration
Reference Operations
- References API (
WeaviateEx.API.References) - Full cross-reference CRUD:add/6- Add single referencedelete/6- Delete referencereplace/6- Replace all references on a propertyadd_many/4- Batch add references
- ReferenceToMulti (
WeaviateEx.Data.ReferenceToMulti) - Multi-target reference type withto_beacons/1
Generative AI Enhancements
- Typed Provider Configs (
WeaviateEx.Generative.Config) - Full configuration structs for 14 providers:- OpenAI, Azure OpenAI, Anthropic, Cohere
- AWS Bedrock/SageMaker, Google Vertex/Gemini
- Mistral, Ollama, XAI, ContextualAI, Anyscale
- NEW: NVIDIA NIM, Databricks, FriendliAI
- Generative Results (
WeaviateEx.Generative.Result) - Typed result structures:Single- Single prompt result with metadata and debugGrouped- Grouped task resultGenerativeObject- Object with generative resultResponseParser- Parse API responses to typed structs
- Generative Parameters (
WeaviateEx.Generative.Parameters) - Multimodal support:SinglePrompt/GroupedTaskwith image supportimage_properties,non_blob_propertiesoptionsmetadataanddebugoptions
- 20+ AI Providers - Added nvidia, databricks, friendliai to supported providers
Batch Operations
- Error Tracking (
WeaviateEx.Batch.ErrorTracking) - Detailed error tracking:ErrorObject- Failed object details with retry countErrorReference- Failed reference detailsResults- Aggregated results with helpers
- Batch Retry (
WeaviateEx.Batch.BatchRetry) - Smart retry logic:- Rate limit detection
- Exponential backoff calculation
with_retry/2wrapper function
- Fixed Size Batcher (
WeaviateEx.Batch.FixedSize) - Fixed-size batch processor
Tenant Extensions
freeze/3- Set tenant to FROZEN stateoffload/3- Set tenant to OFFLOADED state
Multi-Vector Support
- Multi-Vector API (
WeaviateEx.API.MultiVector) - ColBERT-style embeddings:muvera_encoding/1- Muvera encoding configurationmulti_vector_config/1- Multi-vector index configurationself_provided/1- Self-provided multi-vectorstext2colbert_jinaai/1- Jina ColBERT vectorizermulti2multivec_jinaai/1- Jina multi-modal vectorizer
Vectorizers
- New Vectorizers (Dec 2025 Python client sync):
text2vec_voyageai/1- VoyageAI (voyage-3.5, voyage-3-large, voyage-context-3)text2vec_morph/1- Morph embeddingstext2vec_model2vec/1- Model2Vec embeddingstext2vec_aws_bedrock/1- AWS Bedrock embeddingstext2vec_aws_sagemaker/1- AWS SageMaker endpointstext2vec_google_vertex/1- Google Vertex AItext2vec_google_gemini/1- Google AI Studio (Gemini)reranker_cohere/1- Cohere reranker with baseURL
Other
- Object TTL Configuration (
WeaviateEx.Config.ObjectTTL) - OpenAI O1/O3 Support:
verbosityandreasoning_effortparameters - Cohere Enhancements:
dimensionsparameter for embeddings - CI Infrastructure: Full GitHub Actions workflow
Changed
- Updated Docker Compose to Weaviate 1.28.14
- Copied full CI infrastructure from Python client (
ci/directory) - Added default version to CI start/stop scripts
Stats
- 694 tests passing (up from 536)
- Full Python client feature parity for core operations
[0.2.0] - 2025-10-19
Added
- Embedded Mode: Download and manage Weaviate embedded binary lifecycle with
WeaviateEx.start_embedded/1andWeaviateEx.stop_embedded/1 - Comprehensive Docker Environment: Full Docker Compose profiles from Python client (single node, modules, RBAC, async, cluster, proxy, backup, WCS, Okta)
- Mix Tasks for Docker Management:
mix weaviate.start- Start Weaviate stack with version and profile selectionmix weaviate.stop- Stop running containers with optional volume removalmix weaviate.status- Display container status and exposed portsmix weaviate.logs- View and follow logs from specific compose files
- Batch API Enhancements: Comprehensive batch operations with detailed summaries, error tracking, and statistics
- Enhanced Examples: Added
07_batch.exsand08_query.exswith comprehensive batch and query demonstrations - Objects API Payload Builder: Type-safe payload construction in
WeaviateEx.Objects.Payload - Collections API Extensions: Multi-tenancy support with
set_multi_tenancy/2, improved tenant management - Development Scripts:
scripts/weaviate-stack.shwrapper for unified stack management - CI/Weaviate Infrastructure: Complete Docker Compose setup under
ci/weaviate/with helper scripts - Documentation: Extensive planning docs in
docs/20251019/covering essential scope, schema, queries, operations
Changed
- Examples Overhaul: All 8 examples updated with improved error handling, cleaner output, and better demonstrations
- README Improvements: Expanded documentation with embedded mode, Mix tasks, Docker management, and comprehensive usage guides
- Mix Tasks Refactored: Cleaner implementation using WeaviateEx.DevSupport.Compose module for shared logic
- Test Coverage: Added tests for batch operations, collections API, and data operations
Fixed
- Example helper module visibility and formatting
- Collections API tenant operations
- Batch summary statistics and error reporting
[0.1.1] - 2025-10-16
Changed
- Refactored HTTP client implementation into Protocol.HTTP.Client for better protocol-based architecture
- Removed old HTTPClient and HTTPClient.Finch modules in favor of protocol-based implementation
- Updated all examples to use cleaner ExampleHelper patterns with proper module qualification
- Enhanced example output formatting and error handling
- Fixed docker-compose port mapping (40051:50051 for gRPC)
- Improved test cleanup and formatting across all test files
Added
- Added vector support to data examples
- Enhanced Protocol.HTTP.Client with comprehensive error handling
- Added better response parsing and authentication header support
Fixed
- Fixed example helper function visibility (made ANSI color helpers public)
- Fixed client initialization to properly use protocol implementation
- Improved error messages and debugging output
[0.1.0] - 2025-10-16
Added
- Initial release