Skip to content

GML-2314 Release GraphRAG 2.0.3 - #69

Merged
chengbiao-jin merged 15 commits into
mainfrom
release_2.0.3
Oct 12, 2026
Merged

chengbiao-jin merged 15 commits into
mainfrom
release_2.0.3

Conversation

@chengbiao-jin

@chengbiao-jin chengbiao-jin commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Release GraphRAG 2.0.3 into main. Merges all 2.0.3 work accumulated on release_2.0.3 (clean fast-forwardable superset of main).

Epic: GML-2314

Added

  • Delete chat conversations individually, in a selected group, or all at once.

Changed

  • Requires pyTigerGraph 2.0.5 and tigergraph-mcp 1.0.4.
  • Agentic answers handle multi-part and follow-up questions better — each part is searched on its own, earlier turns are resolved from the conversation, and an ambiguous reference gets one clarifying question.
  • The Migration Assistant repairs only graphs it can repair in place — graphs created before 1.4 are reported as needing to be recreated.
  • token_limit: 0 uses the chat model's own input limit instead of meaning unlimited.
  • query_with_history callers supply their own conversation context.

Fixed

  • Answers no longer fail when retrieved context exceeds the model's input limit, and agentic answers send each passage once.
  • Document search requires valid credentials.
  • Knowledge-graph rebuild works when signed in with a token.
  • Contextual search returns each passage once, at its correct position, and honours its search options.
  • Word tables are extracted; unreadable, legacy .doc and empty files are reported instead of ingested.
  • Conversation context on the query-with-history endpoint no longer crosses callers.
  • MCP server delete is confirmed and saved; Cancel no longer deletes a server.
  • Agentic planning with OpenAI models no longer starts with a rejected request.
  • Agentic mode is used only with models that actually call tools.
  • Gemini models no longer run tools on their own (SDK automatic function calling disabled).
  • Trace steps report what searches retrieved.

See CHANGELOG.md [2.0.3] for full details.

…t resolution, clarifying question fallback (#64)

* Planner and react: multi-clause routing, conversation context resolution, clarifying question fallback

- When a question refers to something from earlier in the conversation,
  resolve it from ## Conversation and use the full name in retrieval args.
  If history has multiple candidates and it is unclear which is meant,
  ask the user one short clarifying question instead of guessing.

- For each unstructured retrieval step, set the question to that clause
  only as a standalone search query. Do not pass the full multi-part
  question, a clause already covered by another step, or an unresolved
  reference from conversation history.

- When a question has multiple clauses, assign each clause to its own
  retrieval step; plan additional RAG steps for any clause not yet covered.

- Synthesizer: answer each part of a multi-part question from its matching
  source; do not mix structured notes with document-passage answers.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Planner/react: resolve underspecified questions from conversation history before any retrieval

* Synthesizer: generic multi-part answer rule, remove dataset-specific wording

---------

Co-authored-by: Prins Kumar <prinskumar@Prinss-MacBook-Air.local>
Co-authored-by: Cursor <cursoragent@cursor.com>
…ut format (#66)

Regression eval: fix LLM judge errors with gemini-3.5-flash

- evaluator.py: pre-load common.config, hallucination_check, openai.types.chat
  at module level to prevent race conditions when ThreadPoolExecutor workers
  all try to import the same partially-initialized module simultaneously
- hallucination_check.py: replace PydanticOutputParser format instructions
  (full JSON schema) with a simple inline example so models do not echo
  the schema definition back instead of filling in values
- recall_evaluator.py: handle list content blocks in LLM judge response
  (gemini-3.5-flash returns resp.content as a list, not a string)

Co-authored-by: Prins Kumar <prinskumar@Prinss-MacBook-Air.local>
….0.3 (#67)

* Take query-with-history conversation context from the request

- Conversation history is no longer retained on the server between calls,
  so concurrent callers no longer receive each other's previous questions
  and answers as context
- Callers supply prior turns on the request; the most recent are used
- Requests that send no turns are answered without prior context
- Update the demo notebook to carry its own conversation

Refs: GML-2194

* Report unreadable files as failed instead of ingesting the error

- A PDF or image that cannot be extracted no longer becomes a document
  whose text is the failure notice, so no placeholder content reaches the
  knowledge graph or turns up in answers
- Such a file is reported as failed with the reason; other files in the
  same upload still process normally
- Failure messages name the file and the remedy, keeping parser detail in
  the server log

Refs: GML-2195

* Extract tables from Word documents instead of dropping them

- Tables in a .docx are read and rendered in place, so the figures they
  hold reach the knowledge graph and can be cited; previously only the
  paragraphs around them were ingested and the table vanished silently
- Tables nested inside a cell are included, and a pipe or line break in a
  cell no longer breaks the rendered row
- Legacy .doc is reported as unreadable with a pointer to .docx, instead
  of being listed as supported and ingested as a note about itself
- An empty spreadsheet or an unreadable file type is reported as a
  failure rather than ingested as placeholder text

Refs: GML-2196

* Require valid credentials for document retrieval

- The document-retrieval endpoint returned matching content without
  checking the caller; it now rejects anyone who cannot access the graph
  named in the request
- Search runs against the graph named in the request instead of the
  configured default graph
- A request with no credentials is rejected rather than failing as a
  server error

Refs: GML-2197

* Stop swapping the two contextual-search options

- Contextual (sibling-chunk) search received the hypothetical-answer and
  question-expansion options in each other's place on every call, so
  asking for one applied the other; they select different search
  strategies rather than variations of one
- Requests that set neither option, which is all chat traffic, were
  unaffected

Refs: GML-2198

* Fix knowledge-graph rebuild for token sign-ins

- Rebuilds started from a token sign-in no longer fail as if the graph
  did not exist
- An invalid token is rejected as an authentication failure instead of
  a server error

Refs: GML-2182

* Save MCP server deletes and stop Cancel from deleting a server

- Deleting an MCP server asks for confirmation and is saved immediately,
  instead of being lost on reload
- Cancelling an edit restores the server's saved settings instead of
  removing it from the list

Refs: GML-2301

* Request agentic plans in a form OpenAI accepts

- Agentic planning no longer makes a request OpenAI rejects before every
  plan, removing the extra latency and token cost from each answer
- Other model providers and other structured requests keep their current
  behavior

Refs: GML-2302

* Delete chat conversations one at a time, in a group, or all at once

- Each conversation in the chat sidebar has a delete button, with a
  confirmation
- Select mode lets several conversations, or all shown ones, be deleted
  together
- A Clear all action removes the whole history, shown whenever there is
  any; Clear older is unchanged
- Deleting the open conversation starts a new chat
- A delete that fails is reported instead of silently leaving the entry

Refs: GML-2303

* Fit retrieved context to the chat model's input limit

- Default to the chat model's own input limit when no token limit is set
- Reserve room for the full answer prompt instead of a fixed amount
- Decide on trimming by token count, so CJK context is trimmed correctly
- Send each retrieved passage to the answer model once across a plan's steps
- Log the cause when answer generation fails
- Report and log how many chunks each search retrieved, and their size
- Show oversized step output in the trace as shortened tool data with a note

Refs: GML-2311

* Repair only graphs whose schema the current queries can run on

- The Migration Assistant check reports whether a graph's schema matches the
  current base schema, as graphs created with 1.4 or later do
- Repair is offered and accepted only for such graphs; older graphs are told
  to be recreated and their documents ingested again
- Repair is withheld when the schema cannot be read

Refs: GML-2312

* List each contextual-search passage once, at its correct position

- Neighbor offsets are measured from the match each chunk belongs to
- A chunk near several matches is listed once, under the nearest one
- Every match appears under itself at offset zero

Refs: GML-2313
- Bump the version to 2.0.3
- Add the 2.0.3 entry to the README release list
- Record the multi-part and follow-up question improvements in the changelog
chengbiao-jin and others added 10 commits October 7, 2026 13:59
- Reserve at most 8K tokens for the answer when deriving the default limit,
  so models with large output budgets keep most of their context
- Drop only text already sent when de-duplicating passages across steps,
  so a later step's different or extra text for the same entry is kept
- Return the usual fallback answer when the answer prompt cannot be built

Refs: GML-2311
- Fall back to parsing the planner's text when tool-calling structured output
  comes back empty instead of failing the request
- Count a model as tool-calling only when it actually calls the tool, asking
  a second time with the call required before deciding

Refs: GML-2302
- Unclear follow-ups get one short clarifying question from triage, which can
  reply to the user, instead of from the planner, which cannot
- Triage reads the most recent turns of the conversation, up to a larger
  budget, so it sees the subjects a follow-up refers to
- The planner still resolves a follow-up's subject from the conversation

Refs: GML-2191
- Count deleted conversations against the list as it is when the delete
  lands, so a background refresh can't leave a duplicate or missing row
- Disable the other delete actions while a single delete is in progress

Refs: GML-2303
- A delete that finishes after the user switches scope or graph no longer
  changes the newly shown list

Refs: GML-2301
- A table that fails to render falls back to its plain text instead of
  failing the whole document

Refs: GML-2196
- The summary gives the chunk count and total characters retrieved, plus any
  other entries, matching the retrieval log line

Refs: GML-2311
Disable automatic function calling for Gemini

Co-authored-by: Prins Kumar <prinskumar@TigerGraph-N5YV7FG6R0.local>
- Raise the minimum versions of pyTigerGraph and tigergraph-mcp
- Close each agent TigerGraph tool call's sessions when the call ends
- Build the ECC image on the same supported base image as the main service

Refs: GML-2314
Comment thread graphrag-ui/src/components/SideMenu.tsx
@chengbiao-jin
chengbiao-jin merged commit 73839d7 into main Oct 12, 2026
1 check failed
@chengbiao-jin
chengbiao-jin deleted the release_2.0.3 branch October 12, 2026 20:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants