jarvis-ai-assistant 0.1.219__py3-none-any.whl → 0.1.220__py3-none-any.whl
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.
- jarvis/__init__.py +1 -1
- jarvis/jarvis_agent/__init__.py +36 -89
- jarvis/jarvis_data/config_schema.json +30 -0
- jarvis/jarvis_platform/yuanbao.py +3 -1
- jarvis/jarvis_rag/__init__.py +11 -0
- jarvis/jarvis_rag/cache.py +87 -0
- jarvis/jarvis_rag/cli.py +297 -0
- jarvis/jarvis_rag/embedding_manager.py +109 -0
- jarvis/jarvis_rag/llm_interface.py +130 -0
- jarvis/jarvis_rag/query_rewriter.py +63 -0
- jarvis/jarvis_rag/rag_pipeline.py +177 -0
- jarvis/jarvis_rag/reranker.py +56 -0
- jarvis/jarvis_rag/retriever.py +201 -0
- jarvis/jarvis_utils/config.py +71 -0
- {jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/METADATA +87 -8
- {jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/RECORD +20 -11
- {jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/entry_points.txt +1 -0
- {jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,201 @@
|
|
1
|
+
import os
|
2
|
+
import pickle
|
3
|
+
from typing import Any, Dict, List, cast
|
4
|
+
|
5
|
+
import chromadb
|
6
|
+
from langchain.docstore.document import Document
|
7
|
+
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
8
|
+
from rank_bm25 import BM25Okapi # type: ignore
|
9
|
+
|
10
|
+
from .embedding_manager import EmbeddingManager
|
11
|
+
|
12
|
+
|
13
|
+
class ChromaRetriever:
|
14
|
+
"""
|
15
|
+
A retriever class that combines dense vector search (ChromaDB) and
|
16
|
+
sparse keyword search (BM25) for hybrid retrieval.
|
17
|
+
"""
|
18
|
+
|
19
|
+
def __init__(
|
20
|
+
self,
|
21
|
+
embedding_manager: EmbeddingManager,
|
22
|
+
db_path: str,
|
23
|
+
collection_name: str = "jarvis_rag_collection",
|
24
|
+
):
|
25
|
+
"""
|
26
|
+
Initializes the ChromaRetriever.
|
27
|
+
|
28
|
+
Args:
|
29
|
+
embedding_manager: An instance of EmbeddingManager.
|
30
|
+
db_path: The file path for ChromaDB's persistent storage.
|
31
|
+
collection_name: The name of the collection within ChromaDB.
|
32
|
+
"""
|
33
|
+
self.embedding_manager = embedding_manager
|
34
|
+
self.db_path = db_path
|
35
|
+
self.collection_name = collection_name
|
36
|
+
|
37
|
+
# Initialize ChromaDB client
|
38
|
+
self.client = chromadb.PersistentClient(path=self.db_path)
|
39
|
+
self.collection = self.client.get_or_create_collection(
|
40
|
+
name=self.collection_name
|
41
|
+
)
|
42
|
+
print(
|
43
|
+
f"✅ ChromaDB 客户端已在 '{db_path}' 初始化,集合为 '{collection_name}'。"
|
44
|
+
)
|
45
|
+
|
46
|
+
# BM25 Index setup
|
47
|
+
self.bm25_index_path = os.path.join(self.db_path, f"{collection_name}_bm25.pkl")
|
48
|
+
self._load_or_initialize_bm25()
|
49
|
+
|
50
|
+
def _load_or_initialize_bm25(self):
|
51
|
+
"""Loads the BM25 index from disk or initializes a new one."""
|
52
|
+
if os.path.exists(self.bm25_index_path):
|
53
|
+
print("🔍 正在加载现有的 BM25 索引...")
|
54
|
+
with open(self.bm25_index_path, "rb") as f:
|
55
|
+
data = pickle.load(f)
|
56
|
+
self.bm25_corpus = data["corpus"]
|
57
|
+
self.bm25_index = BM25Okapi(self.bm25_corpus)
|
58
|
+
print("✅ BM25 索引加载成功。")
|
59
|
+
else:
|
60
|
+
print("⚠️ 未找到 BM25 索引,将初始化一个新的。")
|
61
|
+
self.bm25_corpus = []
|
62
|
+
self.bm25_index = None
|
63
|
+
|
64
|
+
def _save_bm25_index(self):
|
65
|
+
"""Saves the BM25 index to disk."""
|
66
|
+
if self.bm25_index:
|
67
|
+
print("💾 正在保存 BM25 索引...")
|
68
|
+
with open(self.bm25_index_path, "wb") as f:
|
69
|
+
pickle.dump({"corpus": self.bm25_corpus, "index": self.bm25_index}, f)
|
70
|
+
print("✅ BM25 索引保存成功。")
|
71
|
+
|
72
|
+
def add_documents(
|
73
|
+
self, documents: List[Document], chunk_size=1000, chunk_overlap=100
|
74
|
+
):
|
75
|
+
"""
|
76
|
+
Splits, embeds, and adds documents to both ChromaDB and the BM25 index.
|
77
|
+
"""
|
78
|
+
text_splitter = RecursiveCharacterTextSplitter(
|
79
|
+
chunk_size=chunk_size, chunk_overlap=chunk_overlap
|
80
|
+
)
|
81
|
+
chunks = text_splitter.split_documents(documents)
|
82
|
+
|
83
|
+
print(f"📄 已将 {len(documents)} 个文档拆分为 {len(chunks)} 个块。")
|
84
|
+
|
85
|
+
if not chunks:
|
86
|
+
return
|
87
|
+
|
88
|
+
# Extract content, metadata, and generate IDs
|
89
|
+
chunk_texts = [chunk.page_content for chunk in chunks]
|
90
|
+
metadatas = [chunk.metadata for chunk in chunks]
|
91
|
+
start_id = self.collection.count()
|
92
|
+
ids = [f"doc_{i}" for i in range(start_id, start_id + len(chunks))]
|
93
|
+
|
94
|
+
# Add to ChromaDB
|
95
|
+
embeddings = self.embedding_manager.embed_documents(chunk_texts)
|
96
|
+
self.collection.add(
|
97
|
+
ids=ids,
|
98
|
+
embeddings=cast(Any, embeddings),
|
99
|
+
documents=chunk_texts,
|
100
|
+
metadatas=cast(Any, metadatas),
|
101
|
+
)
|
102
|
+
print(f"✅ 成功将 {len(chunks)} 个块添加到 ChromaDB 集合中。")
|
103
|
+
|
104
|
+
# Update and save BM25 index
|
105
|
+
tokenized_chunks = [doc.split() for doc in chunk_texts]
|
106
|
+
self.bm25_corpus.extend(tokenized_chunks)
|
107
|
+
self.bm25_index = BM25Okapi(self.bm25_corpus)
|
108
|
+
self._save_bm25_index()
|
109
|
+
|
110
|
+
def retrieve(self, query: str, n_results: int = 5) -> List[Document]:
|
111
|
+
"""
|
112
|
+
Performs hybrid retrieval using both vector search and BM25,
|
113
|
+
then fuses the results using Reciprocal Rank Fusion (RRF).
|
114
|
+
"""
|
115
|
+
# 1. Vector Search (ChromaDB)
|
116
|
+
query_embedding = self.embedding_manager.embed_query(query)
|
117
|
+
vector_results = self.collection.query(
|
118
|
+
query_embeddings=cast(Any, [query_embedding]),
|
119
|
+
n_results=n_results * 2, # Retrieve more results for fusion
|
120
|
+
)
|
121
|
+
|
122
|
+
# 2. Keyword Search (BM25)
|
123
|
+
bm25_docs = []
|
124
|
+
if self.bm25_index:
|
125
|
+
tokenized_query = query.split()
|
126
|
+
doc_scores = self.bm25_index.get_scores(tokenized_query)
|
127
|
+
|
128
|
+
# Get all documents from Chroma to match with BM25 scores
|
129
|
+
all_docs_in_collection = self.collection.get()
|
130
|
+
all_documents = all_docs_in_collection.get("documents")
|
131
|
+
all_metadatas = all_docs_in_collection.get("metadatas")
|
132
|
+
|
133
|
+
bm25_results_with_docs = []
|
134
|
+
if all_documents and all_metadatas:
|
135
|
+
# Create a mapping from index to document
|
136
|
+
bm25_results_with_docs = [
|
137
|
+
(
|
138
|
+
all_documents[i],
|
139
|
+
all_metadatas[i],
|
140
|
+
score,
|
141
|
+
)
|
142
|
+
for i, score in enumerate(doc_scores)
|
143
|
+
if score > 0
|
144
|
+
]
|
145
|
+
|
146
|
+
# Sort by score and take top results
|
147
|
+
bm25_results_with_docs.sort(key=lambda x: x[2], reverse=True)
|
148
|
+
|
149
|
+
for doc_text, metadata, _ in bm25_results_with_docs[: n_results * 2]:
|
150
|
+
bm25_docs.append(Document(page_content=doc_text, metadata=metadata))
|
151
|
+
|
152
|
+
# 3. Reciprocal Rank Fusion (RRF)
|
153
|
+
fused_scores: Dict[str, float] = {}
|
154
|
+
k = 60 # RRF ranking constant
|
155
|
+
|
156
|
+
# Process vector results
|
157
|
+
if vector_results and vector_results["ids"] and vector_results["documents"]:
|
158
|
+
vec_ids = vector_results["ids"][0]
|
159
|
+
vec_texts = vector_results["documents"][0]
|
160
|
+
|
161
|
+
for rank, doc_id in enumerate(vec_ids):
|
162
|
+
fused_scores[doc_id] = fused_scores.get(doc_id, 0) + 1 / (k + rank)
|
163
|
+
|
164
|
+
# Create a map from document text to its ID for BM25 fusion
|
165
|
+
doc_text_to_id = {text: doc_id for text, doc_id in zip(vec_texts, vec_ids)}
|
166
|
+
|
167
|
+
for rank, doc in enumerate(bm25_docs):
|
168
|
+
bm25_doc_id = doc_text_to_id.get(doc.page_content)
|
169
|
+
if bm25_doc_id:
|
170
|
+
fused_scores[bm25_doc_id] = fused_scores.get(bm25_doc_id, 0) + 1 / (
|
171
|
+
k + rank
|
172
|
+
)
|
173
|
+
|
174
|
+
# Sort fused results
|
175
|
+
sorted_fused_results = sorted(
|
176
|
+
fused_scores.items(), key=lambda x: x[1], reverse=True
|
177
|
+
)
|
178
|
+
|
179
|
+
# Get the final documents from ChromaDB based on fused ranking
|
180
|
+
final_doc_ids = [item[0] for item in sorted_fused_results[:n_results]]
|
181
|
+
|
182
|
+
if not final_doc_ids:
|
183
|
+
return []
|
184
|
+
|
185
|
+
final_docs_data = self.collection.get(ids=final_doc_ids)
|
186
|
+
|
187
|
+
retrieved_docs = []
|
188
|
+
if final_docs_data:
|
189
|
+
final_documents = final_docs_data.get("documents")
|
190
|
+
final_metadatas = final_docs_data.get("metadatas")
|
191
|
+
|
192
|
+
if final_documents and final_metadatas:
|
193
|
+
for doc_text, metadata in zip(final_documents, final_metadatas):
|
194
|
+
if doc_text is not None and metadata is not None:
|
195
|
+
retrieved_docs.append(
|
196
|
+
Document(
|
197
|
+
page_content=cast(str, doc_text), metadata=metadata
|
198
|
+
)
|
199
|
+
)
|
200
|
+
|
201
|
+
return retrieved_docs
|
jarvis/jarvis_utils/config.py
CHANGED
@@ -3,6 +3,7 @@ import os
|
|
3
3
|
from functools import lru_cache
|
4
4
|
from typing import Any, Dict, List
|
5
5
|
|
6
|
+
import torch
|
6
7
|
import yaml # type: ignore
|
7
8
|
|
8
9
|
from jarvis.jarvis_utils.builtin_replace_map import BUILTIN_REPLACE_MAP
|
@@ -248,3 +249,73 @@ def get_mcp_config() -> List[Dict[str, Any]]:
|
|
248
249
|
List[Dict[str, Any]]: MCP配置项列表,如果未配置则返回空列表
|
249
250
|
"""
|
250
251
|
return GLOBAL_CONFIG_DATA.get("JARVIS_MCP", [])
|
252
|
+
|
253
|
+
|
254
|
+
# ==============================================================================
|
255
|
+
# RAG Framework Configuration
|
256
|
+
# ==============================================================================
|
257
|
+
|
258
|
+
EMBEDDING_MODELS = {
|
259
|
+
"performance": {
|
260
|
+
"model_name": "BAAI/bge-base-zh-v1.5",
|
261
|
+
"model_kwargs": {"device": "cuda" if torch.cuda.is_available() else "cpu"},
|
262
|
+
"encode_kwargs": {"normalize_embeddings": True},
|
263
|
+
"show_progress": True,
|
264
|
+
},
|
265
|
+
"accuracy": {
|
266
|
+
"model_name": "BAAI/bge-large-zh-v1.5",
|
267
|
+
"model_kwargs": {"device": "cuda" if torch.cuda.is_available() else "cpu"},
|
268
|
+
"encode_kwargs": {"normalize_embeddings": True},
|
269
|
+
"show_progress": True,
|
270
|
+
},
|
271
|
+
}
|
272
|
+
|
273
|
+
|
274
|
+
def get_rag_config() -> Dict[str, Any]:
|
275
|
+
"""
|
276
|
+
获取RAG框架的配置。
|
277
|
+
|
278
|
+
返回:
|
279
|
+
Dict[str, Any]: RAG配置字典
|
280
|
+
"""
|
281
|
+
return GLOBAL_CONFIG_DATA.get("JARVIS_RAG", {})
|
282
|
+
|
283
|
+
|
284
|
+
def get_rag_embedding_models() -> Dict[str, Any]:
|
285
|
+
"""
|
286
|
+
获取RAG嵌入模型的定义。
|
287
|
+
|
288
|
+
返回:
|
289
|
+
Dict[str, Any]: 嵌入模型配置字典
|
290
|
+
"""
|
291
|
+
return EMBEDDING_MODELS
|
292
|
+
|
293
|
+
|
294
|
+
def get_rag_embedding_mode() -> str:
|
295
|
+
"""
|
296
|
+
获取RAG嵌入模型的模式。
|
297
|
+
|
298
|
+
返回:
|
299
|
+
str: 'performance' 或 'accuracy'
|
300
|
+
"""
|
301
|
+
return get_rag_config().get("embedding_mode", "performance")
|
302
|
+
|
303
|
+
|
304
|
+
def get_rag_embedding_cache_path() -> str:
|
305
|
+
"""
|
306
|
+
获取RAG嵌入缓存的路径。
|
307
|
+
|
308
|
+
返回:
|
309
|
+
str: 缓存路径
|
310
|
+
"""
|
311
|
+
return get_rag_config().get("embedding_cache_path", ".jarvis/rag/embeddings")
|
312
|
+
|
313
|
+
|
314
|
+
def get_rag_vector_db_path() -> str:
|
315
|
+
"""
|
316
|
+
获取RAG向量数据库的路径。
|
317
|
+
|
318
|
+
返回:
|
319
|
+
str: 数据库路径
|
320
|
+
"""
|
321
|
+
return get_rag_config().get("vector_db_path", ".jarvis/rag/vectordb")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: jarvis-ai-assistant
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.220
|
4
4
|
Summary: Jarvis: An AI assistant that uses tools to interact with the system
|
5
5
|
Home-page: https://github.com/skyfireitdiy/Jarvis
|
6
6
|
Author: skyfire
|
@@ -33,11 +33,11 @@ Classifier: Intended Audience :: Developers
|
|
33
33
|
Classifier: License :: OSI Approved :: MIT License
|
34
34
|
Classifier: Operating System :: POSIX :: Linux
|
35
35
|
Classifier: Programming Language :: Python :: 3
|
36
|
-
Classifier: Programming Language :: Python :: 3.8
|
37
36
|
Classifier: Programming Language :: Python :: 3.9
|
38
37
|
Classifier: Programming Language :: Python :: 3.10
|
39
38
|
Classifier: Programming Language :: Python :: 3.11
|
40
|
-
|
39
|
+
Classifier: Programming Language :: Python :: 3.12
|
40
|
+
Requires-Python: >=3.9
|
41
41
|
Description-Content-Type: text/markdown
|
42
42
|
License-File: LICENSE
|
43
43
|
Requires-Dist: requests==2.32.3
|
@@ -56,9 +56,19 @@ Requires-Dist: tabulate==0.9.0
|
|
56
56
|
Requires-Dist: pyte==0.8.2
|
57
57
|
Requires-Dist: httpx>=0.28.1
|
58
58
|
Requires-Dist: pyyaml>=5.3.1
|
59
|
-
Requires-Dist: ddgs==
|
60
|
-
Requires-Dist: beautifulsoup4==4.
|
61
|
-
Requires-Dist: lxml==
|
59
|
+
Requires-Dist: ddgs==9.0.2
|
60
|
+
Requires-Dist: beautifulsoup4==4.13.4
|
61
|
+
Requires-Dist: lxml==6.0.0
|
62
|
+
Requires-Dist: langchain
|
63
|
+
Requires-Dist: langchain-community
|
64
|
+
Requires-Dist: langchain-huggingface
|
65
|
+
Requires-Dist: chromadb
|
66
|
+
Requires-Dist: diskcache
|
67
|
+
Requires-Dist: sentence-transformers==2.7.0
|
68
|
+
Requires-Dist: torch>=2.6
|
69
|
+
Requires-Dist: typer
|
70
|
+
Requires-Dist: unstructured[md]
|
71
|
+
Requires-Dist: rank-bm25
|
62
72
|
Provides-Extra: dev
|
63
73
|
Requires-Dist: pytest; extra == "dev"
|
64
74
|
Requires-Dist: black; extra == "dev"
|
@@ -553,7 +563,76 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
553
563
|
| search_web | 使用互联网搜索 |
|
554
564
|
| virtual_tty | 控制虚拟终端执行操作 |
|
555
565
|
|
556
|
-
### 2.
|
566
|
+
### 2. 🧠 RAG增强知识库 (`jarvis-rag`)
|
567
|
+
|
568
|
+
`jarvis-rag` 是一个强大的命令行工具,用于构建、管理和查询本地化的RAG(检索增强生成)知识库。它允许您将自己的文档(代码、笔记、文章等)作为外部知识源,让AI能够基于这些具体内容进行回答,而不是仅仅依赖其通用训练数据。
|
569
|
+
|
570
|
+
#### 核心功能
|
571
|
+
|
572
|
+
- **本地化知识库**:所有文档索引和数据都存储在本地,确保数据隐私和安全。
|
573
|
+
- **智能文档加载**:自动识别并加载多种文本文件,无需关心文件后缀。
|
574
|
+
- **灵活的查询**:支持使用项目默认的“思考”模型或动态指定任意已注册的LLM进行查询。
|
575
|
+
- **配置驱动**:通过 `config.toml` 或 `.jarvis/config.yaml` 进行集中配置。
|
576
|
+
|
577
|
+
#### 子命令说明
|
578
|
+
|
579
|
+
##### 2.1 添加文档到知识库 (`add`)
|
580
|
+
|
581
|
+
此命令用于将文件、目录或符合通配符模式的文档添加到知识库中。
|
582
|
+
|
583
|
+
```bash
|
584
|
+
# 基本用法
|
585
|
+
jarvis-rag add <文件路径/目录路径/通配符模式>...
|
586
|
+
|
587
|
+
# 示例
|
588
|
+
# 1. 添加单个文件
|
589
|
+
jarvis-rag add ./docs/my_document.md
|
590
|
+
|
591
|
+
# 2. 添加整个目录(将递归扫描所有文本文件)
|
592
|
+
jarvis-rag add ./src/
|
593
|
+
|
594
|
+
# 3. 使用通配符添加所有Python文件
|
595
|
+
jarvis-rag add 'src/**/*.py'
|
596
|
+
|
597
|
+
# 4. 混合添加
|
598
|
+
jarvis-rag add README.md ./docs/ 'src/jarvis/jarvis_rag/*.py'
|
599
|
+
```
|
600
|
+
|
601
|
+
**参数与选项:**
|
602
|
+
|
603
|
+
| 参数/选项 | 描述 |
|
604
|
+
|---|---|
|
605
|
+
| `paths` | **[必需]** 一个或多个文件路径、目录路径或用引号包裹的通配符模式。 |
|
606
|
+
| `--collection` | 指定知识库的集合名称(默认为 `jarvis_rag_collection`)。 |
|
607
|
+
| `--embedding-mode` | 覆盖全局配置,强制使用特定嵌入模式 (`performance` 或 `accuracy`)。 |
|
608
|
+
| `--db-path` | 覆盖全局配置,指定向量数据库的存储路径。 |
|
609
|
+
|
610
|
+
##### 2.2 查询知识库 (`query`)
|
611
|
+
|
612
|
+
此命令用于向已建立的知识库提出问题。
|
613
|
+
|
614
|
+
```bash
|
615
|
+
# 基本用法
|
616
|
+
jarvis-rag query "你的问题"
|
617
|
+
|
618
|
+
# 示例
|
619
|
+
# 1. 使用默认配置进行查询
|
620
|
+
jarvis-rag query "请总结一下我添加的文档的核心内容"
|
621
|
+
|
622
|
+
# 2. 指定使用Kimi模型进行查询
|
623
|
+
jarvis-rag query "代码中的 'PlatformRegistry' 类是做什么用的?" --platform kimi --model moonshot-v1-8k
|
624
|
+
```
|
625
|
+
|
626
|
+
**参数与选项:**
|
627
|
+
|
628
|
+
| 参数/选项 | 描述 |
|
629
|
+
|---|---|
|
630
|
+
| `question` | **[必需]** 你要向知识库提出的问题。 |
|
631
|
+
| `--collection` | 指定要查询的知识库集合名称。 |
|
632
|
+
| `--platform` | 指定一个平台名称来回答问题,覆盖默认的“思考”模型。 |
|
633
|
+
| `--model` | 指定一个模型名称来回答问题,需要与 `--platform` 同时使用。 |
|
634
|
+
|
635
|
+
### 3. 命令替换功能
|
557
636
|
支持使用特殊标记`'<tag>'`触发命令替换功能:
|
558
637
|
|
559
638
|
| 标记 | 功能 |
|
@@ -568,7 +647,7 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
568
647
|
| `'Check'` | 执行静态代码检查,包括错误和风格问题 |
|
569
648
|
| `'SaveSession'` | 保存当前会话并退出 |
|
570
649
|
|
571
|
-
###
|
650
|
+
### 4. 自定义替换配置
|
572
651
|
在`~/.jarvis/config.yaml`中添加:
|
573
652
|
```yaml
|
574
653
|
JARVIS_REPLACE_MAP:
|
@@ -1,5 +1,5 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=0ON7ERLL2QcDALpdR5gdhdn4WyjDQsqfLGVfq5qjuTU,75
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=AfWzPW1TQbfpgTK8P5yIf1pvMfv1dut6iMumRag1B2w,32289
|
3
3
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=lcw-VBm8-CVcblxEbGU4dVD6IixgXTLz9uBrv9Y6p20,2710
|
4
4
|
jarvis/jarvis_agent/edit_file_handler.py,sha256=vKx26I4yOQwiQHNfkqMJ44Ybf90n37mojTcXNQQy-hw,17382
|
5
5
|
jarvis/jarvis_agent/jarvis.py,sha256=4LBtAh9_AuQcjvqBFInqY19eyEJVJtGH4py32yu8olc,6287
|
@@ -30,7 +30,7 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
|
|
30
30
|
jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
|
31
31
|
jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
|
32
32
|
jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
|
33
|
-
jarvis/jarvis_data/config_schema.json,sha256=
|
33
|
+
jarvis/jarvis_data/config_schema.json,sha256=5pkd_5GBUvrsIPbVKb7dE-r67Zcv4EgNJGqKFhssHsI,6861
|
34
34
|
jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
|
35
35
|
jarvis/jarvis_git_details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
36
|
jarvis/jarvis_git_details/main.py,sha256=MjpUHB4ErR_SKPBx1TLLK_XLkH427RTtsyVn6EUd88Y,8907
|
@@ -53,10 +53,19 @@ jarvis/jarvis_platform/openai.py,sha256=ccGqsU2cFfd5324P7SH1tSmFABpvto8fytmxQGkr
|
|
53
53
|
jarvis/jarvis_platform/oyi.py,sha256=GvVooV8ScRqDb9QxJdINtdZwsx6PUIdo1-bt9k0hmqY,12604
|
54
54
|
jarvis/jarvis_platform/registry.py,sha256=1bMy0YZUa8NLzuZlKfC4CBtpa0iniypTxUZk0Hv6g9Y,8415
|
55
55
|
jarvis/jarvis_platform/tongyi.py,sha256=vSK1b4NhTeHbNhTgGRj4PANXptwCAwitczwK8VXwWwU,22921
|
56
|
-
jarvis/jarvis_platform/yuanbao.py,sha256=
|
56
|
+
jarvis/jarvis_platform/yuanbao.py,sha256=AIGQ0VOD_IAwWLnU9G19OG0XAbHpcJDzVWX2VazsyAI,23092
|
57
57
|
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
58
|
jarvis/jarvis_platform_manager/main.py,sha256=LxlXSfIfmkYNcajOG_XvvlmwlSWSGb0DmbzIDSHHYOU,18330
|
59
59
|
jarvis/jarvis_platform_manager/service.py,sha256=hQGWQ2qAlzm_C_lNQDuLORQ4rmjR1P1-V3ou7l2Bv0s,13622
|
60
|
+
jarvis/jarvis_rag/__init__.py,sha256=_-uyfhhKbuwfIbyl0OOyq2QdTXu0LB9-ZhxyU8L27kQ,326
|
61
|
+
jarvis/jarvis_rag/cache.py,sha256=e4k3qJxgscqunvIsn5q7AUj_hiMqlvaO5Uznx9KuIbQ,2787
|
62
|
+
jarvis/jarvis_rag/cli.py,sha256=PvRtkbU7BETJ_tLpx6ODQVU3nejIcobB4GIZyi8sZDs,10109
|
63
|
+
jarvis/jarvis_rag/embedding_manager.py,sha256=ldHxm2E-EoHdmQk2oryH7nbtfwkpTE14-lAHkVbYPlM,4035
|
64
|
+
jarvis/jarvis_rag/llm_interface.py,sha256=I4yJOIWO4XdceZBcmRxDFZOj7yGKBNhdrxI7FO2KfRw,4576
|
65
|
+
jarvis/jarvis_rag/query_rewriter.py,sha256=bPYtFlTBai0V9bXSmW3zlJ2IbwUtuVbVniFG1G-l4vE,2246
|
66
|
+
jarvis/jarvis_rag/rag_pipeline.py,sha256=Bhhl6sponge9ylNHYFsRgu0vj-Jb7qwPXwC4sgpcZ_A,6582
|
67
|
+
jarvis/jarvis_rag/reranker.py,sha256=ZwrPxr0NxkGm7KIc5kpsj08AmyyES6TDmnw5AYm4m-Y,1829
|
68
|
+
jarvis/jarvis_rag/retriever.py,sha256=MNPETffQxwj7bOoQKveVhvnHKnCb_-XOQgZZITf66C8,7719
|
60
69
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
61
70
|
jarvis/jarvis_smart_shell/main.py,sha256=DbhRSP1sZfSIaTltP1YWVDSQOTYEsbiOnfO9kSYwcNs,6959
|
62
71
|
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -77,7 +86,7 @@ jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
77
86
|
jarvis/jarvis_tools/cli/main.py,sha256=Mg6TQDxMdzB1Ua1UrZ2EE-uQWsbaeojWaEGHJp2HimA,6375
|
78
87
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
79
88
|
jarvis/jarvis_utils/builtin_replace_map.py,sha256=EI8JnHqr-ZpAhpwocTu48DhHUMHNd8tNUpDNYI47OLE,1717
|
80
|
-
jarvis/jarvis_utils/config.py,sha256=
|
89
|
+
jarvis/jarvis_utils/config.py,sha256=9rPmyggYBeDUoLv7IE8mPeXjn50n_VqUt5NXQtHeMUQ,8357
|
81
90
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
82
91
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
83
92
|
jarvis/jarvis_utils/git_utils.py,sha256=4mNbEgV0icMnB1UL1RWhE9Nxik3mwam2qcGMpd1ODJM,21707
|
@@ -88,9 +97,9 @@ jarvis/jarvis_utils/methodology.py,sha256=-cvM6pwgJK7BXCYg2uVjIId_j3v5RUh2z2PBcK
|
|
88
97
|
jarvis/jarvis_utils/output.py,sha256=PRCgudPOB8gMEP3u-g0FGD2c6tBgJhLXUMqNPglfjV8,10813
|
89
98
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
90
99
|
jarvis/jarvis_utils/utils.py,sha256=ojupkZQfFIE6ysTyCy0jUdePucpwpvZlZJSXkGsdyQE,15263
|
91
|
-
jarvis_ai_assistant-0.1.
|
92
|
-
jarvis_ai_assistant-0.1.
|
93
|
-
jarvis_ai_assistant-0.1.
|
94
|
-
jarvis_ai_assistant-0.1.
|
95
|
-
jarvis_ai_assistant-0.1.
|
96
|
-
jarvis_ai_assistant-0.1.
|
100
|
+
jarvis_ai_assistant-0.1.220.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
101
|
+
jarvis_ai_assistant-0.1.220.dist-info/METADATA,sha256=fCmHnmrvl-GuwHSUer0rox7iZNdRjJ-eXqV8lLPC5R4,22619
|
102
|
+
jarvis_ai_assistant-0.1.220.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
103
|
+
jarvis_ai_assistant-0.1.220.dist-info/entry_points.txt,sha256=L-9EE1kKoCdzxY9iMT7dGgBad-ytc3rso4if8C19SQU,915
|
104
|
+
jarvis_ai_assistant-0.1.220.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
105
|
+
jarvis_ai_assistant-0.1.220.dist-info/RECORD,,
|
{jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/entry_points.txt
RENAMED
@@ -9,6 +9,7 @@ jarvis-git-squash = jarvis.jarvis_git_squash.main:main
|
|
9
9
|
jarvis-methodology = jarvis.jarvis_methodology.main:main
|
10
10
|
jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
|
11
11
|
jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
|
12
|
+
jarvis-rag = jarvis.jarvis_rag.cli:main
|
12
13
|
jarvis-smart-shell = jarvis.jarvis_smart_shell.main:main
|
13
14
|
jarvis-tool = jarvis.jarvis_tools.cli.main:main
|
14
15
|
jca = jarvis.jarvis_code_agent.code_agent:main
|
File without changes
|
{jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.219.dist-info → jarvis_ai_assistant-0.1.220.dist-info}/top_level.txt
RENAMED
File without changes
|