Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
14c440d
feat(llm): add ANGLE_READER/CRITIC/SYNTHESIZER/RECONCILER model roles
yilu331 Apr 23, 2026
1d5abb5
feat(llm): add Tool and ToolRegistry primitives
yilu331 Apr 23, 2026
5d9d6d1
feat(llm): add tools, tool_choice, model_role to LiteLLMClient
yilu331 Apr 23, 2026
d68bf97
test(llm): add tool-call mock helpers and fixture
yilu331 Apr 23, 2026
79d6b88
feat(llm): implement run_tool_loop with capability fallback
yilu331 Apr 23, 2026
d987e47
fix(llm): return finished_reason='error' when tool loop raises
yilu331 Apr 23, 2026
97c23de
feat(schema): add source_span/notes/reader_angle to profile+playbook …
yilu331 Apr 23, 2026
448756a
feat(storage/sqlite): add source_span/notes/reader_angle to profiles …
yilu331 Apr 23, 2026
3dbb12d
feat(config): add extraction_backend/search_backend + dispatcher fact…
yilu331 Apr 23, 2026
e3bcfc5
feat(prompts): add 6 extraction reader prompts
yilu331 Apr 23, 2026
54d3a8f
feat(extraction): add ProfileReader and PlaybookReader angle-speciali…
yilu331 Apr 23, 2026
5606e22
feat(prompts): add critic and reconciler prompts
yilu331 Apr 23, 2026
ebccdf3
feat(extraction): add ProfileCritic, PlaybookCritic, Reconciler, summ…
yilu331 Apr 23, 2026
b59fabb
feat(extraction): add AgenticExtractionService orchestrator
yilu331 Apr 23, 2026
fdbbd38
feat(prompts): add 6 search agent prompts
yilu331 Apr 23, 2026
ecd9a91
feat(search): add ProfileSearchAgent and PlaybookSearchAgent
yilu331 Apr 23, 2026
ed29fe0
feat(search): add ProfileSynthesizer and PlaybookSynthesizer
yilu331 Apr 23, 2026
7e76025
feat(search): add AgenticSearchService orchestrator
yilu331 Apr 23, 2026
83faaf7
test(schema): pin UnifiedSearchResponse.msg round-trip contract
yilu331 Apr 23, 2026
0109e8c
test(eval): add 3 extraction golden cases
yilu331 Apr 23, 2026
57fcb5e
test(eval): add 3 search golden cases
yilu331 Apr 23, 2026
518631d
test(eval): add extraction and search judge rubrics
yilu331 Apr 23, 2026
637bf58
test(eval): add LLMJudge and JudgeScore
yilu331 Apr 23, 2026
c6651c3
test(eval): add polars aggregator for eval results
yilu331 Apr 23, 2026
5ede554
test(eval): add agentic-vs-classic comparison harness
yilu331 Apr 23, 2026
207a578
test(integration): add agentic backend full-pipeline smoke
yilu331 Apr 23, 2026
442e4cb
test: register Phase 3-4 agentic prompts in PROMPT_VERSION_MAP
yilu331 Apr 23, 2026
8d6da3d
fix: address review-loop findings (iteration 1) - F001 F002 F003 F004…
yilu331 Apr 23, 2026
3c6d3c7
fix: address review-loop iteration 2 - REG001 + F015 F016 F017 F018
yilu331 Apr 23, 2026
0c53a56
feat(extraction): route GenerationService.run through agentic factory
yilu331 Apr 23, 2026
160526e
fix(critics): narrow RefineProfileArgs.time_to_live to Literal to cat…
yilu331 Apr 23, 2026
76def72
feat(extraction): INFO-log per-reader, per-critic, and reconciler sum…
yilu331 Apr 23, 2026
56987b7
feat(reconciler): INFO-log per-decision (supersede/merge/keep_both) w…
yilu331 Apr 23, 2026
7c1c841
refactor(extraction): derive reader/critic counts from class constant…
yilu331 Apr 23, 2026
c87197b
feat(extraction): wire PlaybookDeduplicator into agentic adapter (cla…
yilu331 Apr 23, 2026
c47bde2
feat(extraction,search): route agentic tool-loop turns to llm_io.log
yilu331 Apr 23, 2026
1fa9091
feat(logging): render tool_calls + tool_call_id in format_messages_fo…
yilu331 Apr 23, 2026
3a53729
feat(logging): render ToolCallingChatResponse tool_calls in log_model…
yilu331 Apr 23, 2026
5926766
fix(profile): use NEVER_EXPIRES_TIMESTAMP sentinel for infinity TTL
yilu331 Apr 24, 2026
8c2cd8b
feat(extraction): add plan.py scaffolding for agentic-v2
yilu331 Apr 24, 2026
105dec6
feat(extraction): add hard invariants A/B/D/F/J for agentic-v2
yilu331 Apr 24, 2026
3c6e126
feat(extraction): add soft invariants + commit_plan orchestrator
yilu331 Apr 24, 2026
8c1e677
feat(extraction): read-only tool handlers for agentic-v2
yilu331 Apr 24, 2026
050ce7c
feat(extraction): mutating tool handlers + apply_plan_op
yilu331 Apr 24, 2026
642561d
feat(extraction): EXTRACTION_TOOLS + SEARCH_TOOLS registries
yilu331 Apr 24, 2026
d4df83f
feat(llm): add EXTRACTION_AGENT and SEARCH_AGENT ModelRole values
yilu331 Apr 24, 2026
e78a5c8
feat(prompts): add extraction_agent v1.0.0 prompt for agentic-v2
yilu331 Apr 24, 2026
77014dc
feat(prompts): add search_agent v1.0.0 prompt for agentic-v2
yilu331 Apr 24, 2026
bab6e62
feat(extraction): add ExtractionAgent runner for agentic-v2
yilu331 Apr 24, 2026
91319de
feat(search): add SearchAgent runner for agentic-v2
yilu331 Apr 24, 2026
e5cc383
refactor(agentic-v2): promote HandlerBundle, type search_answer, add …
yilu331 Apr 24, 2026
690dccc
feat(extraction): rewrite AgenticExtractionRunner for v2 single-loop
yilu331 Apr 24, 2026
3717ae4
refactor(extraction): drop dead org_id param; hoist aggregator out of…
yilu331 Apr 24, 2026
5f0bcaf
chore(extraction): remove reader stack (6 readers + prompts + tests)
yilu331 Apr 24, 2026
d35da1d
chore(extraction): remove critics + reconciler
yilu331 Apr 24, 2026
ffc6a71
chore(extraction): remove ProfileDeduplicator + PlaybookDeduplicator
yilu331 Apr 24, 2026
8052df8
chore(search): replace 6-agent + 2-synthesizer stack with SearchAgent
yilu331 Apr 24, 2026
7c3a123
chore(llm): drop deprecated ModelRole values
yilu331 Apr 24, 2026
dbaf2f6
test(extraction): group 1 eval fixtures — mutation patterns
yilu331 Apr 24, 2026
d6a8dfa
test(eval): group 2 eval fixtures — Supermemory failure modes
yilu331 Apr 24, 2026
dda1059
test(eval): group 3 eval fixtures — agent loop behavior
yilu331 Apr 24, 2026
0a68920
test(eval): add eval runner + semantic judge for agentic-v2
yilu331 Apr 24, 2026
3bae37c
test(extraction): e2e test for agentic-v2 via GenerationService.run
yilu331 Apr 24, 2026
e0e9651
fix(extraction): resolve tentative-id oscillations in commit_plan
yilu331 Apr 24, 2026
042c1c6
refactor(extraction): drop dead output_pending_status from AgenticExt…
yilu331 Apr 24, 2026
17e08ba
feat(search): typed SearchResult + populated UnifiedSearchResponse un…
yilu331 Apr 24, 2026
9e42edd
chore(lint): scope pyright to production code + consolidate UI enums
yilu331 Apr 24, 2026
6763330
feat(llm): retry structured-output parse failures in _make_request
yilu331 Apr 24, 2026
465c4ed
fix(logging): wire uvicorn.access formatter to uvicorn.logging.Access…
yilu331 Apr 24, 2026
a8de04f
fix(extraction): compute expiration_timestamp from TTL in apply_plan_op
yilu331 Apr 24, 2026
166418f
fix(extraction): specialise extraction per entity kind (tools + prompt)
yilu331 Apr 24, 2026
122490b
feat(logging): append local UTC offset to log timestamps
yilu331 Apr 24, 2026
95808ea
refactor(logging): use ISO 8601 extended offset + TZ abbreviation
yilu331 Apr 24, 2026
93efc71
refactor(prompts): reframe extraction + search agents around self-imp…
yilu331 Apr 24, 2026
ac15700
feat(observability): per-run elapsed + turns + token + cost summary f…
yilu331 Apr 24, 2026
fb8f999
fix(extraction): compute query embedding for agentic search handlers
yilu331 Apr 24, 2026
c462b64
refactor(prompts): v1.3.0 — atomic-fact profiles + no-overlap rule
yilu331 Apr 24, 2026
fac59f6
feat(cli): expose loaded env path + config_paths kwarg in startup banner
yilu331 Apr 24, 2026
c1d02e6
refactor(prompts): v1.4.0 — structured trigger + markdown-bullet cont…
yilu331 Apr 24, 2026
6d5df02
refactor(prompts): aggregator v2.1.0 — bullet-content + structured tr…
yilu331 Apr 24, 2026
b3e3986
feat(cli): surface llm_io.log path in startup banner
yilu331 Apr 24, 2026
9336495
refactor(api): rename search_profiles -> search_user_profiles
yilu331 Apr 25, 2026
9a82308
fix(agentic): thread request_id through ExtractionCtx so profiles + p…
yilu331 Apr 25, 2026
a499f17
fix(search): wire AgenticSearchService into the public /api/search path
yilu331 Apr 25, 2026
863df90
feat(prompts): search_agent v1.2.0 — verbatim-first to fix vector recall
yilu331 Apr 25, 2026
7b44ae4
tune(search): iter 1 — Tighten search workflow: enforce verbatim-firs…
yilu331 Apr 26, 2026
0abaa50
perf(agentic): tight max_steps caps + thread the budget into prompts
yilu331 Apr 26, 2026
081628b
tune(search): iter 1 — Tighten follow-up templates, emphasize tempora…
yilu331 Apr 26, 2026
3a6c74d
tune(search): iter 2 — Clarify index-ordering, tighten follow-up rule…
yilu331 Apr 26, 2026
38c2565
tune(search): iter 3 — Tighten and clarify verbatim-first workflow, s…
yilu331 Apr 26, 2026
b4d3560
tune(extraction): iter 1 — Add explicit temporal/date encoding, count…
yilu331 Apr 26, 2026
c73852b
tune(extraction): iter 2 — Strengthen temporal and counting rules, em…
yilu331 Apr 26, 2026
0a046c5
tune(extraction): iter 3 — Tighten temporal and counting rules, add e…
yilu331 Apr 26, 2026
bd47944
tune(search): iter 1 — Tighten atom-extraction and counting/temporal …
yilu331 Apr 26, 2026
f8ba5b4
feat(profiles): shorter profile_id (12 hex) for LLM tool-call reliabi…
yilu331 Apr 26, 2026
5ad98e9
fix(search): reject empty user_id/agent_version at the API boundary
yilu331 Apr 26, 2026
f7485b3
fix(reflexio): address CodeRabbit review comments
yilu331 Apr 26, 2026
e7f6c2b
fix(search): drop overly strict agent_version validation
yilu331 Apr 26, 2026
ad3a681
feat(cli): reflexio-native OpenAI Codex OAuth (no OpenClaw dependency)
yilu331 Apr 26, 2026
e55a955
feat(agentic): T-R dates_mentioned schema + search-only mode toggle
yilu331 Apr 26, 2026
6907f89
refactor(agentic): dates_mentioned: list[str] -> date_mentioned: str
yilu331 Apr 26, 2026
a881744
tune(extraction): iter 1 — Strengthened date encoding and atomic coun…
yilu331 Apr 26, 2026
91bb1ce
revert: remove typed date_mentioned field — field didn't lift T-R
yilu331 Apr 26, 2026
b3bd104
tune(extraction): iter 1 — Strengthened date-encoded atomic profile e…
yilu331 Apr 26, 2026
80bbfb4
tune(extraction): iter 1 — Strengthened temporal/date encoding and at…
yilu331 Apr 26, 2026
203a0e2
feat(extraction-prompt): v1.5.0 — relative-time resolution + agent-fa…
yilu331 Apr 27, 2026
391e66b
tune(extraction): iter 1 — Strengthened profile extraction for explic…
yilu331 Apr 27, 2026
128d752
fix(extraction): preserve publisher wall-clock time end-to-end
yilu331 Apr 27, 2026
8b3f40e
tune(extraction): iter 1 — Strengthened temporal and counting extract…
yilu331 Apr 27, 2026
d9a4aef
tune(extraction): iter 1 — Tightened extraction guidance to enforce d…
yilu331 Apr 27, 2026
df00c70
feat(llm): add Nomic local embedding provider (sentence-transformers)
yilu331 Apr 27, 2026
f871afa
tune(extraction): iter 1 — Tightened temporal and counting guidance, …
yilu331 Apr 27, 2026
ce4e861
fix(extraction): scrub tune-set entities from v1.5.0 examples
yilu331 Apr 27, 2026
a53ac5b
feat(extraction): add user-preference / lifestyle capture priority
yilu331 Apr 27, 2026
fa5ec1a
fix(extraction): scrub structural pattern leakage from v1.5.0 examples
yilu331 Apr 27, 2026
1dc0e97
feat(server): add rerank_user_profiles and storage_stats tools
yilu331 Apr 27, 2026
da83493
feat(search-agent): v1.4.0 with orchestration patterns + tool palette
yilu331 Apr 27, 2026
a076950
tune(search): iter 1 — Refine search orchestration for counting, upda…
yilu331 Apr 27, 2026
0e0134e
feat(search-agent): gated Pattern H — escalation only, not default
yilu331 Apr 28, 2026
c3b4c3b
tune(search): iter 1 — Strengthen orchestration for assistant-artifac…
yilu331 Apr 28, 2026
d023436
feat(search-agent): embed rehydration usage per pattern; remove stand…
yilu331 Apr 28, 2026
e5ef9f0
feat(search-agent): make Pattern E and G rehydration mandatory steps
yilu331 Apr 28, 2026
e67187d
feat(search-agent): bump max_steps 3->5 to accommodate mandated rehyd…
yilu331 Apr 28, 2026
00aa319
feat(search-agent): explicit pattern dispatch above the pattern bodie…
yilu331 Apr 28, 2026
5b3babb
feat(llm): route search_agent role to MiniMax-M2.7 for OpenAI provider
yilu331 Apr 28, 2026
4255aa0
feat(search-agent): multi-stage fallback schema for non-tool-calling …
yilu331 Apr 28, 2026
733fe75
feat(llm): route search_agent to gpt-5.5 (was minimax/MiniMax-M2.7)
yilu331 Apr 28, 2026
da42e95
feat(search-agent): add few-shot example traces for tool selection
yilu331 Apr 28, 2026
484e3fd
fix(search-agent): disambiguate get_session_excerpt vs get_user_profile
yilu331 Apr 28, 2026
69b4ddd
refactor(search-agent): rename get_session_excerpt -> read_session_text
yilu331 Apr 28, 2026
38d1e5c
feat(extraction): v1.6.0 — incidental-update capture + multi-entity s…
yilu331 Apr 28, 2026
e007672
feat(extraction): v1.7.0 — keep multi-entity split + incidental updat…
yilu331 Apr 29, 2026
ed8e847
feat(search): pipe-style search_user_profiles, drop rerank_user_profiles
yilu331 Apr 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ client.publish_interaction(
)

# Search profiles
profiles = client.search_profiles(
profiles = client.search_user_profiles(
reflexio.SearchUserProfileRequest(query="deployment region preference")
)

Expand Down
4 changes: 2 additions & 2 deletions client_dist/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ print(response.success, response.message)

```python
# Semantic search for profiles
results = client.search_profiles(user_id="user-123", query="password preferences")
results = client.search_user_profiles(user_id="user-123", query="password preferences")
for profile in results.profiles:
print(profile.profile_name, profile.profile_content)

Expand Down Expand Up @@ -313,7 +313,7 @@ In async contexts (e.g., FastAPI), fire-and-forget uses the existing event loop.

| Method | Description |
|--------|-------------|
| `search_profiles()` | Semantic search for profiles |
| `search_user_profiles()` | Semantic search for profiles |
| `get_profiles()` | Get profiles for a user |
| `get_all_profiles()` | Get all profiles across users |
| `delete_profile()` | Delete profiles by ID or search query |
Expand Down
17 changes: 17 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ dependencies = [
"typer>=0.15.0",
"rich>=13.0.0",
"chromadb>=1.5.8",
# Cross-encoder reranker + local embedding providers — chromadb pulls
# ``sentence-transformers`` transitively, but we depend on it directly
# so the CrossEncoder/SentenceTransformer surface is guaranteed.
"sentence-transformers>=3.0",
]

[project.optional-dependencies]
Expand Down Expand Up @@ -79,6 +83,7 @@ dev = [
"python-semantic-release>=10.0.0",
"build>=1.0.0",
"twine>=6.0.0",
"polars>=1.40.1",
]
docs = [
"mkdocs>=1.5.3",
Expand Down Expand Up @@ -217,6 +222,18 @@ max-complexity = 20
quote-style = "double"
indent-style = "space"

[tool.pyright]
include = ["reflexio", "tests"]
exclude = [
"reflexio/integrations/langchain",
"tests/test_scripts",
"**/__pycache__",
"**/.venv",
"benchmark",
"notebooks",
]
reportMissingImports = "warning"

[tool.mutmut]
paths_to_mutate = [
"reflexio/server/services/service_utils.py",
Expand Down
11 changes: 8 additions & 3 deletions pyrightconfig.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
{
"include": ["reflexio"],
"include": ["reflexio", "tests"],
"exclude": [
"reflexio/website", "reflexio/tests", "reflexio/data",
"reflexio/public_docs", "**/__pycache__",
"reflexio/reflexio_commons/tests",
"reflexio/reflexio_client/tests",
"reflexio/scripts", "notebooks", "demo"
"reflexio/scripts", "notebooks", "demo",
"reflexio/integrations/langchain",
"tests/test_scripts",
"**/.venv",
"benchmark"
],
"extraPaths": ["."],
"pythonVersion": "3.14",
"typeCheckingMode": "basic",
"reportMissingTypeStubs": false
"reportMissingTypeStubs": false,
"reportMissingImports": "warning"
}
2 changes: 1 addition & 1 deletion reflexio/benchmarks/retrieval_latency/backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class BackendHandle:

Attributes:
name (str): Short backend identifier, e.g. ``"sqlite"``.
reflexio (Reflexio): Service-layer facade — call ``search_profiles``
reflexio (Reflexio): Service-layer facade — call ``search_user_profiles``
etc. directly on this for the service layer benchmark.
storage (BaseStorage): Underlying storage instance, needed for
swapping ``_get_embedding`` during seeding and the timed loop.
Expand Down
4 changes: 2 additions & 2 deletions reflexio/benchmarks/retrieval_latency/bench.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ def _service_call(
"""
match retrieval:
case "profile":
reflexio.search_profiles(_build_profile_request(query_idx))
reflexio.search_user_profiles(_build_profile_request(query_idx))
case "user_playbook":
reflexio.search_user_playbooks(_build_user_playbook_request(query_idx))
case "agent_playbook":
Expand All @@ -188,7 +188,7 @@ def _service_call(

# Map retrieval type to (HTTP path, request builder) for the http layer.
_HTTP_ROUTES: dict[RetrievalType, tuple[str, Callable[[int], Any]]] = {
"profile": ("/api/search_profiles", _build_profile_request),
"profile": ("/api/search_user_profiles", _build_profile_request),
"user_playbook": ("/api/search_user_playbooks", _build_user_playbook_request),
"agent_playbook": ("/api/search_agent_playbooks", _build_agent_playbook_request),
"unified": ("/api/search", _build_unified_request),
Expand Down
Loading