Search in Docs to UI (#1186)
Move from Context Chunks JSON response to a more comprehensive Search in Docs functionality
This commit is contained in:
		
							parent
							
								
									1e96e3a29e
								
							
						
					
					
						commit
						c81f4b2ebd
					
				|  | @ -348,25 +348,24 @@ computations. | ||||||
| 
 | 
 | ||||||
| Gradio UI is a ready to use way of testing most of PrivateGPT API functionalities. | Gradio UI is a ready to use way of testing most of PrivateGPT API functionalities. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
| 
 | 
 | ||||||
| ### Execution Modes | ### Execution Modes | ||||||
| 
 | 
 | ||||||
| It has 3 modes of execution (you can select in the top-left): | It has 3 modes of execution (you can select in the top-left): | ||||||
| 
 | 
 | ||||||
| * Query Documents: uses the context from the | * Query Docs: uses the context from the | ||||||
|   ingested documents to answer the questions posted in the chat. It also takes |   ingested documents to answer the questions posted in the chat. It also takes | ||||||
|   into account previous chat messages as context. |   into account previous chat messages as context. | ||||||
|     * Makes use of `/chat/completions` API with `use_context=true` and no |     * Makes use of `/chat/completions` API with `use_context=true` and no | ||||||
|       `context_filter`. |       `context_filter`. | ||||||
|  | * Search in Docs: fast search that returns the 4 most related text | ||||||
|  |   chunks, together with their source document and page. | ||||||
|  |     * Makes use of `/chunks` API with no `context_filter`, `limit=4` and | ||||||
|  |       `prev_next_chunks=0`. | ||||||
| * LLM Chat: simple, non-contextual chat with the LLM. The ingested documents won't | * LLM Chat: simple, non-contextual chat with the LLM. The ingested documents won't | ||||||
|   be taken into account, only the previous messages. |   be taken into account, only the previous messages. | ||||||
|     * Makes use of `/chat/completions` API with `use_context=false`. |     * Makes use of `/chat/completions` API with `use_context=false`. | ||||||
| * Context Chunks: returns the JSON representation of the 2 most related text |  | ||||||
|   chunks, together with their metadata, source document and previous and next |  | ||||||
|   chunks. |  | ||||||
|     * Makes use of `/chunks` API with no `context_filter`, `limit=2` and |  | ||||||
|       `prev_next_chunks=1`. |  | ||||||
| 
 | 
 | ||||||
| ### Document Ingestion | ### Document Ingestion | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -1,5 +1,4 @@ | ||||||
| import itertools | import itertools | ||||||
| import json |  | ||||||
| from collections.abc import Iterable | from collections.abc import Iterable | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| from typing import Any, TextIO | from typing import Any, TextIO | ||||||
|  | @ -50,7 +49,7 @@ def _chat(message: str, history: list[list[str]], mode: str, *_: Any) -> Any: | ||||||
|     new_message = ChatMessage(content=message, role=MessageRole.USER) |     new_message = ChatMessage(content=message, role=MessageRole.USER) | ||||||
|     all_messages = [*build_history(), new_message] |     all_messages = [*build_history(), new_message] | ||||||
|     match mode: |     match mode: | ||||||
|         case "Query Documents": |         case "Query Docs": | ||||||
|             query_stream = chat_service.stream_chat( |             query_stream = chat_service.stream_chat( | ||||||
|                 messages=all_messages, |                 messages=all_messages, | ||||||
|                 use_context=True, |                 use_context=True, | ||||||
|  | @ -64,16 +63,16 @@ def _chat(message: str, history: list[list[str]], mode: str, *_: Any) -> Any: | ||||||
|             ) |             ) | ||||||
|             yield from yield_deltas(llm_stream) |             yield from yield_deltas(llm_stream) | ||||||
| 
 | 
 | ||||||
|         case "Context Chunks": |         case "Search in Docs": | ||||||
|             response = chunks_service.retrieve_relevant( |             response = chunks_service.retrieve_relevant( | ||||||
|                 text=message, |                 text=message, limit=4, prev_next_chunks=0 | ||||||
|                 limit=2, |             ) | ||||||
|                 prev_next_chunks=1, | 
 | ||||||
|             ).__iter__() |             yield "\n\n\n".join( | ||||||
|             yield "```" + json.dumps( |                 f"{index}. **{chunk.document.doc_metadata['file_name'] if chunk.document.doc_metadata else ''} " | ||||||
|                 [node.__dict__ for node in response], |                 f"(page {chunk.document.doc_metadata['page_label'] if chunk.document.doc_metadata else ''})**\n " | ||||||
|                 default=lambda o: o.__dict__, |                 f"{chunk.text}" | ||||||
|                 indent=2, |                 for index, chunk in enumerate(response, start=1) | ||||||
|             ) |             ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -117,9 +116,9 @@ with gr.Blocks( | ||||||
|     with gr.Row(): |     with gr.Row(): | ||||||
|         with gr.Column(scale=3, variant="compact"): |         with gr.Column(scale=3, variant="compact"): | ||||||
|             mode = gr.Radio( |             mode = gr.Radio( | ||||||
|                 ["Query Documents", "LLM Chat", "Context Chunks"], |                 ["Query Docs", "Search in Docs", "LLM Chat"], | ||||||
|                 label="Mode", |                 label="Mode", | ||||||
|                 value="Query Documents", |                 value="Query Docs", | ||||||
|             ) |             ) | ||||||
|             upload_button = gr.components.UploadButton( |             upload_button = gr.components.UploadButton( | ||||||
|                 "Upload a File", |                 "Upload a File", | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue