jarvis-ai-assistant 0.1.220__py3-none-any.whl → 0.1.221__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 +93 -382
- jarvis/jarvis_agent/edit_file_handler.py +32 -185
- jarvis/jarvis_agent/prompt_builder.py +57 -0
- jarvis/jarvis_agent/prompts.py +188 -0
- jarvis/jarvis_agent/protocols.py +30 -0
- jarvis/jarvis_agent/session_manager.py +84 -0
- jarvis/jarvis_agent/tool_executor.py +49 -0
- jarvis/jarvis_code_agent/code_agent.py +4 -4
- jarvis/jarvis_data/config_schema.json +8 -18
- jarvis/jarvis_rag/__init__.py +2 -2
- jarvis/jarvis_rag/cache.py +28 -30
- jarvis/jarvis_rag/cli.py +141 -52
- jarvis/jarvis_rag/embedding_manager.py +32 -46
- jarvis/jarvis_rag/llm_interface.py +32 -34
- jarvis/jarvis_rag/query_rewriter.py +11 -12
- jarvis/jarvis_rag/rag_pipeline.py +40 -43
- jarvis/jarvis_rag/reranker.py +18 -18
- jarvis/jarvis_rag/retriever.py +29 -29
- jarvis/jarvis_tools/edit_file.py +11 -36
- jarvis/jarvis_utils/config.py +10 -25
- {jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/METADATA +15 -12
- {jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/RECORD +27 -22
- {jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/WHEEL +0 -0
- {jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/entry_points.txt +0 -0
- {jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/licenses/LICENSE +0 -0
- {jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/top_level.txt +0 -0
jarvis/jarvis_rag/retriever.py
CHANGED
@@ -12,8 +12,8 @@ from .embedding_manager import EmbeddingManager
|
|
12
12
|
|
13
13
|
class ChromaRetriever:
|
14
14
|
"""
|
15
|
-
|
16
|
-
|
15
|
+
一个检索器类,它结合了密集向量搜索(ChromaDB)和稀疏关键字搜索(BM25)
|
16
|
+
以实现混合检索。
|
17
17
|
"""
|
18
18
|
|
19
19
|
def __init__(
|
@@ -23,18 +23,18 @@ class ChromaRetriever:
|
|
23
23
|
collection_name: str = "jarvis_rag_collection",
|
24
24
|
):
|
25
25
|
"""
|
26
|
-
|
26
|
+
初始化ChromaRetriever。
|
27
27
|
|
28
|
-
|
29
|
-
embedding_manager:
|
30
|
-
db_path:
|
31
|
-
collection_name:
|
28
|
+
参数:
|
29
|
+
embedding_manager: EmbeddingManager的实例。
|
30
|
+
db_path: ChromaDB持久化存储的文件路径。
|
31
|
+
collection_name: ChromaDB中集合的名称。
|
32
32
|
"""
|
33
33
|
self.embedding_manager = embedding_manager
|
34
34
|
self.db_path = db_path
|
35
35
|
self.collection_name = collection_name
|
36
36
|
|
37
|
-
#
|
37
|
+
# 初始化ChromaDB客户端
|
38
38
|
self.client = chromadb.PersistentClient(path=self.db_path)
|
39
39
|
self.collection = self.client.get_or_create_collection(
|
40
40
|
name=self.collection_name
|
@@ -43,12 +43,12 @@ class ChromaRetriever:
|
|
43
43
|
f"✅ ChromaDB 客户端已在 '{db_path}' 初始化,集合为 '{collection_name}'。"
|
44
44
|
)
|
45
45
|
|
46
|
-
# BM25
|
46
|
+
# BM25索引设置
|
47
47
|
self.bm25_index_path = os.path.join(self.db_path, f"{collection_name}_bm25.pkl")
|
48
48
|
self._load_or_initialize_bm25()
|
49
49
|
|
50
50
|
def _load_or_initialize_bm25(self):
|
51
|
-
"""
|
51
|
+
"""从磁盘加载BM25索引或初始化一个新索引。"""
|
52
52
|
if os.path.exists(self.bm25_index_path):
|
53
53
|
print("🔍 正在加载现有的 BM25 索引...")
|
54
54
|
with open(self.bm25_index_path, "rb") as f:
|
@@ -62,7 +62,7 @@ class ChromaRetriever:
|
|
62
62
|
self.bm25_index = None
|
63
63
|
|
64
64
|
def _save_bm25_index(self):
|
65
|
-
"""
|
65
|
+
"""将BM25索引保存到磁盘。"""
|
66
66
|
if self.bm25_index:
|
67
67
|
print("💾 正在保存 BM25 索引...")
|
68
68
|
with open(self.bm25_index_path, "wb") as f:
|
@@ -73,7 +73,7 @@ class ChromaRetriever:
|
|
73
73
|
self, documents: List[Document], chunk_size=1000, chunk_overlap=100
|
74
74
|
):
|
75
75
|
"""
|
76
|
-
|
76
|
+
将文档拆分、嵌入,并添加到ChromaDB和BM25索引中。
|
77
77
|
"""
|
78
78
|
text_splitter = RecursiveCharacterTextSplitter(
|
79
79
|
chunk_size=chunk_size, chunk_overlap=chunk_overlap
|
@@ -85,13 +85,13 @@ class ChromaRetriever:
|
|
85
85
|
if not chunks:
|
86
86
|
return
|
87
87
|
|
88
|
-
#
|
88
|
+
# 提取内容、元数据并生成ID
|
89
89
|
chunk_texts = [chunk.page_content for chunk in chunks]
|
90
90
|
metadatas = [chunk.metadata for chunk in chunks]
|
91
91
|
start_id = self.collection.count()
|
92
92
|
ids = [f"doc_{i}" for i in range(start_id, start_id + len(chunks))]
|
93
93
|
|
94
|
-
#
|
94
|
+
# 添加到ChromaDB
|
95
95
|
embeddings = self.embedding_manager.embed_documents(chunk_texts)
|
96
96
|
self.collection.add(
|
97
97
|
ids=ids,
|
@@ -101,7 +101,7 @@ class ChromaRetriever:
|
|
101
101
|
)
|
102
102
|
print(f"✅ 成功将 {len(chunks)} 个块添加到 ChromaDB 集合中。")
|
103
103
|
|
104
|
-
#
|
104
|
+
# 更新并保存BM25索引
|
105
105
|
tokenized_chunks = [doc.split() for doc in chunk_texts]
|
106
106
|
self.bm25_corpus.extend(tokenized_chunks)
|
107
107
|
self.bm25_index = BM25Okapi(self.bm25_corpus)
|
@@ -109,30 +109,30 @@ class ChromaRetriever:
|
|
109
109
|
|
110
110
|
def retrieve(self, query: str, n_results: int = 5) -> List[Document]:
|
111
111
|
"""
|
112
|
-
|
113
|
-
|
112
|
+
使用向量搜索和BM25执行混合检索,然后使用倒数排序融合(RRF)
|
113
|
+
对结果进行融合。
|
114
114
|
"""
|
115
|
-
# 1.
|
115
|
+
# 1. 向量搜索 (ChromaDB)
|
116
116
|
query_embedding = self.embedding_manager.embed_query(query)
|
117
117
|
vector_results = self.collection.query(
|
118
118
|
query_embeddings=cast(Any, [query_embedding]),
|
119
|
-
n_results=n_results * 2, #
|
119
|
+
n_results=n_results * 2, # 检索更多结果用于融合
|
120
120
|
)
|
121
121
|
|
122
|
-
# 2.
|
122
|
+
# 2. 关键字搜索 (BM25)
|
123
123
|
bm25_docs = []
|
124
124
|
if self.bm25_index:
|
125
125
|
tokenized_query = query.split()
|
126
126
|
doc_scores = self.bm25_index.get_scores(tokenized_query)
|
127
127
|
|
128
|
-
#
|
128
|
+
# 从Chroma获取所有文档以匹配BM25分数
|
129
129
|
all_docs_in_collection = self.collection.get()
|
130
130
|
all_documents = all_docs_in_collection.get("documents")
|
131
131
|
all_metadatas = all_docs_in_collection.get("metadatas")
|
132
132
|
|
133
133
|
bm25_results_with_docs = []
|
134
134
|
if all_documents and all_metadatas:
|
135
|
-
#
|
135
|
+
# 创建从索引到文档的映射
|
136
136
|
bm25_results_with_docs = [
|
137
137
|
(
|
138
138
|
all_documents[i],
|
@@ -143,17 +143,17 @@ class ChromaRetriever:
|
|
143
143
|
if score > 0
|
144
144
|
]
|
145
145
|
|
146
|
-
#
|
146
|
+
# 按分数排序并取最高结果
|
147
147
|
bm25_results_with_docs.sort(key=lambda x: x[2], reverse=True)
|
148
148
|
|
149
149
|
for doc_text, metadata, _ in bm25_results_with_docs[: n_results * 2]:
|
150
150
|
bm25_docs.append(Document(page_content=doc_text, metadata=metadata))
|
151
151
|
|
152
|
-
# 3.
|
152
|
+
# 3. 倒数排序融合 (RRF)
|
153
153
|
fused_scores: Dict[str, float] = {}
|
154
|
-
k = 60 # RRF
|
154
|
+
k = 60 # RRF排名常数
|
155
155
|
|
156
|
-
#
|
156
|
+
# 处理向量结果
|
157
157
|
if vector_results and vector_results["ids"] and vector_results["documents"]:
|
158
158
|
vec_ids = vector_results["ids"][0]
|
159
159
|
vec_texts = vector_results["documents"][0]
|
@@ -161,7 +161,7 @@ class ChromaRetriever:
|
|
161
161
|
for rank, doc_id in enumerate(vec_ids):
|
162
162
|
fused_scores[doc_id] = fused_scores.get(doc_id, 0) + 1 / (k + rank)
|
163
163
|
|
164
|
-
#
|
164
|
+
# 为BM25融合创建从文档文本到其ID的映射
|
165
165
|
doc_text_to_id = {text: doc_id for text, doc_id in zip(vec_texts, vec_ids)}
|
166
166
|
|
167
167
|
for rank, doc in enumerate(bm25_docs):
|
@@ -171,12 +171,12 @@ class ChromaRetriever:
|
|
171
171
|
k + rank
|
172
172
|
)
|
173
173
|
|
174
|
-
#
|
174
|
+
# 对融合结果进行排序
|
175
175
|
sorted_fused_results = sorted(
|
176
176
|
fused_scores.items(), key=lambda x: x[1], reverse=True
|
177
177
|
)
|
178
178
|
|
179
|
-
#
|
179
|
+
# 根据融合排名从ChromaDB获取最终文档
|
180
180
|
final_doc_ids = [item[0] for item in sorted_fused_results[:n_results]]
|
181
181
|
|
182
182
|
if not final_doc_ids:
|
jarvis/jarvis_tools/edit_file.py
CHANGED
@@ -7,15 +7,12 @@
|
|
7
7
|
2. 支持单个文件的编辑操作,包括创建新文件
|
8
8
|
3. 实现原子操作:所有修改要么全部成功,要么全部回滚
|
9
9
|
4. 严格匹配控制:每个搜索文本必须且只能匹配一次
|
10
|
-
5. 支持两种编辑模式:快速编辑(fast_edit)和AI辅助编辑(slow_edit)
|
11
10
|
|
12
11
|
核心特性:
|
13
12
|
- 支持不存在的文件和空文件处理
|
14
13
|
- 自动创建所需目录结构
|
15
14
|
- 完善的错误处理和回滚机制
|
16
15
|
- 严格的格式保持要求
|
17
|
-
- 支持大文件处理(自动上传到模型平台)
|
18
|
-
- 提供3次重试机制确保操作可靠性
|
19
16
|
"""
|
20
17
|
from typing import Any, Dict
|
21
18
|
|
@@ -134,7 +131,6 @@ class FileSearchReplaceTool:
|
|
134
131
|
for file_info in args["files"]:
|
135
132
|
file_path = os.path.abspath(file_info["path"])
|
136
133
|
changes = file_info["changes"]
|
137
|
-
agent = args.get("agent", None)
|
138
134
|
|
139
135
|
# 创建已处理文件变量,用于失败时回滚
|
140
136
|
original_content = None
|
@@ -152,44 +148,23 @@ class FileSearchReplaceTool:
|
|
152
148
|
content = f.read()
|
153
149
|
original_content = content
|
154
150
|
|
155
|
-
if file_exists and agent:
|
156
|
-
files = agent.get_user_data("files")
|
157
|
-
if not files or file_path not in files:
|
158
|
-
file_results.append(
|
159
|
-
{
|
160
|
-
"file": file_path,
|
161
|
-
"success": False,
|
162
|
-
"stdout": "",
|
163
|
-
"stderr": f"请先读取文件 {file_path} 的内容后再编辑",
|
164
|
-
}
|
165
|
-
)
|
166
|
-
continue
|
167
|
-
|
168
151
|
print(f"⚙️ 正在处理文件 {file_path}...")
|
169
|
-
# 首先尝试fast_edit模式
|
170
152
|
success, temp_content = EditFileHandler._fast_edit(
|
171
153
|
file_path, changes
|
172
154
|
)
|
173
155
|
if not success:
|
174
|
-
|
175
|
-
|
176
|
-
|
156
|
+
print(f"❌ 文件 {file_path} 处理失败")
|
157
|
+
file_results.append(
|
158
|
+
{
|
159
|
+
"file": file_path,
|
160
|
+
"success": False,
|
161
|
+
"stdout": "",
|
162
|
+
"stderr": temp_content,
|
163
|
+
}
|
177
164
|
)
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
{
|
182
|
-
"file": file_path,
|
183
|
-
"success": False,
|
184
|
-
"stdout": "",
|
185
|
-
"stderr": temp_content,
|
186
|
-
}
|
187
|
-
)
|
188
|
-
continue
|
189
|
-
else:
|
190
|
-
print(f"✅ 文件 {file_path} 内容生成完成")
|
191
|
-
else:
|
192
|
-
print(f"✅ 文件 {file_path} 内容生成完成")
|
165
|
+
continue
|
166
|
+
|
167
|
+
print(f"✅ 文件 {file_path} 内容生成完成")
|
193
168
|
|
194
169
|
# 只有当所有替换操作都成功时,才写回文件
|
195
170
|
if success and (
|
jarvis/jarvis_utils/config.py
CHANGED
@@ -255,21 +255,6 @@ def get_mcp_config() -> List[Dict[str, Any]]:
|
|
255
255
|
# RAG Framework Configuration
|
256
256
|
# ==============================================================================
|
257
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
258
|
|
274
259
|
def get_rag_config() -> Dict[str, Any]:
|
275
260
|
"""
|
@@ -281,24 +266,24 @@ def get_rag_config() -> Dict[str, Any]:
|
|
281
266
|
return GLOBAL_CONFIG_DATA.get("JARVIS_RAG", {})
|
282
267
|
|
283
268
|
|
284
|
-
def
|
269
|
+
def get_rag_embedding_model() -> str:
|
285
270
|
"""
|
286
|
-
获取RAG
|
271
|
+
获取RAG嵌入模型的名称。
|
287
272
|
|
288
273
|
返回:
|
289
|
-
|
274
|
+
str: 嵌入模型的名称
|
290
275
|
"""
|
291
|
-
return
|
276
|
+
return get_rag_config().get("embedding_model", "BAAI/bge-base-zh-v1.5")
|
292
277
|
|
293
278
|
|
294
|
-
def
|
279
|
+
def get_rag_rerank_model() -> str:
|
295
280
|
"""
|
296
|
-
获取RAG
|
281
|
+
获取RAG rerank模型的名称。
|
297
282
|
|
298
283
|
返回:
|
299
|
-
str:
|
284
|
+
str: rerank模型的名称
|
300
285
|
"""
|
301
|
-
return get_rag_config().get("
|
286
|
+
return get_rag_config().get("rerank_model", "BAAI/bge-reranker-base")
|
302
287
|
|
303
288
|
|
304
289
|
def get_rag_embedding_cache_path() -> str:
|
@@ -308,7 +293,7 @@ def get_rag_embedding_cache_path() -> str:
|
|
308
293
|
返回:
|
309
294
|
str: 缓存路径
|
310
295
|
"""
|
311
|
-
return
|
296
|
+
return ".jarvis/rag/embeddings"
|
312
297
|
|
313
298
|
|
314
299
|
def get_rag_vector_db_path() -> str:
|
@@ -318,4 +303,4 @@ def get_rag_vector_db_path() -> str:
|
|
318
303
|
返回:
|
319
304
|
str: 数据库路径
|
320
305
|
"""
|
321
|
-
return
|
306
|
+
return ".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.221
|
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
|
@@ -59,16 +59,6 @@ Requires-Dist: pyyaml>=5.3.1
|
|
59
59
|
Requires-Dist: ddgs==9.0.2
|
60
60
|
Requires-Dist: beautifulsoup4==4.13.4
|
61
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
|
72
62
|
Provides-Extra: dev
|
73
63
|
Requires-Dist: pytest; extra == "dev"
|
74
64
|
Requires-Dist: black; extra == "dev"
|
@@ -76,6 +66,17 @@ Requires-Dist: isort; extra == "dev"
|
|
76
66
|
Requires-Dist: mypy; extra == "dev"
|
77
67
|
Requires-Dist: build; extra == "dev"
|
78
68
|
Requires-Dist: twine; extra == "dev"
|
69
|
+
Provides-Extra: rag
|
70
|
+
Requires-Dist: langchain; extra == "rag"
|
71
|
+
Requires-Dist: langchain-community; extra == "rag"
|
72
|
+
Requires-Dist: langchain-huggingface; extra == "rag"
|
73
|
+
Requires-Dist: chromadb; extra == "rag"
|
74
|
+
Requires-Dist: diskcache; extra == "rag"
|
75
|
+
Requires-Dist: sentence-transformers==2.7.0; extra == "rag"
|
76
|
+
Requires-Dist: torch>=2.6; extra == "rag"
|
77
|
+
Requires-Dist: typer; extra == "rag"
|
78
|
+
Requires-Dist: unstructured[md]; extra == "rag"
|
79
|
+
Requires-Dist: rank-bm25; extra == "rag"
|
79
80
|
Dynamic: author
|
80
81
|
Dynamic: home-page
|
81
82
|
Dynamic: license-file
|
@@ -546,6 +547,7 @@ OPENAI_API_BASE: https://api.openai.com/v1
|
|
546
547
|
| `JARVIS_USE_METHODOLOGY` | true | 是否启用方法论功能 |
|
547
548
|
| `JARVIS_USE_ANALYSIS` | true | 是否启用任务分析功能 |
|
548
549
|
| `JARVIS_DATA_PATH` | ~/.jarvis | Jarvis数据存储目录路径 |
|
550
|
+
| `JARVIS_RAG` | `{"embedding_model": "BAAI/bge-base-zh-v1.5"}` | RAG框架的配置 |
|
549
551
|
|
550
552
|
## 🛠️ 工具说明 <a id="tools"></a>
|
551
553
|
|
@@ -604,7 +606,7 @@ jarvis-rag add README.md ./docs/ 'src/jarvis/jarvis_rag/*.py'
|
|
604
606
|
|---|---|
|
605
607
|
| `paths` | **[必需]** 一个或多个文件路径、目录路径或用引号包裹的通配符模式。 |
|
606
608
|
| `--collection` | 指定知识库的集合名称(默认为 `jarvis_rag_collection`)。 |
|
607
|
-
| `--embedding-
|
609
|
+
| `--embedding-model` | 覆盖全局配置,强制使用特定的嵌入模型名称。 |
|
608
610
|
| `--db-path` | 覆盖全局配置,指定向量数据库的存储路径。 |
|
609
611
|
|
610
612
|
##### 2.2 查询知识库 (`query`)
|
@@ -631,6 +633,7 @@ jarvis-rag query "代码中的 'PlatformRegistry' 类是做什么用的?" --pl
|
|
631
633
|
| `--collection` | 指定要查询的知识库集合名称。 |
|
632
634
|
| `--platform` | 指定一个平台名称来回答问题,覆盖默认的“思考”模型。 |
|
633
635
|
| `--model` | 指定一个模型名称来回答问题,需要与 `--platform` 同时使用。 |
|
636
|
+
| `--embedding-model` | 覆盖全局配置,强制使用特定的嵌入模型名称。 |
|
634
637
|
|
635
638
|
### 3. 命令替换功能
|
636
639
|
支持使用特殊标记`'<tag>'`触发命令替换功能:
|
@@ -1,13 +1,18 @@
|
|
1
|
-
jarvis/__init__.py,sha256=
|
2
|
-
jarvis/jarvis_agent/__init__.py,sha256=
|
1
|
+
jarvis/__init__.py,sha256=TgbmsIAvNeODBETy0s6gdVjK6p08SbEz7rEqI5VYYmw,75
|
2
|
+
jarvis/jarvis_agent/__init__.py,sha256=gjN3tUhHMmX3oAaAyAid4pkCW2R3zDnWLwF_qqRnix4,21443
|
3
3
|
jarvis/jarvis_agent/builtin_input_handler.py,sha256=lcw-VBm8-CVcblxEbGU4dVD6IixgXTLz9uBrv9Y6p20,2710
|
4
|
-
jarvis/jarvis_agent/edit_file_handler.py,sha256=
|
4
|
+
jarvis/jarvis_agent/edit_file_handler.py,sha256=ml1o-BE2Ca1-ybPlKuhstLQYwdJag39o0_-PXTUvFaE,11646
|
5
5
|
jarvis/jarvis_agent/jarvis.py,sha256=4LBtAh9_AuQcjvqBFInqY19eyEJVJtGH4py32yu8olc,6287
|
6
6
|
jarvis/jarvis_agent/main.py,sha256=c6bQe-8LXvW2-NBn9Rn_yPYdrwnkJ8KQaSFY2cPvkxw,2775
|
7
7
|
jarvis/jarvis_agent/output_handler.py,sha256=P7oWpXBGFfOsWq7cIhS_z9crkQ19ES7qU5pM92KKjAs,1172
|
8
|
+
jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh2lC__p40,1705
|
9
|
+
jarvis/jarvis_agent/prompts.py,sha256=e8i-3kaGr96mlzL3UUhQUHFDfbJSoE4xiF9TDksNDm4,7720
|
10
|
+
jarvis/jarvis_agent/protocols.py,sha256=JWnJDikFEuwvFUv7uzXu0ggJ4O9K2FkMnfVCwIJ5REw,873
|
11
|
+
jarvis/jarvis_agent/session_manager.py,sha256=DnvI9rWkVmkyO1XfKZyo9lTn4ajg4ccwzEkoRHFPOJM,2925
|
8
12
|
jarvis/jarvis_agent/shell_input_handler.py,sha256=1IboqdxcJuoIqRpmDU10GugR9fWXUHyCEbVF4nIWbyo,1328
|
13
|
+
jarvis/jarvis_agent/tool_executor.py,sha256=nIq-sPNgrtimtM-IHpN09cWmId8jDzWRdCFoRzXnnoo,1721
|
9
14
|
jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
|
-
jarvis/jarvis_code_agent/code_agent.py,sha256=
|
15
|
+
jarvis/jarvis_code_agent/code_agent.py,sha256=MnIQMuSpBM-0u8gmXthpRhPQGCBOmK7nK9OCpTwoq6c,18763
|
11
16
|
jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
|
12
17
|
jarvis/jarvis_code_analysis/code_review.py,sha256=uCCbGd4Y1RjDzhZoVE8JdN2avlwOfqimSDIrcM-KMew,30456
|
13
18
|
jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
|
@@ -30,7 +35,7 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
|
|
30
35
|
jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
|
31
36
|
jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
|
32
37
|
jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
|
33
|
-
jarvis/jarvis_data/config_schema.json,sha256=
|
38
|
+
jarvis/jarvis_data/config_schema.json,sha256=RvK4XCVRGRVokguob_3-43BHRAyVFfb8tleU3QxLO1M,6520
|
34
39
|
jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
|
35
40
|
jarvis/jarvis_git_details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
41
|
jarvis/jarvis_git_details/main.py,sha256=MjpUHB4ErR_SKPBx1TLLK_XLkH427RTtsyVn6EUd88Y,8907
|
@@ -57,21 +62,21 @@ jarvis/jarvis_platform/yuanbao.py,sha256=AIGQ0VOD_IAwWLnU9G19OG0XAbHpcJDzVWX2Vaz
|
|
57
62
|
jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
63
|
jarvis/jarvis_platform_manager/main.py,sha256=LxlXSfIfmkYNcajOG_XvvlmwlSWSGb0DmbzIDSHHYOU,18330
|
59
64
|
jarvis/jarvis_platform_manager/service.py,sha256=hQGWQ2qAlzm_C_lNQDuLORQ4rmjR1P1-V3ou7l2Bv0s,13622
|
60
|
-
jarvis/jarvis_rag/__init__.py,sha256=
|
61
|
-
jarvis/jarvis_rag/cache.py,sha256=
|
62
|
-
jarvis/jarvis_rag/cli.py,sha256=
|
63
|
-
jarvis/jarvis_rag/embedding_manager.py,sha256=
|
64
|
-
jarvis/jarvis_rag/llm_interface.py,sha256=
|
65
|
-
jarvis/jarvis_rag/query_rewriter.py,sha256=
|
66
|
-
jarvis/jarvis_rag/rag_pipeline.py,sha256=
|
67
|
-
jarvis/jarvis_rag/reranker.py,sha256=
|
68
|
-
jarvis/jarvis_rag/retriever.py,sha256=
|
65
|
+
jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
|
66
|
+
jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
|
67
|
+
jarvis/jarvis_rag/cli.py,sha256=iR26y7ZLj4HECl3zveY4fxwn-mhMnQ__IxHQo2NAwD0,13143
|
68
|
+
jarvis/jarvis_rag/embedding_manager.py,sha256=BoV6Vr_3F4zbjBAOQ1FdEBnJXGPwBkv1IEkdRP9CgFw,3338
|
69
|
+
jarvis/jarvis_rag/llm_interface.py,sha256=44Uu04v2_MxweLmMdR0YWbnxlfchAPAzLBEQmJdLjeU,4368
|
70
|
+
jarvis/jarvis_rag/query_rewriter.py,sha256=JM1Q23zZISze77BleRgTPgNAtLUtLAXkEo3G70kaTK8,2190
|
71
|
+
jarvis/jarvis_rag/rag_pipeline.py,sha256=9yeNRv6qOS2zo7o0b0u3gFmiW_XSivesvPKVJ8e5DlE,6209
|
72
|
+
jarvis/jarvis_rag/reranker.py,sha256=wYUDIMHQL8_tFcQ7GFn_zYHTE1AbKk4a9TRoN2lKtA8,1767
|
73
|
+
jarvis/jarvis_rag/retriever.py,sha256=B6oq1SAh7QAE9G5o0sXyNtLjFodukd8p-Was2QJZXg0,7637
|
69
74
|
jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
70
75
|
jarvis/jarvis_smart_shell/main.py,sha256=DbhRSP1sZfSIaTltP1YWVDSQOTYEsbiOnfO9kSYwcNs,6959
|
71
76
|
jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
77
|
jarvis/jarvis_tools/ask_user.py,sha256=iz2PTGx66IRL8e4DOpj3XhEGHFWeKQl0ggEOl_zOwQ0,1972
|
73
78
|
jarvis/jarvis_tools/base.py,sha256=tFVmK6ppsImW2BzHZmrNmMRiOJdW-4aZP6Me3VxdYcA,1194
|
74
|
-
jarvis/jarvis_tools/edit_file.py,sha256=
|
79
|
+
jarvis/jarvis_tools/edit_file.py,sha256=hM345E9rxS-EkqCZpwwizL6fmPdTadtB798tEO5Ce3g,10417
|
75
80
|
jarvis/jarvis_tools/execute_script.py,sha256=gMarE5yCCSPU6Dp6HlcL2KT-2xCzR-1p-oQNlYOJK58,6157
|
76
81
|
jarvis/jarvis_tools/file_analyzer.py,sha256=aVe1jBSp0YmlypihxrGADJpYrU_7CxDETxGUNySuSlI,4044
|
77
82
|
jarvis/jarvis_tools/generate_new_tool.py,sha256=2YAs8DC7fJnxOkjSmhmSAwqSpBlicVhYc06WZ8YVBls,7679
|
@@ -86,7 +91,7 @@ jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
86
91
|
jarvis/jarvis_tools/cli/main.py,sha256=Mg6TQDxMdzB1Ua1UrZ2EE-uQWsbaeojWaEGHJp2HimA,6375
|
87
92
|
jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
|
88
93
|
jarvis/jarvis_utils/builtin_replace_map.py,sha256=EI8JnHqr-ZpAhpwocTu48DhHUMHNd8tNUpDNYI47OLE,1717
|
89
|
-
jarvis/jarvis_utils/config.py,sha256=
|
94
|
+
jarvis/jarvis_utils/config.py,sha256=h7H2CRix-A6-25al3EpudmipdSq1CiIoqM2Wp8rdgqU,7778
|
90
95
|
jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
|
91
96
|
jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
|
92
97
|
jarvis/jarvis_utils/git_utils.py,sha256=4mNbEgV0icMnB1UL1RWhE9Nxik3mwam2qcGMpd1ODJM,21707
|
@@ -97,9 +102,9 @@ jarvis/jarvis_utils/methodology.py,sha256=-cvM6pwgJK7BXCYg2uVjIId_j3v5RUh2z2PBcK
|
|
97
102
|
jarvis/jarvis_utils/output.py,sha256=PRCgudPOB8gMEP3u-g0FGD2c6tBgJhLXUMqNPglfjV8,10813
|
98
103
|
jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
|
99
104
|
jarvis/jarvis_utils/utils.py,sha256=ojupkZQfFIE6ysTyCy0jUdePucpwpvZlZJSXkGsdyQE,15263
|
100
|
-
jarvis_ai_assistant-0.1.
|
101
|
-
jarvis_ai_assistant-0.1.
|
102
|
-
jarvis_ai_assistant-0.1.
|
103
|
-
jarvis_ai_assistant-0.1.
|
104
|
-
jarvis_ai_assistant-0.1.
|
105
|
-
jarvis_ai_assistant-0.1.
|
105
|
+
jarvis_ai_assistant-0.1.221.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
|
106
|
+
jarvis_ai_assistant-0.1.221.dist-info/METADATA,sha256=az-ngvUTXWE8ZtSHG9mxhe69Dn7PIrmpcCi6QdloSGg,22955
|
107
|
+
jarvis_ai_assistant-0.1.221.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
108
|
+
jarvis_ai_assistant-0.1.221.dist-info/entry_points.txt,sha256=L-9EE1kKoCdzxY9iMT7dGgBad-ytc3rso4if8C19SQU,915
|
109
|
+
jarvis_ai_assistant-0.1.221.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
|
110
|
+
jarvis_ai_assistant-0.1.221.dist-info/RECORD,,
|
File without changes
|
{jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/entry_points.txt
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{jarvis_ai_assistant-0.1.220.dist-info → jarvis_ai_assistant-0.1.221.dist-info}/top_level.txt
RENAMED
File without changes
|