auto-coder-web 0.1.57__py3-none-any.whl → 0.1.58__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.
Files changed (27) hide show
  1. auto_coder_web/expert_routers/history_router.py +1 -2
  2. auto_coder_web/proxy.py +3 -1
  3. auto_coder_web/routers/rag_router.py +122 -0
  4. auto_coder_web/version.py +1 -1
  5. auto_coder_web/web/assets/{cssMode-CASSua2g.js → cssMode-CHKgyP7k.js} +1 -1
  6. auto_coder_web/web/assets/{freemarker2-Cfge5bCe.js → freemarker2-VecMn0a-.js} +1 -1
  7. auto_coder_web/web/assets/{handlebars-DD9vaFGU.js → handlebars-suCFZKB1.js} +1 -1
  8. auto_coder_web/web/assets/{html-wMu7NWVV.js → html-BaTdlezw.js} +1 -1
  9. auto_coder_web/web/assets/{htmlMode-BJMZKVjn.js → htmlMode-DVw8dO4V.js} +1 -1
  10. auto_coder_web/web/assets/{index-dgy4j9V_.css → index-CDEGkh-B.css} +1 -1
  11. auto_coder_web/web/assets/{index-BB-izReD.js → index-LPF9pOVA.js} +363 -363
  12. auto_coder_web/web/assets/{javascript-2ffNaYoE.js → javascript-DzFj73X-.js} +1 -1
  13. auto_coder_web/web/assets/{jsonMode-C5X-fxen.js → jsonMode-B7e1-bLg.js} +1 -1
  14. auto_coder_web/web/assets/{liquid-C3uwo_9k.js → liquid-CMLQaZc5.js} +1 -1
  15. auto_coder_web/web/assets/{mdx-CqGFZJJX.js → mdx-DCeMDiMx.js} +1 -1
  16. auto_coder_web/web/assets/{python-BvxzqvR4.js → python-BfbGk_j0.js} +1 -1
  17. auto_coder_web/web/assets/{razor-DFYpxRz5.js → razor-NtK1iBZB.js} +1 -1
  18. auto_coder_web/web/assets/{tsMode-DLkYryH0.js → tsMode-9oawC9nC.js} +1 -1
  19. auto_coder_web/web/assets/{typescript-Dvi9C8gH.js → typescript-yE4BX-q5.js} +1 -1
  20. auto_coder_web/web/assets/{xml-DTJhoFj9.js → xml-Cy76E2H9.js} +1 -1
  21. auto_coder_web/web/assets/{yaml-CveCF9Jn.js → yaml-LzxmQTR9.js} +1 -1
  22. auto_coder_web/web/index.html +2 -2
  23. {auto_coder_web-0.1.57.dist-info → auto_coder_web-0.1.58.dist-info}/METADATA +2 -2
  24. {auto_coder_web-0.1.57.dist-info → auto_coder_web-0.1.58.dist-info}/RECORD +27 -26
  25. {auto_coder_web-0.1.57.dist-info → auto_coder_web-0.1.58.dist-info}/WHEEL +0 -0
  26. {auto_coder_web-0.1.57.dist-info → auto_coder_web-0.1.58.dist-info}/entry_points.txt +0 -0
  27. {auto_coder_web-0.1.57.dist-info → auto_coder_web-0.1.58.dist-info}/top_level.txt +0 -0
@@ -142,8 +142,7 @@ async def validate_and_load_history(
142
142
 
143
143
  # 检查该提交是否已被撤销
144
144
  is_reverted = False
145
- if response_id and response_id in reverted_commits:
146
- logger.info(f"提交 {response_id[:7]} 已被撤销")
145
+ if response_id and response_id in reverted_commits:
147
146
  is_reverted = True
148
147
 
149
148
  # 提取上下文URL(如果有)
auto_coder_web/proxy.py CHANGED
@@ -19,7 +19,7 @@ import sys
19
19
  from auto_coder_web.terminal import terminal_manager
20
20
  from autocoder.common import AutoCoderArgs
21
21
  from auto_coder_web.auto_coder_runner_wrapper import AutoCoderRunnerWrapper
22
- from auto_coder_web.routers import todo_router, settings_router, auto_router, commit_router, chat_router, coding_router,index_router,config_router,upload_router
22
+ from auto_coder_web.routers import todo_router, settings_router, auto_router, commit_router, chat_router, coding_router, index_router, config_router, upload_router, rag_router
23
23
  from auto_coder_web.expert_routers import history_router
24
24
  from auto_coder_web.common_router import completions_router, file_router, auto_coder_conf_router, chat_list_router, file_group_router, model_router, compiler_router
25
25
  from rich.console import Console
@@ -99,6 +99,8 @@ class ProxyServer:
99
99
  self.app.include_router(index_router.router)
100
100
  self.app.include_router(config_router.router)
101
101
  self.app.include_router(upload_router.router)
102
+ self.app.include_router(rag_router.router)
103
+ # self.app.include_router(rag_router.router)
102
104
 
103
105
  @self.app.on_event("shutdown")
104
106
  async def shutdown_event():
@@ -0,0 +1,122 @@
1
+ import os
2
+ import json
3
+ import logging
4
+ import aiofiles
5
+ from fastapi import APIRouter, HTTPException, Depends, Request
6
+ from pydantic import BaseModel
7
+ from typing import List, Optional
8
+ from pathlib import Path as FilePath
9
+ import asyncio
10
+ from fastapi.responses import JSONResponse
11
+
12
+ router = APIRouter()
13
+
14
+ # Configuration storage path
15
+ def get_rags_file_path(project_path: str) -> FilePath:
16
+ return FilePath(project_path) / ".auto-coder" / "auto-coder.web" / "rags" / "rags.json"
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+ class Rag(BaseModel):
21
+ name: str
22
+ base_url: str
23
+ api_key: str = "xxxx"
24
+
25
+ class RagList(BaseModel):
26
+ data: List[Rag] = []
27
+
28
+ async def get_project_path(request: Request) -> str:
29
+ """
30
+ 从FastAPI请求上下文中获取项目路径
31
+ """
32
+ return request.app.state.project_path
33
+
34
+ async def load_rags(project_path: str) -> RagList:
35
+ """Asynchronously load RAGs"""
36
+ rags_file = get_rags_file_path(project_path)
37
+
38
+ # Ensure directory exists
39
+ rags_file.parent.mkdir(parents=True, exist_ok=True)
40
+
41
+ if not await asyncio.to_thread(lambda: rags_file.exists()):
42
+ # If file doesn't exist, return default empty list
43
+ return RagList()
44
+
45
+ try:
46
+ async with aiofiles.open(rags_file, mode='r') as f:
47
+ content = await f.read()
48
+ return RagList(**json.loads(content))
49
+ except (json.JSONDecodeError, FileNotFoundError):
50
+ logger.error("Failed to parse rags.json, returning empty list")
51
+ return RagList()
52
+
53
+ async def save_rags(rags: RagList, project_path: str):
54
+ """Asynchronously save RAGs"""
55
+ rags_file = get_rags_file_path(project_path)
56
+
57
+ # Ensure directory exists
58
+ rags_file.parent.mkdir(parents=True, exist_ok=True)
59
+
60
+ async with aiofiles.open(rags_file, mode='w') as f:
61
+ await f.write(json.dumps(rags.dict(), indent=2, ensure_ascii=False))
62
+
63
+ @router.get("/api/rags")
64
+ async def get_rags(project_path: str = Depends(get_project_path)):
65
+ """Get all RAGs"""
66
+ rags = await load_rags(project_path)
67
+ return rags
68
+
69
+ @router.post("/api/rags")
70
+ async def create_rag(rag: Rag, project_path: str = Depends(get_project_path)):
71
+ """Create a new RAG"""
72
+ rags = await load_rags(project_path)
73
+
74
+ # Check if RAG with same name already exists
75
+ if any(r.name == rag.name for r in rags.data):
76
+ raise HTTPException(status_code=400, detail=f"RAG with name '{rag.name}' already exists")
77
+
78
+ rags.data.append(rag)
79
+ await save_rags(rags, project_path)
80
+ return {"status": "success", "message": "RAG created successfully"}
81
+
82
+ @router.get("/api/rags/{name}")
83
+ async def get_rag(name: str, project_path: str = Depends(get_project_path)):
84
+ """Get a specific RAG by name"""
85
+ rags = await load_rags(project_path)
86
+
87
+ for rag in rags.data:
88
+ if rag.name == name:
89
+ return rag
90
+
91
+ raise HTTPException(status_code=404, detail=f"RAG with name '{name}' not found")
92
+
93
+ @router.put("/api/rags/{name}")
94
+ async def update_rag(name: str, updated_rag: Rag, project_path: str = Depends(get_project_path)):
95
+ """Update an existing RAG"""
96
+ rags = await load_rags(project_path)
97
+
98
+ for i, rag in enumerate(rags.data):
99
+ if rag.name == name:
100
+ # Ensure name doesn't change
101
+ if updated_rag.name != name:
102
+ raise HTTPException(status_code=400, detail="RAG name cannot be changed")
103
+
104
+ rags.data[i] = updated_rag
105
+ await save_rags(rags, project_path)
106
+ return {"status": "success", "message": "RAG updated successfully"}
107
+
108
+ raise HTTPException(status_code=404, detail=f"RAG with name '{name}' not found")
109
+
110
+ @router.delete("/api/rags/{name}")
111
+ async def delete_rag(name: str, project_path: str = Depends(get_project_path)):
112
+ """Delete a RAG by name"""
113
+ rags = await load_rags(project_path)
114
+
115
+ initial_count = len(rags.data)
116
+ rags.data = [rag for rag in rags.data if rag.name != name]
117
+
118
+ if len(rags.data) == initial_count:
119
+ raise HTTPException(status_code=404, detail=f"RAG with name '{name}' not found")
120
+
121
+ await save_rags(rags, project_path)
122
+ return {"status": "success", "message": "RAG deleted successfully"}
auto_coder_web/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.57"
1
+ __version__ = "0.1.58"
@@ -1,4 +1,4 @@
1
- import{m as et}from"./index-BB-izReD.js";/*!-----------------------------------------------------------------------------
1
+ import{m as et}from"./index-LPF9pOVA.js";/*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Version: 0.52.2(404545bded1df6ffa41ea0af4e8ddb219018c6c1)
4
4
  * Released under the MIT license
@@ -1,4 +1,4 @@
1
- import{m as f}from"./index-BB-izReD.js";/*!-----------------------------------------------------------------------------
1
+ import{m as f}from"./index-LPF9pOVA.js";/*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Version: 0.52.2(404545bded1df6ffa41ea0af4e8ddb219018c6c1)
4
4
  * Released under the MIT license
@@ -1,4 +1,4 @@
1
- import{m as l}from"./index-BB-izReD.js";/*!-----------------------------------------------------------------------------
1
+ import{m as l}from"./index-LPF9pOVA.js";/*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Version: 0.52.2(404545bded1df6ffa41ea0af4e8ddb219018c6c1)
4
4
  * Released under the MIT license
@@ -1,4 +1,4 @@
1
- import{m as s}from"./index-BB-izReD.js";/*!-----------------------------------------------------------------------------
1
+ import{m as s}from"./index-LPF9pOVA.js";/*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Version: 0.52.2(404545bded1df6ffa41ea0af4e8ddb219018c6c1)
4
4
  * Released under the MIT license
@@ -1,4 +1,4 @@
1
- import{m as lt}from"./index-BB-izReD.js";/*!-----------------------------------------------------------------------------
1
+ import{m as lt}from"./index-LPF9pOVA.js";/*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
3
  * Version: 0.52.2(404545bded1df6ffa41ea0af4e8ddb219018c6c1)
4
4
  * Released under the MIT license