querynest-cli 1.0.4__tar.gz → 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/PKG-INFO +217 -46
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/README.md +215 -46
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/pyproject.toml +3 -8
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/cli/commands/chat.py +37 -7
- querynest_cli-2.0.0/src/querynest/cli/commands/config.py +55 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/config/bootstrap.py +10 -16
- querynest_cli-2.0.0/src/querynest/config/config_loader.py +33 -0
- querynest_cli-2.0.0/src/querynest/config/config_model.py +8 -0
- querynest_cli-2.0.0/src/querynest/config/llm.py +15 -0
- querynest_cli-2.0.0/src/querynest/config/setup.py +100 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/loaders/pdf_loader.py +11 -1
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/prompts/prompt_template.py +11 -4
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/vector_store/faiss_store.py +38 -11
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest_cli.egg-info/PKG-INFO +217 -46
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest_cli.egg-info/SOURCES.txt +1 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest_cli.egg-info/requires.txt +2 -0
- querynest_cli-1.0.4/src/querynest/cli/commands/config.py +0 -15
- querynest_cli-1.0.4/src/querynest/config/config_loader.py +0 -27
- querynest_cli-1.0.4/src/querynest/config/config_model.py +0 -6
- querynest_cli-1.0.4/src/querynest/config/setup.py +0 -48
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/LICENSE +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/setup.cfg +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/cli/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/cli/commands/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/cli/commands/history.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/cli/commands/sessions.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/cli/main.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/config/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/config/gemini.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/embeddings/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/embeddings/embedder.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/loaders/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/loaders/web_loader.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/loaders/youtube_loader.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/memory/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/memory/chat_memory.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/processor/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/processor/text_splitter.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/prompts/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/rag/rag_chain.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/retriever/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/sessions/session_meta.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/utils/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/utils/hashing.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/utils/paths.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest/vector_store/__init__.py +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest_cli.egg-info/dependency_links.txt +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest_cli.egg-info/entry_points.txt +0 -0
- {querynest_cli-1.0.4 → querynest_cli-2.0.0}/src/querynest_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: querynest-cli
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: FAISS-first RAG CLI for documents and web pages
|
|
5
5
|
Author: Divyansh Sharma
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -710,6 +710,8 @@ Requires-Dist: lxml-html-clean>=0.1
|
|
|
710
710
|
Requires-Dist: tqdm>=4.66
|
|
711
711
|
Requires-Dist: typer>=0.12
|
|
712
712
|
Requires-Dist: rich>=13.7
|
|
713
|
+
Requires-Dist: litellm<2.0,>=1.30
|
|
714
|
+
Requires-Dist: langchain-litellm>=0.1
|
|
713
715
|
Dynamic: license-file
|
|
714
716
|
|
|
715
717
|
# QueryNest
|
|
@@ -731,6 +733,10 @@ It is designed to be developer-friendly, fully self-hostable, and incrementally
|
|
|
731
733
|
- [Supported Data Sources](#supported-data-sources)
|
|
732
734
|
- [Websites](#websites)
|
|
733
735
|
- [PDF Documents](#pdf-documents)
|
|
736
|
+
- [Key Features In-Depth](#key-features-in-depth)
|
|
737
|
+
- [Multi-Model LLM Support](#multi-model-llm-support)
|
|
738
|
+
- [Rich Progress Bars](#rich-progress-bars)
|
|
739
|
+
- [Streaming Responses](#streaming-responses)
|
|
734
740
|
- [High-Level Architecture](#high-level-architecture)
|
|
735
741
|
- [Technical Stack](#technical-stack)
|
|
736
742
|
- [Memory Design](#memory-design)
|
|
@@ -769,7 +775,7 @@ QueryNest is distributed as a Python package and can be installed directly from
|
|
|
769
775
|
#### Install using pip
|
|
770
776
|
|
|
771
777
|
```bash
|
|
772
|
-
pip install querynest-cli==
|
|
778
|
+
pip install querynest-cli==2.0.0
|
|
773
779
|
```
|
|
774
780
|
|
|
775
781
|
This installs the `querynest` CLI in your environment.
|
|
@@ -785,7 +791,7 @@ If installed correctly, you should see the available CLI commands.
|
|
|
785
791
|
#### PyPI Package
|
|
786
792
|
|
|
787
793
|
Official PyPI release:
|
|
788
|
-
[https://pypi.org/project/querynest-cli/
|
|
794
|
+
[https://pypi.org/project/querynest-cli/2.0.0/](https://pypi.org/project/querynest-cli/2.0.0/)
|
|
789
795
|
|
|
790
796
|
---
|
|
791
797
|
|
|
@@ -838,7 +844,7 @@ The CLI supports:
|
|
|
838
844
|
* Automatic session creation and resume
|
|
839
845
|
* Session inspection, search, rename, and deletion
|
|
840
846
|
* Viewing chat history
|
|
841
|
-
* Configuration management (API
|
|
847
|
+
* Configuration management (API keys and LLM model selection)
|
|
842
848
|
|
|
843
849
|
---
|
|
844
850
|
|
|
@@ -895,26 +901,51 @@ Only **one source** is allowed per session.
|
|
|
895
901
|
### Usage
|
|
896
902
|
|
|
897
903
|
```bash
|
|
904
|
+
# Start chat with a web page
|
|
898
905
|
querynest chat --web "https://example.com"
|
|
906
|
+
|
|
907
|
+
# Start chat with a single PDF
|
|
899
908
|
querynest chat --pdf "/path/to/file.pdf"
|
|
909
|
+
|
|
910
|
+
# Start chat with multiple PDFs in a folder
|
|
900
911
|
querynest chat --pdf "/path/to/folder/"
|
|
912
|
+
|
|
913
|
+
# Force rebuild the vector index (useful if the source has been updated)
|
|
914
|
+
querynest chat --web "https://example.com" --force
|
|
915
|
+
querynest chat --pdf "/path/to/file.pdf" --force
|
|
901
916
|
```
|
|
902
917
|
|
|
903
918
|
### Behavior
|
|
904
919
|
|
|
905
920
|
* A deterministic session ID is generated from the source
|
|
906
921
|
* If a session already exists for the source, it is resumed automatically
|
|
907
|
-
* If not, a new session is created
|
|
922
|
+
* If not, a new session is created with rich progress feedback
|
|
908
923
|
* On first creation, the user is prompted for a session name
|
|
909
|
-
* Documents are loaded, split, embedded, and indexed using FAISS
|
|
910
|
-
* A conversational chat loop is started
|
|
924
|
+
* Documents are loaded (with progress bars), split into chunks, embedded, and indexed using FAISS
|
|
925
|
+
* A conversational chat loop is started with **real-time streaming responses**
|
|
926
|
+
* Model used is shown on startup and determined by your current config (defaults to Gemini)
|
|
927
|
+
|
|
928
|
+
### The `--force` Flag
|
|
929
|
+
|
|
930
|
+
```bash
|
|
931
|
+
querynest chat --web "https://example.com" --force
|
|
932
|
+
```
|
|
933
|
+
|
|
934
|
+
Forces a complete rebuild of the vector index even if a session already exists for the source. Use this when:
|
|
935
|
+
- The web page content has been updated
|
|
936
|
+
- The PDF has been modified
|
|
937
|
+
- You want a fresh index without resuming the old session
|
|
938
|
+
|
|
939
|
+
This clears the existing chat history and vector index for that source and starts fresh.
|
|
911
940
|
|
|
912
941
|
### Key Characteristics
|
|
913
942
|
|
|
914
|
-
* Interactive REPL-style chat
|
|
915
|
-
*
|
|
916
|
-
* Sliding window memory
|
|
917
|
-
* Automatic persistence of chat and vectors
|
|
943
|
+
* **Interactive REPL-style chat** with streaming token-by-token responses
|
|
944
|
+
* **Plain text responses** with structured formatting (headings, lists) — no markdown symbols
|
|
945
|
+
* **Sliding window memory** for efficient conversation context
|
|
946
|
+
* **Automatic persistence** of chat and vectors
|
|
947
|
+
* **Rich progress feedback** during document processing
|
|
948
|
+
* **Multi-model support** — Use any LLM through LiteLLM
|
|
918
949
|
* Graceful handling of Ctrl+C and EOF
|
|
919
950
|
|
|
920
951
|
### Exit
|
|
@@ -932,20 +963,67 @@ quit
|
|
|
932
963
|
|
|
933
964
|
### Purpose
|
|
934
965
|
|
|
935
|
-
Manage QueryNest configuration
|
|
966
|
+
Manage QueryNest configuration — API keys and LLM model selection.
|
|
936
967
|
|
|
937
968
|
### Commands
|
|
938
969
|
|
|
939
|
-
#### Set API Key
|
|
970
|
+
#### Set Gemini API Key
|
|
940
971
|
|
|
941
972
|
```bash
|
|
942
|
-
querynest config set-
|
|
973
|
+
querynest config set-gemini-key
|
|
943
974
|
```
|
|
944
975
|
|
|
945
|
-
* Prompts securely for a new API key
|
|
976
|
+
* Prompts securely for a new Gemini API key
|
|
977
|
+
* Used exclusively for embeddings (`text-embedding-004`)
|
|
946
978
|
* Updates the local configuration file
|
|
947
979
|
* Takes effect immediately
|
|
948
980
|
|
|
981
|
+
#### Set LLM Model
|
|
982
|
+
|
|
983
|
+
```bash
|
|
984
|
+
querynest config set-llm
|
|
985
|
+
```
|
|
986
|
+
|
|
987
|
+
* Shows a curated menu of supported LLM providers and models
|
|
988
|
+
* Also supports entering a custom model string (e.g. `groq/llama-3.1-8b-instant`)
|
|
989
|
+
* Prompts for the provider API key (skipped if Gemini is selected as LLM)
|
|
990
|
+
* Available options:
|
|
991
|
+
|
|
992
|
+
```
|
|
993
|
+
1. Gemini 2.5 Flash (default)
|
|
994
|
+
2. OpenAI - GPT-4o
|
|
995
|
+
3. OpenAI - GPT-4o Mini
|
|
996
|
+
4. Anthropic - Claude Sonnet
|
|
997
|
+
5. Groq - Llama 3.3 70B
|
|
998
|
+
6. Mistral - Large
|
|
999
|
+
7. Enter custom model string
|
|
1000
|
+
```
|
|
1001
|
+
|
|
1002
|
+
#### Set LLM API Key (without changing model)
|
|
1003
|
+
|
|
1004
|
+
```bash
|
|
1005
|
+
querynest config set-llm-key
|
|
1006
|
+
```
|
|
1007
|
+
|
|
1008
|
+
* Updates only the API key for the currently configured LLM provider
|
|
1009
|
+
* Useful when rotating API keys without switching models
|
|
1010
|
+
* If current LLM is Gemini, redirects to `set-gemini-key`
|
|
1011
|
+
|
|
1012
|
+
#### Show Current Models
|
|
1013
|
+
|
|
1014
|
+
```bash
|
|
1015
|
+
querynest config show-models
|
|
1016
|
+
```
|
|
1017
|
+
|
|
1018
|
+
* Displays the currently configured embedding model and LLM
|
|
1019
|
+
* Example output:
|
|
1020
|
+
|
|
1021
|
+
```
|
|
1022
|
+
Current Configuration:
|
|
1023
|
+
Embeddings : Google Gemini (text-embedding-004)
|
|
1024
|
+
LLM : groq/llama-3.3-70b-versatile
|
|
1025
|
+
```
|
|
1026
|
+
|
|
949
1027
|
---
|
|
950
1028
|
|
|
951
1029
|
## 3. History Command
|
|
@@ -1093,9 +1171,6 @@ Search is:
|
|
|
1093
1171
|
|
|
1094
1172
|
---
|
|
1095
1173
|
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
1174
|
## Design Constraints and Guarantees
|
|
1100
1175
|
|
|
1101
1176
|
* One session corresponds to exactly one source
|
|
@@ -1103,18 +1178,21 @@ Search is:
|
|
|
1103
1178
|
* Multiple PDFs are supported only via a single folder
|
|
1104
1179
|
* JavaScript-rendered web pages are not supported
|
|
1105
1180
|
* Image-only documents are not supported
|
|
1181
|
+
* Embedding model is fixed (Google Gemini) — changing it would invalidate existing indexes
|
|
1106
1182
|
|
|
1107
1183
|
---
|
|
1108
1184
|
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
1185
|
## Features
|
|
1112
1186
|
|
|
1113
|
-
* Terminal-based conversational interface
|
|
1187
|
+
* **Terminal-based conversational interface** with streaming responses for real-time feedback
|
|
1188
|
+
* **Multi-model LLM support** — Seamlessly switch between Gemini, OpenAI, Claude, Groq, Mistral and 100+ providers via LiteLLM
|
|
1189
|
+
* **Rich progress bars** for PDF loading, chunking, and embedding operations
|
|
1190
|
+
* **Streaming responses** — Responses stream token-by-token in real-time
|
|
1191
|
+
* **Force re-indexing** — Rebuild vector index on demand with `--force`
|
|
1114
1192
|
* Query external knowledge sources using natural language
|
|
1115
1193
|
* Support for multiple data sources:
|
|
1116
|
-
* Website URLs (cleaned page content)
|
|
1117
|
-
* PDF documents (local files)
|
|
1194
|
+
* Website URLs (cleaned page content)
|
|
1195
|
+
* PDF documents (local files or folders)
|
|
1118
1196
|
* Retrieval Augmented Generation (RAG) pipeline
|
|
1119
1197
|
* Conversational context awareness (sliding window memory)
|
|
1120
1198
|
* Deterministic session creation and automatic session resume
|
|
@@ -1139,12 +1217,66 @@ Search is:
|
|
|
1139
1217
|
|
|
1140
1218
|
### PDF Documents
|
|
1141
1219
|
|
|
1142
|
-
* Accepts a local PDF file path
|
|
1143
|
-
* Extracts document text
|
|
1220
|
+
* Accepts a local PDF file path or folder of PDFs
|
|
1221
|
+
* Extracts document text with **rich progress feedback**
|
|
1144
1222
|
* Enables question answering over document content
|
|
1145
1223
|
|
|
1146
1224
|
---
|
|
1147
1225
|
|
|
1226
|
+
## Key Features In-Depth
|
|
1227
|
+
|
|
1228
|
+
### Multi-Model LLM Support
|
|
1229
|
+
|
|
1230
|
+
QueryNest supports **100+ LLM models** through LiteLLM integration. Embeddings always use Google Gemini (`text-embedding-004`) for consistency across sessions. The LLM is fully configurable:
|
|
1231
|
+
|
|
1232
|
+
```bash
|
|
1233
|
+
# Default: Gemini
|
|
1234
|
+
querynest chat --pdf "document.pdf"
|
|
1235
|
+
|
|
1236
|
+
# Switch to Groq (fast + free tier)
|
|
1237
|
+
querynest config set-llm # select option 5
|
|
1238
|
+
|
|
1239
|
+
# Switch to OpenAI
|
|
1240
|
+
querynest config set-llm # select option 2
|
|
1241
|
+
|
|
1242
|
+
# Check what's currently configured
|
|
1243
|
+
querynest config show-models
|
|
1244
|
+
```
|
|
1245
|
+
|
|
1246
|
+
Configuration is stored in `~/.querynest/config.json` and persists across sessions.
|
|
1247
|
+
|
|
1248
|
+
### Rich Progress Bars
|
|
1249
|
+
|
|
1250
|
+
Visual feedback during document processing:
|
|
1251
|
+
|
|
1252
|
+
- **PDF Loading**: Shows file processing status with filename and progress
|
|
1253
|
+
- **Embedding**: Live progress bar for vector embedding operations (batched, 50 chunks at a time)
|
|
1254
|
+
|
|
1255
|
+
Example output:
|
|
1256
|
+
```
|
|
1257
|
+
Using Embeddings: Google Gemini (text-embedding-004)
|
|
1258
|
+
Using LLM: groq/llama-3.3-70b-versatile
|
|
1259
|
+
Loading documents...
|
|
1260
|
+
⠸ Embedding chunks... ━━━━━━━━━━━━━━━ 45% 45/100 chunks
|
|
1261
|
+
```
|
|
1262
|
+
|
|
1263
|
+
### Streaming Responses
|
|
1264
|
+
|
|
1265
|
+
LLM responses stream token-by-token in real-time with clean formatted output:
|
|
1266
|
+
|
|
1267
|
+
```
|
|
1268
|
+
You: What is machine learning?
|
|
1269
|
+
|
|
1270
|
+
Thinking...
|
|
1271
|
+
|
|
1272
|
+
Assistant
|
|
1273
|
+
Machine learning is a subset of artificial intelligence that enables
|
|
1274
|
+
systems to learn and improve from experience without being explicitly
|
|
1275
|
+
programmed...
|
|
1276
|
+
```
|
|
1277
|
+
|
|
1278
|
+
---
|
|
1279
|
+
|
|
1148
1280
|
## High-Level Architecture
|
|
1149
1281
|
|
|
1150
1282
|
```
|
|
@@ -1158,15 +1290,15 @@ Text Cleaning & Normalization
|
|
|
1158
1290
|
↓
|
|
1159
1291
|
Text Chunking
|
|
1160
1292
|
↓
|
|
1161
|
-
Embeddings (Gemini)
|
|
1293
|
+
Embeddings (Google Gemini — fixed)
|
|
1162
1294
|
↓
|
|
1163
|
-
Vector Store (FAISS
|
|
1295
|
+
Vector Store (FAISS)
|
|
1164
1296
|
↓
|
|
1165
1297
|
Similarity Search
|
|
1166
1298
|
↓
|
|
1167
|
-
LLM (
|
|
1299
|
+
LLM (Configurable via LiteLLM)
|
|
1168
1300
|
↓
|
|
1169
|
-
Terminal Response
|
|
1301
|
+
Terminal Response (Streamed)
|
|
1170
1302
|
```
|
|
1171
1303
|
|
|
1172
1304
|
---
|
|
@@ -1179,21 +1311,25 @@ Terminal Response
|
|
|
1179
1311
|
|
|
1180
1312
|
### LLM and Embeddings
|
|
1181
1313
|
|
|
1182
|
-
*
|
|
1183
|
-
*
|
|
1184
|
-
|
|
1185
|
-
> Planned: Support for OpenAI, Claude, and Hugging Face models via user-provided API keys.
|
|
1314
|
+
* **LLM (via LiteLLM):** Google Gemini (default), OpenAI, Anthropic, Groq, Mistral, and 100+ more
|
|
1315
|
+
* **Embeddings:** Google Gemini `text-embedding-004` (fixed — ensures index consistency)
|
|
1186
1316
|
|
|
1187
1317
|
### Vector Storage
|
|
1188
1318
|
|
|
1189
1319
|
* FAISS (CPU-based, default)
|
|
1190
|
-
* Chroma (planned
|
|
1320
|
+
* Chroma (planned)
|
|
1191
1321
|
|
|
1192
1322
|
### Content Extraction
|
|
1193
1323
|
|
|
1194
1324
|
* Websites: `requests`, `beautifulsoup4`, `readability-lxml`
|
|
1195
1325
|
* PDFs: `pypdf`
|
|
1196
1326
|
|
|
1327
|
+
### UI & Progress Feedback
|
|
1328
|
+
|
|
1329
|
+
* **Rich**: Terminal formatting, live progress bars
|
|
1330
|
+
* **LiteLLM**: Multi-model LLM abstraction layer
|
|
1331
|
+
* **tqdm**: Progress bars for directory PDF loading
|
|
1332
|
+
|
|
1197
1333
|
---
|
|
1198
1334
|
|
|
1199
1335
|
## Memory Design
|
|
@@ -1204,20 +1340,20 @@ QueryNest separates memory into two independent systems:
|
|
|
1204
1340
|
|
|
1205
1341
|
* Stores embeddings of source content
|
|
1206
1342
|
* Used only for semantic retrieval
|
|
1207
|
-
* Implemented using FAISS
|
|
1343
|
+
* Implemented using FAISS
|
|
1208
1344
|
|
|
1209
1345
|
### 2. Conversational Memory (Chat History)
|
|
1210
1346
|
|
|
1211
1347
|
* Stores user–assistant messages
|
|
1212
1348
|
* Maintains conversational continuity
|
|
1213
|
-
* Sliding window of recent messages (
|
|
1349
|
+
* Sliding window of recent messages (last 4 exchanges)
|
|
1214
1350
|
* Stored as local JSON files
|
|
1215
1351
|
|
|
1216
1352
|
---
|
|
1217
1353
|
|
|
1218
1354
|
## Local Storage Structure
|
|
1219
1355
|
|
|
1220
|
-
All persistent data is stored locally on the user
|
|
1356
|
+
All persistent data is stored locally on the user's machine.
|
|
1221
1357
|
|
|
1222
1358
|
### Base Directory
|
|
1223
1359
|
|
|
@@ -1232,22 +1368,31 @@ All persistent data is stored locally on the user’s machine.
|
|
|
1232
1368
|
├── config.json
|
|
1233
1369
|
└── sessions/
|
|
1234
1370
|
└── <session_id>/
|
|
1371
|
+
├── meta.json
|
|
1235
1372
|
├── chat.json
|
|
1236
1373
|
└── vectors.faiss
|
|
1237
1374
|
```
|
|
1238
1375
|
|
|
1239
1376
|
### Configuration (`config.json`)
|
|
1240
1377
|
|
|
1241
|
-
|
|
1242
|
-
|
|
1378
|
+
```json
|
|
1379
|
+
{
|
|
1380
|
+
"gemini_api_key": "...",
|
|
1381
|
+
"llm_model": "groq/llama-3.3-70b-versatile",
|
|
1382
|
+
"llm_api_key": "..."
|
|
1383
|
+
}
|
|
1384
|
+
```
|
|
1385
|
+
|
|
1386
|
+
API keys are never bundled in distributed artifacts.
|
|
1243
1387
|
|
|
1244
1388
|
---
|
|
1245
1389
|
|
|
1246
1390
|
## Session Management
|
|
1247
1391
|
|
|
1248
|
-
* Sessions are deterministically generated using a hash of the input source
|
|
1392
|
+
* Sessions are deterministically generated using a SHA-256 hash of the input source
|
|
1249
1393
|
* Same source results in the same session and memory
|
|
1250
1394
|
* Enables automatic session resume without manual configuration
|
|
1395
|
+
* Use `--force` to bypass resume and rebuild from scratch
|
|
1251
1396
|
|
|
1252
1397
|
---
|
|
1253
1398
|
|
|
@@ -1262,6 +1407,7 @@ Each LLM request includes:
|
|
|
1262
1407
|
The LLM is explicitly instructed to:
|
|
1263
1408
|
|
|
1264
1409
|
* Answer only from the provided context
|
|
1410
|
+
* Use plain text formatting (no markdown symbols)
|
|
1265
1411
|
* Respond with "I don't know" if the answer cannot be inferred
|
|
1266
1412
|
|
|
1267
1413
|
---
|
|
@@ -1279,7 +1425,6 @@ The LLM is explicitly instructed to:
|
|
|
1279
1425
|
### v2 – Full CLI Tool
|
|
1280
1426
|
|
|
1281
1427
|
* Professional command-based CLI interface
|
|
1282
|
-
* `init` command for API key setup
|
|
1283
1428
|
* Local persistence (sessions, chat history, vectors)
|
|
1284
1429
|
* Improved prompt handling and error management
|
|
1285
1430
|
|
|
@@ -1288,7 +1433,33 @@ The LLM is explicitly instructed to:
|
|
|
1288
1433
|
* Dockerfile and Docker Compose support
|
|
1289
1434
|
* Volume-mounted persistent storage
|
|
1290
1435
|
* Same CLI experience inside containers
|
|
1291
|
-
|
|
1436
|
+
|
|
1437
|
+
### v4 – Multi-Model Support (Current)
|
|
1438
|
+
|
|
1439
|
+
* LiteLLM integration for 100+ LLM providers
|
|
1440
|
+
* Curated model selection menu with custom model support
|
|
1441
|
+
* Per-provider API key management
|
|
1442
|
+
* Rich progress bars for embedding pipeline
|
|
1443
|
+
* Streaming responses
|
|
1444
|
+
* Force re-indexing with `--force`
|
|
1445
|
+
|
|
1446
|
+
### v5 – Distribution & Introduction Website (Planned)
|
|
1447
|
+
|
|
1448
|
+
Distribution formats:
|
|
1449
|
+
|
|
1450
|
+
* Docker Image — primary self-host method
|
|
1451
|
+
* pip package
|
|
1452
|
+
* Windows executable — `.exe` via PyInstaller
|
|
1453
|
+
* Linux packages — `.rpm` and `.deb`
|
|
1454
|
+
* AppImage — packaging format research and build pipeline
|
|
1455
|
+
* Tarball
|
|
1456
|
+
|
|
1457
|
+
Introduction website (TypeScript):
|
|
1458
|
+
|
|
1459
|
+
* Home — project intro, tagline, quick feature highlights
|
|
1460
|
+
* About — what QueryNest is, how it works, the tech behind it
|
|
1461
|
+
* Download — all distribution options listed clearly (pip, Docker, `.exe`, `.rpm`, `.deb`, AppImage, Tarball)
|
|
1462
|
+
* Documentation — full usage guide, CLI reference, configuration options, and examples
|
|
1292
1463
|
|
|
1293
1464
|
---
|
|
1294
1465
|
|
|
@@ -1296,10 +1467,10 @@ The LLM is explicitly instructed to:
|
|
|
1296
1467
|
|
|
1297
1468
|
QueryNest is distributed through multiple formats:
|
|
1298
1469
|
|
|
1299
|
-
* Docker image (
|
|
1300
|
-
* pip package
|
|
1301
|
-
* Windows executable (`.exe` via PyInstaller)
|
|
1302
|
-
* Linux packages (`.rpm`, `.deb`)
|
|
1470
|
+
* Docker image (`divyansh1552005/querynest:latest`)
|
|
1471
|
+
* pip package (`querynest-cli` on PyPI)
|
|
1472
|
+
* Windows executable (`.exe` via PyInstaller) — planned
|
|
1473
|
+
* Linux packages (`.rpm`, `.deb`) — planned
|
|
1303
1474
|
|
|
1304
1475
|
Secrets and API keys are never bundled in distributed artifacts.
|
|
1305
1476
|
|