mirror of
https://github.com/vectorize-io/hindsight.git
synced 2026-09-14 19:31:49 +08:00
b67e813a83
* docs: add langgraph.py example snippets for integration docs Adds embeddable code snippets covering all three LangGraph integration patterns: tools (ReAct agent), memory nodes, BaseStore, and constructor options. Follows the same [docs:section] pattern as ai-sdk.ts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * LangGraph integration: add memory_instructions, fix nodes, remove BaseStore - Add memory_instructions() for standalone LangChain use without a graph - Add recall_types, recall_include_entities to create_recall_node() - Add metadata, document_id to create_retain_node() - Nodes now raise HindsightError instead of silently swallowing errors - Remove HindsightStore (BaseStore adapter) — leaky KV abstraction over semantic memory (get unreliable, delete no-op, list session-scoped) - Update README: cloud-first examples, add memory_instructions section - Update docs example: replace base-store with memory-instructions snippet - Fix pre-existing test failures (user_agent mock mismatch) - 52 unit tests pass, 13 E2E tests pass Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style(langgraph): run ruff format on tools.py Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(langgraph): keep cloud product unnamed in module docstring The docstring example said "Uses Hindsight Cloud by default" — names the cloud product in OSS source. Per the integration review's OSS-clean rule, the cloud should be reachable by overriding hindsight_api_url but not explicitly named in core code. Rephrased to "Uses the default API URL" and "Or point at a different instance". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore(langgraph): address PR review polish items - __version__ now derived from package metadata (was stale 0.1.0 vs pyproject 0.1.2) - pyproject description no longer references the removed store adapter - create_hindsight_tools return type tightened from `list` to `list[BaseTool]` - memory_instructions docstring now documents the deliberate silent-fallback on Hindsight error (vs nodes which raise) — load-bearing API contract - create_retain_node docstring now notes ToolMessage / FunctionMessage content is intentionally skipped No behaviour change; 52/52 unit tests still pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(langgraph): default to Cloud without configure() + add gated E2E suite resolve_client() now falls back to DEFAULT_HINDSIGHT_API_URL and the HINDSIGHT_API_KEY env var when configure() was never called, matching the Superagent pattern and satisfying the "default to Cloud" goal. Previously create_hindsight_tools(bank_id=...) raised without an explicit URL/config. Also add an in-tree, pytest-gated tests/test_e2e.py covering the tools, graph-node, and memory_instructions patterns (skips when no live Hindsight), update unit tests to assert the Cloud-default behavior, and close the Hindsight clients in the manual smoke scripts to avoid unclosed-session warnings. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(langgraph): drop "Hindsight Cloud" product name from tools docstring Keeps the OSS source product-agnostic — cloud naming belongs in the cookbook/blog, not the package. Behavior unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * test(langgraph): bucket E2E as requires_real_llm Mark the live E2E suite (drives a live Hindsight server) with a module-level requires_real_llm marker, registered in pyproject, mirroring the core test split from #1469. Deterministic bucket (-m "not requires_real_llm") = 53 unit tests; real-LLM bucket (-m requires_real_llm) = 6 E2E. Note: there is no test-langgraph-integration CI job yet, so this marker is not wired into CI; adding that job is tracked as a follow-up in the review log. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * test(langgraph): add deterministic compiled-graph flow test (mock bucket) Wires a real compiled StateGraph (recall -> agent -> retain) backed by a mocked Hindsight client, asserting the recall node injects memory and the retain node stores the human turn — the in-CI / no-keys analog of the live graph test. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci(langgraph): add test-langgraph-integration job + 3 supporting wiring places Audit finding (2026-06-02): hindsight-langgraph has zero CI presence in .github/workflows/test.yml — no detect-changes output, no path filter, no job definition, no aggregate-gate entry. The prior review-log called this PR MERGE-READY based on "green at time of audit"; the audit caught that green was consistent with "no job exists to fail" — changes to the package silently bypassed CI. This commit adds the missing wiring, mirroring the AutoGen #1868 pattern that added the same scaffold for that package's integration job: 1. L41 detect-changes output: integrations-langgraph 2. L126 path filter: hindsight-integrations/langgraph/** 3. L2914 job def: test-langgraph-integration - timeout-minutes: 30 (matches autogen/openai-agents) - runs uv build + uv sync --frozen + pytest with the `-m "not requires_real_llm"` exclusion so the deterministic bucket runs in PR CI while the live bucket is reserved for the dedicated/nightly job (the standing convention from PR #1469). 4. L3911 aggregate gate entry: test-langgraph-integration Verification: - YAML parses (python -c 'yaml.safe_load(...)'). - Deterministic bucket unchanged: 55 pass / 6 deselected. The PR's existing integration code is unchanged — this is purely test-yml scaffolding. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: DK09876 <dk09876@DK09876s-MacBook-Pro.local>