fleet-memory/hindsight-clients/go
Nicolò Boschi 28dac7c7f8
fix: prevent silent memory loss on consolidation LLM failure (#601)
* fix: prevent silent memory loss on consolidation LLM failure

When all LLM retries are exhausted during consolidation, memories were
being marked consolidated_at unconditionally, permanently excluding them
from future consolidation runs without producing any observations.

Fix with two complementary mechanisms:
- Adaptive batch splitting: on LLM failure, the batch is halved and
  retried recursively down to batch_size=1, recovering most transient
  failures (rate limits, Pydantic validation on long prompts) without
  operator intervention
- consolidation_failed_at column: only single-memory batches that still
  fail after all retries are marked here instead of consolidated_at, so
  they remain visible and retryable
- New API endpoint POST /v1/default/banks/{bank_id}/consolidation/retry-failed
  resets these memories for the next consolidation run

* chore: regenerate OpenAPI spec

* fix: rename consolidation endpoint from /retry-failed to /recover

* fix: add consolidation_failed_at column, adaptive batch splitting, and recovery API

- Migration a3b4c5d6e7f8: add consolidation_failed_at TIMESTAMPTZ column to
  memory_units with an index for efficient failure queries; properly chains off
  g7h8i9j0k1l2 (backsweep_orphan_observations)
- Consolidator: filter pending memories with consolidation_failed_at IS NULL
  so failed memories are not re-fetched in an infinite loop
- Consolidator: adaptive batch splitting — when a batch exhausts all 3 LLM
  retries, halve it and retry sub-batches recursively; only single-memory
  batches that also exhaust all retries get consolidation_failed_at set
- New tests (9 total) covering: adaptive splitting recovers all memories,
  larger batch splitting, single-memory permanent failure, exclusion from
  next run, partial batch failure, recover resets columns, recover returns
  0 when none failed, recover-then-consolidate succeeds, HTTP endpoint

* chore: regenerate Go, Python, TypeScript clients with recover consolidation endpoint

* feat: add Recover Consolidation action to bank Actions dropdown

* style: apply ruff formatting to http.py and config.py

* fix: handle consolidation scope in large batch test mock LLM

The mock LLM was returning {"facts": ...} for ALL calls including consolidation.
Consolidation doesn't use skip_validation=True so it expects a _ConsolidationBatchResponse
instance, not a raw dict. Before this PR consolidation silently swallowed the AttributeError
(failed=False was returned); now failed=True triggers adaptive splitting and timeouts.

Fix: return _ConsolidationBatchResponse() when scope=="consolidation".

* fix: restrict claude-agent-sdk to macOS platform only (no Linux wheel available)

Also fix pre-existing type errors: use setattr for XLM-RoBERTa monkey-patch
and add missing reranker_local_fp16/bucket_batching/batch_size fields to main.py config constructor.

* fix: add UV_INDEX_STRATEGY=unsafe-best-match to fix markupsafe cp314 wheel conflict

PyTorch CPU index serves markupsafe==3.0.3 with only cp314 wheels.
uv's default first-index strategy stops at the first index with any version
even if no compatible wheel exists. unsafe-best-match searches all indices
for the best compatible wheel, falling back to PyPI for markupsafe.

* fix: use explicit pytorch index to prevent markupsafe wheel conflict

Configure the pytorch CPU index as explicit=true in pyproject.toml so it is
ONLY used for torch (via [tool.uv.sources]). All other packages (including
markupsafe) are resolved exclusively from PyPI, preventing the pytorch index
from serving incompatible cp314-only wheels for non-pytorch packages.

Remove UV_INDEX and UV_INDEX_STRATEGY from CI workflow (no longer needed
since the index is now configured in pyproject.toml).

* ci: trigger CI run

* ci: retry trigger

* ci: trigger after remote URL fix

* ci: add workflow_dispatch to unblock manual trigger

* fix: remove empty env blocks left after UV_INDEX removal

* fix: add type: ignore for optional claude_agent_sdk imports (macOS-only)

* fix: correct type: ignore rules for claude_agent_sdk and fix utcnow deprecation
2026-03-17 20:15:33 +01:00
..
api fix: prevent silent memory loss on consolidation LLM failure (#601) 2026-03-17 20:15:33 +01:00
test fix(go-client): use monorepo-compatible module path (#392) 2026-02-18 10:35:13 +01:00
.gitignore feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
api_banks.go fix: prevent silent memory loss on consolidation LLM failure (#601) 2026-03-17 20:15:33 +01:00
api_directives.go Release v0.4.18 2026-03-13 15:21:03 +01:00
api_documents.go Release v0.4.18 2026-03-13 15:21:03 +01:00
api_entities.go Release v0.4.18 2026-03-13 15:21:03 +01:00
api_files.go Release v0.4.18 2026-03-13 15:21:03 +01:00
api_memory.go Release v0.4.18 2026-03-13 15:21:03 +01:00
api_mental_models.go Release v0.4.18 2026-03-13 15:21:03 +01:00
api_monitoring.go Release v0.4.18 2026-03-13 15:21:03 +01:00
api_operations.go Release v0.4.18 2026-03-13 15:21:03 +01:00
api_webhooks.go Release v0.4.18 2026-03-13 15:21:03 +01:00
client.go Release v0.4.18 2026-03-13 15:21:03 +01:00
configuration.go Release v0.4.18 2026-03-13 15:21:03 +01:00
go.mod fix(go-client): use monorepo-compatible module path (#392) 2026-02-18 10:35:13 +01:00
go.sum feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
hindsight_client.go fix: clients don't respect timeout setting (#400) 2026-02-19 10:47:47 +01:00
integration_test.go feat: entity labels — optional, free_values, multi_value, UI polish (#450) 2026-03-02 13:05:25 +01:00
model_add_background_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_async_operation_submit_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_background_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_bank_config_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_bank_config_update.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_bank_list_item.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_bank_list_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_bank_profile_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_bank_stats_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_budget.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_cancel_operation_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_child_operation_status.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_chunk_data.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_chunk_include_options.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_chunk_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_clear_memory_observations_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_consolidation_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_create_bank_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_create_directive_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_create_mental_model_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_create_mental_model_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_create_webhook_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_delete_document_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_delete_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_directive_list_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_directive_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_disposition_traits.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_document_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_entity_detail_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_entity_include_options.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_entity_input.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_entity_list_item.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_entity_list_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_entity_observation_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_entity_state_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_features_info.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_file_retain_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_graph_data_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_http_validation_error.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_include_options.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_list_documents_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_list_memory_units_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_list_tags_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_memory_item.go feat(retain): verbatim, chunks modes and named retain strategies (#593) 2026-03-17 18:08:25 +01:00
model_mental_model_list_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_mental_model_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_mental_model_trigger.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_not.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_observation_scopes.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_operation_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_operation_status_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_operations_list_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_recall_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_recall_request_tag_groups_inner.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_recall_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_recall_result.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_recover_consolidation_response.go fix: prevent silent memory loss on consolidation LLM failure (#601) 2026-03-17 20:15:33 +01:00
model_reflect_based_on.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_directive.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_fact.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_include_options.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_llm_call.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_mental_model.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_tool_call.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_reflect_trace.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_retain_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_retain_response.go feat(retain): verbatim, chunks modes and named retain strategies (#593) 2026-03-17 18:08:25 +01:00
model_retry_operation_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_source_facts_include_options.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_tag_group_and.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_tag_group_leaf.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_tag_group_not.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_tag_group_or.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_tag_item.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_timestamp.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_token_usage.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_tool_calls_include_options.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_update_directive_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_update_disposition_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_update_document_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_update_document_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_update_mental_model_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_update_webhook_request.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_validation_error.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_validation_error_loc_inner.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_version_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_webhook_delivery_list_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_webhook_delivery_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_webhook_http_config.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_webhook_list_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
model_webhook_response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
null_test.go feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
openapi-generator-cli.jar feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
openapi-generator-config.yaml fix(go-client): use monorepo-compatible module path (#392) 2026-02-18 10:35:13 +01:00
README.md fix(go-client): use monorepo-compatible module path (#392) 2026-02-18 10:35:13 +01:00
response.go Release v0.4.18 2026-03-13 15:21:03 +01:00
trace_test.go feat: use official go generator for Go client (#377) 2026-02-16 14:04:12 +01:00
utils.go Release v0.4.18 2026-03-13 15:21:03 +01:00

Go API client for hindsight

HTTP API for Hindsight

Overview

This API client was generated by the OpenAPI Generator project. By using the OpenAPI-spec from a remote server, you can easily generate an API client.

  • API version: 0.4.11
  • Package version: 1.0.0
  • Generator version: 7.10.0
  • Build package: org.openapitools.codegen.languages.GoClientCodegen

Installation

Install the following dependencies:

go get github.com/stretchr/testify/assert
go get golang.org/x/net/context

Put the package under your project folder and add the following in import:

import hindsight "github.com/vectorize-io/hindsight/hindsight-clients/go"

To use a proxy, set the environment variable HTTP_PROXY:

os.Setenv("HTTP_PROXY", "http://proxy_name:proxy_port")

Configuration of Server URL

Default configuration comes with Servers field that contains server objects as defined in the OpenAPI specification.

Select Server Configuration

For using other server than the one defined on index 0 set context value hindsight.ContextServerIndex of type int.

ctx := context.WithValue(context.Background(), hindsight.ContextServerIndex, 1)

Templated Server URL

Templated server URL is formatted using default variables from configuration or from context value hindsight.ContextServerVariables of type map[string]string.

ctx := context.WithValue(context.Background(), hindsight.ContextServerVariables, map[string]string{
	"basePath": "v2",
})

Note, enum values are always validated and all unused variables are silently ignored.

URLs Configuration per Operation

Each operation can use different server URL defined using OperationServers map in the Configuration. An operation is uniquely identified by "{classname}Service.{nickname}" string. Similar rules for overriding default operation server index and variables applies by using hindsight.ContextOperationServerIndices and hindsight.ContextOperationServerVariables context maps.

ctx := context.WithValue(context.Background(), hindsight.ContextOperationServerIndices, map[string]int{
	"{classname}Service.{nickname}": 2,
})
ctx = context.WithValue(context.Background(), hindsight.ContextOperationServerVariables, map[string]map[string]string{
	"{classname}Service.{nickname}": {
		"port": "8443",
	},
})

Documentation for API Endpoints

All URIs are relative to http://localhost

Class Method HTTP request Description
BanksAPI AddBankBackground Post /v1/default/banks/{bank_id}/background Add/merge memory bank background (deprecated)
BanksAPI ClearObservations Delete /v1/default/banks/{bank_id}/observations Clear all observations
BanksAPI CreateOrUpdateBank Put /v1/default/banks/{bank_id} Create or update memory bank
BanksAPI DeleteBank Delete /v1/default/banks/{bank_id} Delete memory bank
BanksAPI GetAgentStats Get /v1/default/banks/{bank_id}/stats Get statistics for memory bank
BanksAPI GetBankConfig Get /v1/default/banks/{bank_id}/config Get bank configuration
BanksAPI GetBankProfile Get /v1/default/banks/{bank_id}/profile Get memory bank profile
BanksAPI ListBanks Get /v1/default/banks List all memory banks
BanksAPI ResetBankConfig Delete /v1/default/banks/{bank_id}/config Reset bank configuration
BanksAPI TriggerConsolidation Post /v1/default/banks/{bank_id}/consolidate Trigger consolidation
BanksAPI UpdateBank Patch /v1/default/banks/{bank_id} Partial update memory bank
BanksAPI UpdateBankConfig Patch /v1/default/banks/{bank_id}/config Update bank configuration
BanksAPI UpdateBankDisposition Put /v1/default/banks/{bank_id}/profile Update memory bank disposition
DirectivesAPI CreateDirective Post /v1/default/banks/{bank_id}/directives Create directive
DirectivesAPI DeleteDirective Delete /v1/default/banks/{bank_id}/directives/{directive_id} Delete directive
DirectivesAPI GetDirective Get /v1/default/banks/{bank_id}/directives/{directive_id} Get directive
DirectivesAPI ListDirectives Get /v1/default/banks/{bank_id}/directives List directives
DirectivesAPI UpdateDirective Patch /v1/default/banks/{bank_id}/directives/{directive_id} Update directive
DocumentsAPI DeleteDocument Delete /v1/default/banks/{bank_id}/documents/{document_id} Delete a document
DocumentsAPI GetChunk Get /v1/default/chunks/{chunk_id} Get chunk details
DocumentsAPI GetDocument Get /v1/default/banks/{bank_id}/documents/{document_id} Get document details
DocumentsAPI ListDocuments Get /v1/default/banks/{bank_id}/documents List documents
EntitiesAPI GetEntity Get /v1/default/banks/{bank_id}/entities/{entity_id} Get entity details
EntitiesAPI ListEntities Get /v1/default/banks/{bank_id}/entities List entities
EntitiesAPI RegenerateEntityObservations Post /v1/default/banks/{bank_id}/entities/{entity_id}/regenerate Regenerate entity observations (deprecated)
MemoryAPI ClearBankMemories Delete /v1/default/banks/{bank_id}/memories Clear memory bank memories
MemoryAPI GetGraph Get /v1/default/banks/{bank_id}/graph Get memory graph data
MemoryAPI GetMemory Get /v1/default/banks/{bank_id}/memories/{memory_id} Get memory unit
MemoryAPI ListMemories Get /v1/default/banks/{bank_id}/memories/list List memory units
MemoryAPI ListTags Get /v1/default/banks/{bank_id}/tags List tags
MemoryAPI RecallMemories Post /v1/default/banks/{bank_id}/memories/recall Recall memory
MemoryAPI Reflect Post /v1/default/banks/{bank_id}/reflect Reflect and generate answer
MemoryAPI RetainMemories Post /v1/default/banks/{bank_id}/memories Retain memories
MentalModelsAPI CreateMentalModel Post /v1/default/banks/{bank_id}/mental-models Create mental model
MentalModelsAPI DeleteMentalModel Delete /v1/default/banks/{bank_id}/mental-models/{mental_model_id} Delete mental model
MentalModelsAPI GetMentalModel Get /v1/default/banks/{bank_id}/mental-models/{mental_model_id} Get mental model
MentalModelsAPI ListMentalModels Get /v1/default/banks/{bank_id}/mental-models List mental models
MentalModelsAPI RefreshMentalModel Post /v1/default/banks/{bank_id}/mental-models/{mental_model_id}/refresh Refresh mental model
MentalModelsAPI UpdateMentalModel Patch /v1/default/banks/{bank_id}/mental-models/{mental_model_id} Update mental model
MonitoringAPI GetVersion Get /version Get API version and feature flags
MonitoringAPI HealthEndpointHealthGet Get /health Health check endpoint
MonitoringAPI MetricsEndpointMetricsGet Get /metrics Prometheus metrics endpoint
OperationsAPI CancelOperation Delete /v1/default/banks/{bank_id}/operations/{operation_id} Cancel a pending async operation
OperationsAPI GetOperationStatus Get /v1/default/banks/{bank_id}/operations/{operation_id} Get operation status
OperationsAPI ListOperations Get /v1/default/banks/{bank_id}/operations List async operations

Documentation For Models

Documentation For Authorization

Endpoints do not require authorization.

Documentation for Utility Methods

Due to the fact that model structure members are all pointers, this package contains a number of utility functions to easily obtain pointers to values of basic types. Each of these functions takes a value of the given basic type and returns a pointer to it:

  • PtrBool
  • PtrInt
  • PtrInt32
  • PtrInt64
  • PtrFloat
  • PtrFloat32
  • PtrFloat64
  • PtrString
  • PtrTime

Author