Commit Graph

69 Commits

Author SHA1 Message Date
Nicolò Boschi 7871d9bd1f update star history 2026-09-09 10:17:40 +02:00
Chris Bartholomew 33e986cf96 docs: point the Slack community links at a redirect instead of a raw invite token (#4223)
The Slack invite token was pasted verbatim into twelve places across ten files
here. Slack shared-invite links expire — on the plan this workspace uses they
are capped at 30 days, with no "never expires" option — so every one of those
twelve copies had gone stale.

An expired Slack invite gives no useful signal. It quietly redirects to the
workspace's generic signup page, which is restricted to a company email domain
and tells the visitor to contact an administrator for an invitation. It reads
like the community is closed, or like a permissions bug. Two people reported it
that way this week before anyone realised the link was simply dead.

Rotating a token across twelve hardcoded copies every 30 days was never going
to happen, which is how it got this stale. Four of the copies are frozen
versioned sidebars (0.6 through 0.9) that nobody thinks to grep. They are
updated here too: a reader on old docs deserves a working link as much as
anyone.

Everything now points at https://vectorize.io/slack, which redirects to the
current invite. Rotating becomes a one-line change in one repository, and the
links in this one stop going stale.

Claude-Session: https://claude.ai/code/session_011mnzArjiCdBxa8dh1H47Fa
2026-09-08 11:29:27 -04:00
Nicolò Boschi 30ce3b8d11 feat(llm): add Meta Model API as a first-class provider (#4081)
* feat(llm): add Meta Model API as a first-class provider

Meta Model API (https://ai.developer.meta.com) serves the Muse family over an
OpenAI-compatible chat/completions endpoint, so it slots into the existing
OpenAICompatibleLLM path exactly like deepseek / zai / atlas.

Set `HINDSIGHT_API_LLM_PROVIDER=meta` to route fact extraction, reflection and
consolidation through it. The base URL defaults to https://api.meta.ai/v1 and
the default model is muse-spark-1.3 (1M context).

Two Meta-specific behaviours are worth knowing, and are documented rather than
worked around:

- Muse Spark always reasons. `reasoning_effort: "none"` is rejected with HTTP
  400 — only minimal/low/medium/high/xhigh are accepted, or omit it. Reasoning
  tokens are billed against the output budget, so the per-operation max-token
  limits need headroom.
- Chat Completions documents `max_tokens`, not `max_completion_tokens`. Muse
  Spark is a reasoning model but not one of the OpenAI products the frozen
  `_supports_reasoning_model` name list recognises, so the parameter name comes
  from the provider default. A test pins that, and pins that a configured
  reasoning_effort still reaches the request (the #3449 drop list only covers
  OpenAI's own non-reasoning products).

The provider is registered on the chat/completions path only. Meta also serves
a Responses and an Anthropic-Messages endpoint; a `meta-responses` variant
mirroring openai/openai-responses was considered and deliberately left out.

Capability flags are left off deliberately: Meta has no batch endpoint, and its
prompt caching is automatic (no key, flag, or breakpoints), so it does not fit
the explicit `get_or_create_cached_prefix` contract `supports_prompt_caching`
describes — the benefit applies for free either way.

Changes:
- engine/llm_wrapper.py: register "meta" in create_llm_provider(),
  LLMProvider.valid_providers, and the default base_url map
- engine/providers/openai_compatible_llm.py: register "meta" in
  valid_providers, default base_url, and the API-key-required check
- config.py: PROVIDER_DEFAULT_MODELS["meta"] = muse-spark-1.3
- tests/test_meta_provider.py: default model/base URL, API-key requirement,
  the max_tokens parameter name, and reasoning_effort pass-through
- hindsight-embed control center: add Meta Model API to the provider wizard
- docs: add Meta to llmProviders.json (drives the providers grid, the
  capability table and the default-models table) and config examples in
  developer/models.mdx + developer/configuration.md
- README + .env.example (+ the bundled embed copy): document the new provider

Also colours the docs provider grid, which was previously monochrome. Each tile
now carries its brand colour, taken from the Simple Icons dataset — the same
project the marks themselves come from, so a tile's colour matches its mark.
Near-black brands (OpenAI, Ollama, Anthropic, ...) get a dark-theme override so
they do not vanish against the dark surface. Providers with no Simple Icons
entry (Groq, Fireworks, Atlas Cloud, Requesty, opencode-go, Nous, llama.cpp,
LiteLLM) keep the neutral inherited colour rather than an invented hex. The
fallback is `inherit`, so the other IconGrid caller (ClientsGrid) is unchanged.

Meta uses its own mark (SiMeta) rather than the generic OpenAI-compatible glyph.

Not verified against the live API — no Meta API key was available — so
muse-spark-1.3 is deliberately absent from the "Tested Models" table, which
means models verified to work. Worth probing first with a real key: Meta
rejects recursive JSON schemas in structured output with HTTP 400.

* docs(llm): mark muse-spark-1.3 tested against the live Meta API

Verified end-to-end through Hindsight's own create_llm_provider() against
https://api.meta.ai/v1 (HTTP 200, valid content, token usage parsed including
reasoning tokens), so muse-spark-1.3 now belongs in the Tested Models table.

Four behaviours confirmed live, all matching the published docs:

- Structured output with a flat json_schema works, and classified the probe
  input correctly (world vs experience).
- Recursive JSON schemas are rejected: HTTP 400 "Recursive JSON schemas are not
  currently supported". Audited every Pydantic response model in
  engine/response_models.py for self-reference through $defs — none is
  recursive, so no Hindsight path is affected.
- reasoning_effort "none" is rejected: HTTP 400 '"reasoning_effort" does not
  support "none" with this model.' Other levels are accepted.
- Reasoning tokens are substantial and come out of the output budget: a trivial
  prompt spent 87 reasoning tokens against 11 visible output tokens, and at
  max_tokens=64 the response comes back with no content at all. Hindsight's
  defaults leave ample room (retain 64000; consolidation and reflect unbounded),
  so this only bites an operator who lowers the cap — which is what the
  configuration note added with the provider already warns about.

Also records in the max-tokens test that Meta accepts max_completion_tokens as
well, so sending max_tokens is a choice between two working names rather than a
correctness fix.

* fix(llm): reflect failed outright on Meta — tool_choice is auto-only

Found by running a real Hindsight instance against Meta Model API and
exercising retain, recall, reflect and consolidation end to end. Reflect
returned HTTP 400 on every call:

    only `"auto"` is supported for `tool_choice`. `"none"`, `"required"`,
    and named function choices are not currently supported

Reflect's agent loop forces a retrieval tool on its first turns, so the whole
reflect surface was unusable on this provider. The unit tests could not have
caught it: they cover provider construction and parameter naming, not the
tool-calling path.

This is the opposite failure mode to the one `_drops_tool_choice_required`
handles. LM Studio and Ollama accept the field and silently ignore it, so
reflect answers badly (#1563/#1179); Meta rejects the request outright, so
reflect answers not at all. The two need separate predicates, hence
`_rejects_non_auto_tool_choice` alongside the existing check rather than a
widening of it.

The field is dropped for any non-auto mode. A named choice has already been
narrowed to a single tool by the block above, so the call stays practically
forced under auto — the same reasoning the DeepSeek branch relies on. "none"
cannot be expressed by omission and would become "auto"; no caller reaches
this path with it (only the gemini, claude-code and github-copilot providers
handle NONE), so that is documented in place rather than given an untested
tools-stripping branch.

tests/test_meta_tool_choice.py covers required, named and auto, and asserts the
carve-out does not leak to other OpenAI-compatible endpoints. The LM Studio and
required-downgrade suites still pass unchanged.

Also documents the latency finding from the same run: Muse Spark reasons before
every reply, and reflect's 30s default deadline is too short for its final
synthesis — it timed out four times before failing. Raising
HINDSIGHT_API_REFLECT_LLM_TIMEOUT and HINDSIGHT_API_LLM_TIMEOUT to 300 makes
reflect return a correct grounded answer in ~60s.

Verified end to end on the fixed build: retain 26s (3 facts, entities and a
March 2026 temporal range), recall 1.7s (3 hits, correctly ranked), reflect 60s
(grounded answer), consolidation completed (4 observations, 15 links, 0 failed
operations).

* docs(models): give Meta Model API its own setup section with the required knobs

The provider's settings were inline comments inside the shared 20-provider
config block, which is the wrong place for something an operator must act on:
three of the four are required, not tuning, and one of them (the reflect
deadline) is the difference between reflect working and reflect returning
nothing at all.

Adds a "Meta Model API Setup" section alongside the other providers that need
one, with the required knobs as a table that states why each is required —
every one of them a consequence of Muse Spark always reasoning before it
replies. Also records the model lineup, the contributor-tier trade-off, and the
four things worth knowing up front: prompt caching is automatic (which is why
the capability table shows none), there is no batch or embeddings endpoint,
recursive JSON schemas are rejected, and calls are slow.

The shared config block keeps the two timeout exports, since they are required
to be set, and now points at the section for the reasoning.
2026-09-04 12:08:55 +02:00
Nicolò Boschi 71a9a7008f feat(coding-agents): first-class pi support, sharing one extension adapter and installer with Prime Agent (#3993)
Adds pi (@earendil-works/pi-coding-agent) as a harness and extracts createPiExtension(harness),
the extension adapter pi and its fork Prime Agent share. Supersedes #3775.

The `pi` key is removed from package.json: both hosts read that same key, so it could only ever
name one bundle, and the host it did not name loaded the other's and reported the wrong harness.
`hindsight-coding-agents install pi|prime-agent` is now the only route for both.

Also makes the companion skill self-update for every host that installs one — the paths now live
once in core/skill-dirs.ts, which both the installer and skill-sync read.

Co-authored-by: Sebastian Otaegui <feniix@gmail.com>
2026-09-01 15:11:06 +02:00
Max Marino 1d9a6a381c feat(llm): add GitHub Copilot subscription provider (#3597)
Adds a `github-copilot` LLM provider backed by the official GitHub Copilot SDK, using the signed-in Copilot entitlement with no `HINDSIGHT_API_LLM_API_KEY`.

Verified end-to-end against a live Copilot subscription: retain, consolidation and reflect all run on the provider.

Review fixes on top of the original submission:
- default to `gpt-5.6-terra`; the submitted `gpt-5.6-sol` is not in the model list the runtime serves, so every call failed and the provider was unusable out of the box
- make a rejected request configuration terminal instead of a runtime failure; an unavailable model was invalidating the shared runtime and respawning `copilot --headless` once per attempt (5 spawns at max_retries=3, ~12 at the default of 10)
- let a token-authenticated host run without `~/.copilot`, so the documented COPILOT_GITHUB_TOKEN / GH_TOKEN / GITHUB_TOKEN path works in containers and CI
- regenerate skills/hindsight-docs (the provider list also feeds the generated faq.md)

Co-authored-by: Max Marino <dudujuju828@users.noreply.github.com>
2026-08-19 15:48:00 +02:00
Nicolò Boschi efef4fa398 docs(readme): track hindsight-client downloads, cover the missing concepts (#3608)
* docs(readme): track hindsight-client downloads, cover the missing concepts

The PyPI downloads badge tracked hindsight-api; point it at hindsight-client
(1.6M/month) and make both download badges real links — the NPM one passed
`link=` as a shields param, which is inert in an image.

Relabel the "CI" badge to "Release": it points at release.yml, which only runs
on v* tags, so green meant "the last release published", not "tests pass".
test.yml (the actual CI) has no push trigger, so there is no main history to
badge without changing its triggers.

The LLM Wrapper was pitched as the easiest way in and shown only as a PNG —
uncopyable, unreadable to search engines and coding agents, with no
`pip install hindsight-litellm` and no link to the integration. It is now real
code, and passes hindsight_api_url explicitly because the wrapper defaults to
Cloud, which would otherwise silently send a local-Docker reader to
api.hindsight.vectorize.io.

Add the concepts the README never mentioned: integrations (60+, none were
listed), coding agents, MCP, observations, mental models, knowledge pages,
banks/dispositions, multilingual, Memory Defense, and production concerns.
Add Helm, bare-metal pip and Cloud install paths, plus the Go and CLI clients.

Fix stale facts: link the live benchmarks site next to the January 2026 chart,
and replace the hand-maintained 8-provider list with 25+ and the headline names.

Structure: add a Contents block, move Supported Platforms next to Quick Start
(it sat in the footer, ~200 lines below the anchor pointing at it), and collapse
the three repeated client-setup preambles in the operations section.

* docs(readme): point Cloud mentions at the pricing page

The Cloud links went straight to signup, so a reader had to start an account
to find out what the hosted option actually includes. Point them at
https://vectorize.io/pricing instead, which is Hindsight-specific and compares
self-hosted, Cloud and Enterprise side by side, and summarise what Cloud gives
you (managed scaling, dashboard, backups, 99.9% SLA, usage-based billing with
free credits). Signup stays as the action link next to it.

No prices in the README on purpose — they would go stale here, which is the
same failure mode as the hand-maintained provider list this branch removed.

* docs(readme): drop Pricing from the header nav

The pricing links in the Managed install path and the production table are
where a reader is actually deciding between hosting options; the nav row does
not need a sixth item.
2026-08-19 11:31:43 +02:00
Nicolò Boschi cb0e1dea40 chore: replace star-history.com chart with self-hosted gh-stars chart (#3150)
The api.star-history.com embed in the README was broken. Replace it with
nicoloboschi/gh-stars, which backfills stargazer data via a scheduled GitHub
Action and commits a self-hosted SVG chart into the repo, so the README image
no longer depends on a third-party service.
2026-08-03 12:32:58 +02:00
Parafee41 0178d91333 docs: fix operation image alt text (#2436)
* docs: fix operation image alt text

* Sync linted slim tests
2026-06-30 10:07:06 +02:00
Nicolò Boschi 93100ed314 Remove Atlas Cloud section from README
Removed Atlas Cloud promotional content and related instructions from the README.
2026-06-25 14:50:08 +02:00
lucaszhu-hue f8d277697d feat: add Atlas Cloud as an OpenAI-compatible LLM provider (#2362)
Atlas Cloud (https://www.atlascloud.ai) exposes an OpenAI-compatible
chat/completions endpoint, so it slots into the existing
OpenAICompatibleLLM path exactly like deepseek / zai / opencode-go.

Set `HINDSIGHT_API_LLM_PROVIDER=atlas` to route fact extraction,
reflection and consolidation through Atlas Cloud. The base URL defaults
to https://api.atlascloud.ai/v1 and the default model is
deepseek-ai/deepseek-v4-pro (a reasoning model — give it enough
max_tokens, >= 512).

Changes:
- engine/llm_wrapper.py: register "atlas" in create_llm_provider(),
  LLMProvider.valid_providers, and the default base_url map
- engine/providers/openai_compatible_llm.py: register "atlas" in
  valid_providers, default base_url, and the API-key-required check
- config.py: PROVIDER_DEFAULT_MODELS["atlas"] = deepseek-ai/deepseek-v4-pro
- hindsight-embed control center: add Atlas Cloud to the provider wizard
- docs: add Atlas Cloud to llmProviders.json (drives the providers grid
  and table) and a config example in developer/models.mdx
- README + .env.example: document the new provider

Verified end-to-end: instantiated the atlas provider through Hindsight's
own create_llm_provider() and made a live call() to
deepseek-ai/deepseek-v4-pro (HTTP 200, valid content + token usage).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 13:03:16 +02:00
Sanderhoff-alt 60fea4c254 docs: fix stale documentation links (#2221)
Update integration and installation documentation URLs so they point
to the public Hindsight docs site instead of stale Cloud docs paths.
2026-06-16 16:18:29 +02:00
Ben e8884bc0a0 docs: remove broken gitcgr code-graph badge (#2133)
The gitcgr.com SSL certificate has expired, so the code-graph badge
image (added in #648) renders as a broken-image icon in the README for
all visitors. Remove it since the third-party service appears defunct
and we don't control the cert.
2026-06-11 17:06:28 +02:00
Nicolò Boschi e0221cae6e docs: flag Intel (x86_64) macOS as slim-only in supported-platforms grid (#2115) (#2129)
* docs: flag Intel (x86_64) macOS as slim-only in supported-platforms grid (#2115)

`pip install hindsight-all` on Intel Macs silently backtracks to a
months-old release: every release since 0.4.18 pulls hindsight-api-slim[all],
whose local-ML extra requires torch>=2.6.0 and mlx, neither of which ships
x86_64 macOS wheels. The docs' supported-platforms grid claimed Intel macOS
bare-metal pip was "fully supported", which is false.

- Split the macOS grid row into Apple Silicon (fully supported) and
  Intel/x86_64 (Docker + pg0 ✅, bare-metal pip ⚠️ slim only).
- Mirror the grid into README.md.
- Point Intel-Mac users to hindsight-all-slim / hindsight-api-slim plus a
  hosted embeddings/reranker provider or the in-process ONNX backend
  (which has x86_64 macOS wheels).
- Replace the ad-hoc warnings with one-line pointers to the grid.

Refs #2115

* docs: move Supported Platforms grid to bottom of README

* docs: simplify README platform table to icons, link docs for details
2026-06-11 11:53:16 +02:00
Nicolò Boschi 75a7c19d6a fix(docker): clear diagnostic for pg0 bind-mount permission failure (#1483) (#2010)
* fix(docker): clear diagnostic for pg0 bind-mount permission failure (#1483)

The standalone image runs rootless (UID 1000). A host bind mount whose
directory isn't owned by UID 1000 — the default on macOS Docker Desktop and
most non-1000 Linux hosts — makes embedded pg0 fail with the opaque
"Permission denied (os error 13)". Auto-chowning the volume would require
running as root, which we deliberately avoid.

Instead:
- Recommend a Docker named volume in the README/installation docs; named
  volumes are seeded with the image's UID-1000 ownership, so they work with
  zero setup and stay rootless.
- Add a pg0 writability pre-check in start-all.sh that prints an actionable
  message (named volume, or --user) and exits cleanly instead of letting pg0
  emit os-error-13. Skipped when an external database is configured.
- Add regression tests for the new check in test-start-all.sh.

* docs(readme): drop bind-mount explanation, keep named-volume fix
2026-06-05 14:39:09 +02:00
Nicolò Boschi 8a1f0461cf docs(docker): drop --rm, add --name + restart policy in run examples (#1927)
A single child segfault under load propagates through start-all.sh and
exits the whole container; with the documented --rm run there was no
recovery. Replace --rm with --name hindsight --restart unless-stopped in
the documented server-run commands so a transient crash self-heals.

Leaves the throwaway --rm --entrypoint sh model-inspection command in
custom-models/README.md untouched. Refs #1918.
2026-06-02 14:19:16 +02:00
Chris Latimer 5a2c138779 Updated benchmark scores 2026-05-14 05:30:57 -06:00
Nicolò Boschi 7140f991d9 docs: add Oracle Database as supported enterprise storage (#1356)
* docs: add Oracle Database as supported enterprise storage option

PostgreSQL remains the primary and recommended backend. Oracle is
mentioned as a drop-in alternative for enterprise environments with
full feature parity.

* docs: remove untested Oracle managed services list

* docs: specify Oracle AI Database 26ai as the supported version

* docs: use "Oracle AI Database" consistently, drop version suffix
2026-04-30 12:58:33 +02:00
Vitali Avagyan caa53ee370 docs: add gitcgr code graph badge (#648) 2026-03-22 21:28:29 +01:00
Ethan Clarke 2344484f77 feat: add MiniMax LLM provider support (#550)
Add MiniMax as a supported LLM provider via the OpenAI-compatible interface.

- Register MiniMax in the provider factory and valid providers list
- Set default base URL to https://api.minimax.io/v1
- Set default model to MiniMax-M2.5 in PROVIDER_DEFAULT_MODELS
- Add temperature clamping for MiniMax (must be >0, ≤1.0)
- Add API key validation (MiniMax requires an API key)
- Add MiniMax configuration example to .env.example
- Update documentation (models.md, configuration.md, embed.md, CLAUDE.md, README.md)
- Add unit and integration tests for MiniMax provider

Co-authored-by: octo-patch <octo-patch@users.noreply.github.com>
2026-03-13 10:17:55 +01:00
Nicolò Boschi e210953d05 add trending badge HTML in README.md 2026-03-12 16:26:17 +01:00
Chris Bartholomew 5fef54d501 Fix typos in README 2026-02-23 15:32:49 -05:00
Chris Bartholomew a1f22dabd2 Replace waitlist links with direct Hindsight Cloud signup URL (#349)
The waitlist is no longer needed. Update all references from
vectorize.io/hindsight/cloud to ui.hindsight.vectorize.io/signup
and change "request early access" language to "sign up".
2026-02-11 20:51:32 +01:00
Nicolò Boschi dd1e0986a1 feat: add docs skill (#335)
* feat: add docs skill

* feat: add docs skill
2026-02-10 14:41:51 +01:00
Nicolò Boschi a3a9d7b37d doc: prepare doc for 0.4.10 (#325)
* doc: prepare doc for 0.4.10

* fixe

* ci
2026-02-09 11:42:37 +01:00
Van Vuong Ngo 5179d5f77d feat: add docker-compose example (#313)
* feat: add docker-compose example

* fix T&V

* doc: add how to quick start hindsight with docker-compose

* chore: fix typo
2026-02-09 10:14:21 +01:00
Van Vuong Ngo d0f67c9f8b doc: improve Node.js client example (#320)
Fix doc to increase the developer experience...

- if the code is intended to be a CommonJS by using `require` then you have to wrap `await` calls in an async function
- calling `client.recall` with using the results
2026-02-07 10:02:41 +01:00
Nicolò Boschi f64817814a feat: slim docker distro (#314)
* feat: slim docker distro

* feat: slim docker distro

* push
2026-02-06 15:00:24 +01:00
Chris Latimer 7300d5be4b README video 2026-01-28 19:26:12 -07:00
Chris Latimer 81c82d9b93 README tweak 2026-01-28 19:21:15 -07:00
Chris Latimer 7551e65e55 Updated video in readme 2026-01-28 14:40:44 -07:00
Nicolò Boschi d2b797fff8 doc: improve readme (#223)
* README updates

* Add captions to video

* Use cases and new banner

---------

Co-authored-by: Chris Latimer <chris.latimer@vectorize.io>
2026-01-28 17:55:20 +01:00
Chris Bartholomew 70ce979fbe doc: update expired Slack invite link (#157) 2026-01-13 16:57:23 -05:00
Nicolò Boschi c8c7603580 feat(doc): add new config options and supported providers (#84) 2026-01-01 17:09:05 +01:00
Chris Latimer 967e586e01 Add model providers on README 2025-12-24 10:46:53 -07:00
Chris Bartholomew 476a62da47 Add Hindsight Cloud links to README and docs (#42)
- Add Hindsight Cloud link to README header
- Add Hindsight Cloud navbar item in docs
- Add callout in installation docs for managed alternative
2025-12-17 11:09:36 -05:00
Nicolò Boschi c0a0f447b7 Update README.md 2025-12-17 10:20:02 +01:00
Chris Latimer a6e8944ff0 README updates 2025-12-16 07:09:30 -07:00
Chris Latimer dfea4dbe15 Trademark to README 2025-12-14 18:58:34 -07:00
Chris Latimer 44e9571572 README banner 2025-12-12 09:03:59 -07:00
Nicolò Boschi 2c1be4cf47 Update Docker run command in README o3 mini 2025-12-11 14:53:52 +01:00
Nicolò Boschi 99db7b26c3 fix docs on clients 2025-12-11 14:23:56 +01:00
Nicolò Boschi fa554b8980 brandind and misc fixes 2025-12-11 12:46:48 +01:00
Chris Latimer f813a807e7 README banner 2025-12-10 23:59:53 -05:00
Chris Latimer f7e8b1097b Fix README images 2025-12-10 10:59:59 -07:00
Chris Latimer cffb14f166 Update README 2025-12-09 10:17:09 -07:00
Chris Bartholomew 6daa3ad135 docs: update documentation URL to custom domain (#21)
Update docs link from vectorize-io.github.io/hindsight to
hindsight.vectorize.io.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 16:59:57 -05:00
Nicolò Boschi cf2f739469 fix readme 2025-12-05 07:43:19 +01:00
Nicolò Boschi 06b956a553 new names 2025-12-04 21:34:05 +01:00
Nicolò Boschi 6073ac4ffd docs, packages and quick start 2025-12-04 12:49:01 +01:00
Nicolò Boschi bb6bec511c add repo files 2025-12-04 10:20:23 +01:00