realtimex-deeptutor 0.5.0.post1__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.
- realtimex_deeptutor/__init__.py +67 -0
- realtimex_deeptutor-0.5.0.post1.dist-info/METADATA +1612 -0
- realtimex_deeptutor-0.5.0.post1.dist-info/RECORD +276 -0
- realtimex_deeptutor-0.5.0.post1.dist-info/WHEEL +5 -0
- realtimex_deeptutor-0.5.0.post1.dist-info/entry_points.txt +2 -0
- realtimex_deeptutor-0.5.0.post1.dist-info/licenses/LICENSE +661 -0
- realtimex_deeptutor-0.5.0.post1.dist-info/top_level.txt +2 -0
- src/__init__.py +40 -0
- src/agents/__init__.py +24 -0
- src/agents/base_agent.py +657 -0
- src/agents/chat/__init__.py +24 -0
- src/agents/chat/chat_agent.py +435 -0
- src/agents/chat/prompts/en/chat_agent.yaml +35 -0
- src/agents/chat/prompts/zh/chat_agent.yaml +35 -0
- src/agents/chat/session_manager.py +311 -0
- src/agents/co_writer/__init__.py +0 -0
- src/agents/co_writer/edit_agent.py +260 -0
- src/agents/co_writer/narrator_agent.py +423 -0
- src/agents/co_writer/prompts/en/edit_agent.yaml +113 -0
- src/agents/co_writer/prompts/en/narrator_agent.yaml +88 -0
- src/agents/co_writer/prompts/zh/edit_agent.yaml +113 -0
- src/agents/co_writer/prompts/zh/narrator_agent.yaml +88 -0
- src/agents/guide/__init__.py +16 -0
- src/agents/guide/agents/__init__.py +11 -0
- src/agents/guide/agents/chat_agent.py +104 -0
- src/agents/guide/agents/interactive_agent.py +223 -0
- src/agents/guide/agents/locate_agent.py +149 -0
- src/agents/guide/agents/summary_agent.py +150 -0
- src/agents/guide/guide_manager.py +500 -0
- src/agents/guide/prompts/en/chat_agent.yaml +41 -0
- src/agents/guide/prompts/en/interactive_agent.yaml +202 -0
- src/agents/guide/prompts/en/locate_agent.yaml +68 -0
- src/agents/guide/prompts/en/summary_agent.yaml +157 -0
- src/agents/guide/prompts/zh/chat_agent.yaml +41 -0
- src/agents/guide/prompts/zh/interactive_agent.yaml +626 -0
- src/agents/guide/prompts/zh/locate_agent.yaml +68 -0
- src/agents/guide/prompts/zh/summary_agent.yaml +157 -0
- src/agents/ideagen/__init__.py +12 -0
- src/agents/ideagen/idea_generation_workflow.py +426 -0
- src/agents/ideagen/material_organizer_agent.py +173 -0
- src/agents/ideagen/prompts/en/idea_generation.yaml +187 -0
- src/agents/ideagen/prompts/en/material_organizer.yaml +69 -0
- src/agents/ideagen/prompts/zh/idea_generation.yaml +187 -0
- src/agents/ideagen/prompts/zh/material_organizer.yaml +69 -0
- src/agents/question/__init__.py +24 -0
- src/agents/question/agents/__init__.py +18 -0
- src/agents/question/agents/generate_agent.py +381 -0
- src/agents/question/agents/relevance_analyzer.py +207 -0
- src/agents/question/agents/retrieve_agent.py +239 -0
- src/agents/question/coordinator.py +718 -0
- src/agents/question/example.py +109 -0
- src/agents/question/prompts/en/coordinator.yaml +75 -0
- src/agents/question/prompts/en/generate_agent.yaml +77 -0
- src/agents/question/prompts/en/relevance_analyzer.yaml +41 -0
- src/agents/question/prompts/en/retrieve_agent.yaml +32 -0
- src/agents/question/prompts/zh/coordinator.yaml +75 -0
- src/agents/question/prompts/zh/generate_agent.yaml +77 -0
- src/agents/question/prompts/zh/relevance_analyzer.yaml +39 -0
- src/agents/question/prompts/zh/retrieve_agent.yaml +30 -0
- src/agents/research/agents/__init__.py +23 -0
- src/agents/research/agents/decompose_agent.py +507 -0
- src/agents/research/agents/manager_agent.py +228 -0
- src/agents/research/agents/note_agent.py +180 -0
- src/agents/research/agents/rephrase_agent.py +263 -0
- src/agents/research/agents/reporting_agent.py +1333 -0
- src/agents/research/agents/research_agent.py +714 -0
- src/agents/research/data_structures.py +451 -0
- src/agents/research/main.py +188 -0
- src/agents/research/prompts/en/decompose_agent.yaml +89 -0
- src/agents/research/prompts/en/manager_agent.yaml +24 -0
- src/agents/research/prompts/en/note_agent.yaml +121 -0
- src/agents/research/prompts/en/rephrase_agent.yaml +58 -0
- src/agents/research/prompts/en/reporting_agent.yaml +380 -0
- src/agents/research/prompts/en/research_agent.yaml +173 -0
- src/agents/research/prompts/zh/decompose_agent.yaml +89 -0
- src/agents/research/prompts/zh/manager_agent.yaml +24 -0
- src/agents/research/prompts/zh/note_agent.yaml +121 -0
- src/agents/research/prompts/zh/rephrase_agent.yaml +58 -0
- src/agents/research/prompts/zh/reporting_agent.yaml +380 -0
- src/agents/research/prompts/zh/research_agent.yaml +173 -0
- src/agents/research/research_pipeline.py +1309 -0
- src/agents/research/utils/__init__.py +60 -0
- src/agents/research/utils/citation_manager.py +799 -0
- src/agents/research/utils/json_utils.py +98 -0
- src/agents/research/utils/token_tracker.py +297 -0
- src/agents/solve/__init__.py +80 -0
- src/agents/solve/analysis_loop/__init__.py +14 -0
- src/agents/solve/analysis_loop/investigate_agent.py +414 -0
- src/agents/solve/analysis_loop/note_agent.py +190 -0
- src/agents/solve/main_solver.py +862 -0
- src/agents/solve/memory/__init__.py +34 -0
- src/agents/solve/memory/citation_memory.py +353 -0
- src/agents/solve/memory/investigate_memory.py +226 -0
- src/agents/solve/memory/solve_memory.py +340 -0
- src/agents/solve/prompts/en/analysis_loop/investigate_agent.yaml +55 -0
- src/agents/solve/prompts/en/analysis_loop/note_agent.yaml +54 -0
- src/agents/solve/prompts/en/solve_loop/manager_agent.yaml +67 -0
- src/agents/solve/prompts/en/solve_loop/precision_answer_agent.yaml +62 -0
- src/agents/solve/prompts/en/solve_loop/response_agent.yaml +90 -0
- src/agents/solve/prompts/en/solve_loop/solve_agent.yaml +75 -0
- src/agents/solve/prompts/en/solve_loop/tool_agent.yaml +38 -0
- src/agents/solve/prompts/zh/analysis_loop/investigate_agent.yaml +53 -0
- src/agents/solve/prompts/zh/analysis_loop/note_agent.yaml +54 -0
- src/agents/solve/prompts/zh/solve_loop/manager_agent.yaml +66 -0
- src/agents/solve/prompts/zh/solve_loop/precision_answer_agent.yaml +62 -0
- src/agents/solve/prompts/zh/solve_loop/response_agent.yaml +90 -0
- src/agents/solve/prompts/zh/solve_loop/solve_agent.yaml +76 -0
- src/agents/solve/prompts/zh/solve_loop/tool_agent.yaml +41 -0
- src/agents/solve/solve_loop/__init__.py +22 -0
- src/agents/solve/solve_loop/citation_manager.py +74 -0
- src/agents/solve/solve_loop/manager_agent.py +274 -0
- src/agents/solve/solve_loop/precision_answer_agent.py +96 -0
- src/agents/solve/solve_loop/response_agent.py +301 -0
- src/agents/solve/solve_loop/solve_agent.py +325 -0
- src/agents/solve/solve_loop/tool_agent.py +470 -0
- src/agents/solve/utils/__init__.py +64 -0
- src/agents/solve/utils/config_validator.py +313 -0
- src/agents/solve/utils/display_manager.py +223 -0
- src/agents/solve/utils/error_handler.py +363 -0
- src/agents/solve/utils/json_utils.py +98 -0
- src/agents/solve/utils/performance_monitor.py +407 -0
- src/agents/solve/utils/token_tracker.py +541 -0
- src/api/__init__.py +0 -0
- src/api/main.py +240 -0
- src/api/routers/__init__.py +1 -0
- src/api/routers/agent_config.py +69 -0
- src/api/routers/chat.py +296 -0
- src/api/routers/co_writer.py +337 -0
- src/api/routers/config.py +627 -0
- src/api/routers/dashboard.py +18 -0
- src/api/routers/guide.py +337 -0
- src/api/routers/ideagen.py +436 -0
- src/api/routers/knowledge.py +821 -0
- src/api/routers/notebook.py +247 -0
- src/api/routers/question.py +537 -0
- src/api/routers/research.py +394 -0
- src/api/routers/settings.py +164 -0
- src/api/routers/solve.py +305 -0
- src/api/routers/system.py +252 -0
- src/api/run_server.py +61 -0
- src/api/utils/history.py +172 -0
- src/api/utils/log_interceptor.py +21 -0
- src/api/utils/notebook_manager.py +415 -0
- src/api/utils/progress_broadcaster.py +72 -0
- src/api/utils/task_id_manager.py +100 -0
- src/config/__init__.py +0 -0
- src/config/accessors.py +18 -0
- src/config/constants.py +34 -0
- src/config/defaults.py +18 -0
- src/config/schema.py +38 -0
- src/config/settings.py +50 -0
- src/core/errors.py +62 -0
- src/knowledge/__init__.py +23 -0
- src/knowledge/add_documents.py +606 -0
- src/knowledge/config.py +65 -0
- src/knowledge/example_add_documents.py +236 -0
- src/knowledge/extract_numbered_items.py +1039 -0
- src/knowledge/initializer.py +621 -0
- src/knowledge/kb.py +22 -0
- src/knowledge/manager.py +782 -0
- src/knowledge/progress_tracker.py +182 -0
- src/knowledge/start_kb.py +535 -0
- src/logging/__init__.py +103 -0
- src/logging/adapters/__init__.py +17 -0
- src/logging/adapters/lightrag.py +184 -0
- src/logging/adapters/llamaindex.py +141 -0
- src/logging/config.py +80 -0
- src/logging/handlers/__init__.py +20 -0
- src/logging/handlers/console.py +75 -0
- src/logging/handlers/file.py +201 -0
- src/logging/handlers/websocket.py +127 -0
- src/logging/logger.py +709 -0
- src/logging/stats/__init__.py +16 -0
- src/logging/stats/llm_stats.py +179 -0
- src/services/__init__.py +56 -0
- src/services/config/__init__.py +61 -0
- src/services/config/knowledge_base_config.py +210 -0
- src/services/config/loader.py +260 -0
- src/services/config/unified_config.py +603 -0
- src/services/embedding/__init__.py +45 -0
- src/services/embedding/adapters/__init__.py +22 -0
- src/services/embedding/adapters/base.py +106 -0
- src/services/embedding/adapters/cohere.py +127 -0
- src/services/embedding/adapters/jina.py +99 -0
- src/services/embedding/adapters/ollama.py +116 -0
- src/services/embedding/adapters/openai_compatible.py +96 -0
- src/services/embedding/client.py +159 -0
- src/services/embedding/config.py +156 -0
- src/services/embedding/provider.py +119 -0
- src/services/llm/__init__.py +152 -0
- src/services/llm/capabilities.py +313 -0
- src/services/llm/client.py +302 -0
- src/services/llm/cloud_provider.py +530 -0
- src/services/llm/config.py +200 -0
- src/services/llm/error_mapping.py +103 -0
- src/services/llm/exceptions.py +152 -0
- src/services/llm/factory.py +450 -0
- src/services/llm/local_provider.py +347 -0
- src/services/llm/providers/anthropic.py +95 -0
- src/services/llm/providers/base_provider.py +93 -0
- src/services/llm/providers/open_ai.py +83 -0
- src/services/llm/registry.py +71 -0
- src/services/llm/telemetry.py +40 -0
- src/services/llm/types.py +27 -0
- src/services/llm/utils.py +333 -0
- src/services/prompt/__init__.py +25 -0
- src/services/prompt/manager.py +206 -0
- src/services/rag/__init__.py +64 -0
- src/services/rag/components/__init__.py +29 -0
- src/services/rag/components/base.py +59 -0
- src/services/rag/components/chunkers/__init__.py +18 -0
- src/services/rag/components/chunkers/base.py +34 -0
- src/services/rag/components/chunkers/fixed.py +71 -0
- src/services/rag/components/chunkers/numbered_item.py +94 -0
- src/services/rag/components/chunkers/semantic.py +97 -0
- src/services/rag/components/embedders/__init__.py +14 -0
- src/services/rag/components/embedders/base.py +32 -0
- src/services/rag/components/embedders/openai.py +63 -0
- src/services/rag/components/indexers/__init__.py +18 -0
- src/services/rag/components/indexers/base.py +35 -0
- src/services/rag/components/indexers/graph.py +172 -0
- src/services/rag/components/indexers/lightrag.py +156 -0
- src/services/rag/components/indexers/vector.py +146 -0
- src/services/rag/components/parsers/__init__.py +18 -0
- src/services/rag/components/parsers/base.py +35 -0
- src/services/rag/components/parsers/markdown.py +52 -0
- src/services/rag/components/parsers/pdf.py +115 -0
- src/services/rag/components/parsers/text.py +86 -0
- src/services/rag/components/retrievers/__init__.py +18 -0
- src/services/rag/components/retrievers/base.py +34 -0
- src/services/rag/components/retrievers/dense.py +200 -0
- src/services/rag/components/retrievers/hybrid.py +164 -0
- src/services/rag/components/retrievers/lightrag.py +169 -0
- src/services/rag/components/routing.py +286 -0
- src/services/rag/factory.py +234 -0
- src/services/rag/pipeline.py +215 -0
- src/services/rag/pipelines/__init__.py +32 -0
- src/services/rag/pipelines/academic.py +44 -0
- src/services/rag/pipelines/lightrag.py +43 -0
- src/services/rag/pipelines/llamaindex.py +313 -0
- src/services/rag/pipelines/raganything.py +384 -0
- src/services/rag/service.py +244 -0
- src/services/rag/types.py +73 -0
- src/services/search/__init__.py +284 -0
- src/services/search/base.py +87 -0
- src/services/search/consolidation.py +398 -0
- src/services/search/providers/__init__.py +128 -0
- src/services/search/providers/baidu.py +188 -0
- src/services/search/providers/exa.py +194 -0
- src/services/search/providers/jina.py +161 -0
- src/services/search/providers/perplexity.py +153 -0
- src/services/search/providers/serper.py +209 -0
- src/services/search/providers/tavily.py +161 -0
- src/services/search/types.py +114 -0
- src/services/setup/__init__.py +34 -0
- src/services/setup/init.py +285 -0
- src/services/tts/__init__.py +16 -0
- src/services/tts/config.py +99 -0
- src/tools/__init__.py +91 -0
- src/tools/code_executor.py +536 -0
- src/tools/paper_search_tool.py +171 -0
- src/tools/query_item_tool.py +310 -0
- src/tools/question/__init__.py +15 -0
- src/tools/question/exam_mimic.py +616 -0
- src/tools/question/pdf_parser.py +211 -0
- src/tools/question/question_extractor.py +397 -0
- src/tools/rag_tool.py +173 -0
- src/tools/tex_chunker.py +339 -0
- src/tools/tex_downloader.py +253 -0
- src/tools/web_search.py +71 -0
- src/utils/config_manager.py +206 -0
- src/utils/document_validator.py +168 -0
- src/utils/error_rate_tracker.py +111 -0
- src/utils/error_utils.py +82 -0
- src/utils/json_parser.py +110 -0
- src/utils/network/circuit_breaker.py +79 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Notebook API Router
|
|
3
|
+
Provides notebook creation, querying, updating, deletion, and record management functions
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
import sys
|
|
8
|
+
from typing import Literal
|
|
9
|
+
|
|
10
|
+
from fastapi import APIRouter, HTTPException
|
|
11
|
+
from pydantic import BaseModel
|
|
12
|
+
|
|
13
|
+
# Ensure module can be imported
|
|
14
|
+
project_root = Path(__file__).parent.parent.parent.parent
|
|
15
|
+
if str(project_root) not in sys.path:
|
|
16
|
+
sys.path.insert(0, str(project_root))
|
|
17
|
+
|
|
18
|
+
from src.api.utils.notebook_manager import notebook_manager
|
|
19
|
+
|
|
20
|
+
router = APIRouter()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# === Request/Response Models ===
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class CreateNotebookRequest(BaseModel):
|
|
27
|
+
"""Create notebook request"""
|
|
28
|
+
|
|
29
|
+
name: str
|
|
30
|
+
description: str = ""
|
|
31
|
+
color: str = "#3B82F6"
|
|
32
|
+
icon: str = "book"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class UpdateNotebookRequest(BaseModel):
|
|
36
|
+
"""Update notebook request"""
|
|
37
|
+
|
|
38
|
+
name: str | None = None
|
|
39
|
+
description: str | None = None
|
|
40
|
+
color: str | None = None
|
|
41
|
+
icon: str | None = None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class AddRecordRequest(BaseModel):
|
|
45
|
+
"""Add record request"""
|
|
46
|
+
|
|
47
|
+
notebook_ids: list[str]
|
|
48
|
+
record_type: Literal["solve", "question", "research", "co_writer", "chat"]
|
|
49
|
+
title: str
|
|
50
|
+
user_query: str
|
|
51
|
+
output: str
|
|
52
|
+
metadata: dict = {}
|
|
53
|
+
kb_name: str | None = None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class RemoveRecordRequest(BaseModel):
|
|
57
|
+
"""Remove record request"""
|
|
58
|
+
|
|
59
|
+
record_id: str
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# === API Endpoints ===
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@router.get("/list")
|
|
66
|
+
async def list_notebooks():
|
|
67
|
+
"""
|
|
68
|
+
Get all notebook list
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
Notebook list (includes summary information)
|
|
72
|
+
"""
|
|
73
|
+
try:
|
|
74
|
+
notebooks = notebook_manager.list_notebooks()
|
|
75
|
+
return {"notebooks": notebooks, "total": len(notebooks)}
|
|
76
|
+
except Exception as e:
|
|
77
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@router.get("/statistics")
|
|
81
|
+
async def get_statistics():
|
|
82
|
+
"""
|
|
83
|
+
Get notebook statistics
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
Statistics information
|
|
87
|
+
"""
|
|
88
|
+
try:
|
|
89
|
+
stats = notebook_manager.get_statistics()
|
|
90
|
+
return stats
|
|
91
|
+
except Exception as e:
|
|
92
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
@router.post("/create")
|
|
96
|
+
async def create_notebook(request: CreateNotebookRequest):
|
|
97
|
+
"""
|
|
98
|
+
Create new notebook
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
request: Create request
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Created notebook information
|
|
105
|
+
"""
|
|
106
|
+
try:
|
|
107
|
+
notebook = notebook_manager.create_notebook(
|
|
108
|
+
name=request.name,
|
|
109
|
+
description=request.description,
|
|
110
|
+
color=request.color,
|
|
111
|
+
icon=request.icon,
|
|
112
|
+
)
|
|
113
|
+
return {"success": True, "notebook": notebook}
|
|
114
|
+
except Exception as e:
|
|
115
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
@router.get("/{notebook_id}")
|
|
119
|
+
async def get_notebook(notebook_id: str):
|
|
120
|
+
"""
|
|
121
|
+
Get notebook details
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
notebook_id: Notebook ID
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
Notebook details (includes all records)
|
|
128
|
+
"""
|
|
129
|
+
try:
|
|
130
|
+
notebook = notebook_manager.get_notebook(notebook_id)
|
|
131
|
+
if not notebook:
|
|
132
|
+
raise HTTPException(status_code=404, detail="Notebook not found")
|
|
133
|
+
return notebook
|
|
134
|
+
except HTTPException:
|
|
135
|
+
raise
|
|
136
|
+
except Exception as e:
|
|
137
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@router.put("/{notebook_id}")
|
|
141
|
+
async def update_notebook(notebook_id: str, request: UpdateNotebookRequest):
|
|
142
|
+
"""
|
|
143
|
+
Update notebook information
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
notebook_id: Notebook ID
|
|
147
|
+
request: Update request
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
Updated notebook information
|
|
151
|
+
"""
|
|
152
|
+
try:
|
|
153
|
+
notebook = notebook_manager.update_notebook(
|
|
154
|
+
notebook_id=notebook_id,
|
|
155
|
+
name=request.name,
|
|
156
|
+
description=request.description,
|
|
157
|
+
color=request.color,
|
|
158
|
+
icon=request.icon,
|
|
159
|
+
)
|
|
160
|
+
if not notebook:
|
|
161
|
+
raise HTTPException(status_code=404, detail="Notebook not found")
|
|
162
|
+
return {"success": True, "notebook": notebook}
|
|
163
|
+
except HTTPException:
|
|
164
|
+
raise
|
|
165
|
+
except Exception as e:
|
|
166
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@router.delete("/{notebook_id}")
|
|
170
|
+
async def delete_notebook(notebook_id: str):
|
|
171
|
+
"""
|
|
172
|
+
Delete notebook
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
notebook_id: Notebook ID
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Deletion result
|
|
179
|
+
"""
|
|
180
|
+
try:
|
|
181
|
+
success = notebook_manager.delete_notebook(notebook_id)
|
|
182
|
+
if not success:
|
|
183
|
+
raise HTTPException(status_code=404, detail="Notebook not found")
|
|
184
|
+
return {"success": True, "message": "Notebook deleted successfully"}
|
|
185
|
+
except HTTPException:
|
|
186
|
+
raise
|
|
187
|
+
except Exception as e:
|
|
188
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
@router.post("/add_record")
|
|
192
|
+
async def add_record(request: AddRecordRequest):
|
|
193
|
+
"""
|
|
194
|
+
Add record to notebook
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
request: Add record request
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
Addition result
|
|
201
|
+
"""
|
|
202
|
+
try:
|
|
203
|
+
result = notebook_manager.add_record(
|
|
204
|
+
notebook_ids=request.notebook_ids,
|
|
205
|
+
record_type=request.record_type,
|
|
206
|
+
title=request.title,
|
|
207
|
+
user_query=request.user_query,
|
|
208
|
+
output=request.output,
|
|
209
|
+
metadata=request.metadata,
|
|
210
|
+
kb_name=request.kb_name,
|
|
211
|
+
)
|
|
212
|
+
return {
|
|
213
|
+
"success": True,
|
|
214
|
+
"record": result["record"],
|
|
215
|
+
"added_to_notebooks": result["added_to_notebooks"],
|
|
216
|
+
}
|
|
217
|
+
except Exception as e:
|
|
218
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
@router.delete("/{notebook_id}/records/{record_id}")
|
|
222
|
+
async def remove_record(notebook_id: str, record_id: str):
|
|
223
|
+
"""
|
|
224
|
+
Remove record from notebook
|
|
225
|
+
|
|
226
|
+
Args:
|
|
227
|
+
notebook_id: Notebook ID
|
|
228
|
+
record_id: Record ID
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
Deletion result
|
|
232
|
+
"""
|
|
233
|
+
try:
|
|
234
|
+
success = notebook_manager.remove_record(notebook_id, record_id)
|
|
235
|
+
if not success:
|
|
236
|
+
raise HTTPException(status_code=404, detail="Record not found")
|
|
237
|
+
return {"success": True, "message": "Record removed successfully"}
|
|
238
|
+
except HTTPException:
|
|
239
|
+
raise
|
|
240
|
+
except Exception as e:
|
|
241
|
+
raise HTTPException(status_code=500, detail=str(e))
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
@router.get("/health")
|
|
245
|
+
async def health_check():
|
|
246
|
+
"""Health check"""
|
|
247
|
+
return {"status": "healthy", "service": "notebook"}
|