AstrBot 4.10.0a1__py3-none-any.whl → 4.10.1__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.
astrbot/cli/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "4.10.0-alpha.1"
1
+ __version__ = "4.10.1"
@@ -76,12 +76,19 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
76
76
 
77
77
  async def _iter_llm_responses(self) -> T.AsyncGenerator[LLMResponse, None]:
78
78
  """Yields chunks *and* a final LLMResponse."""
79
+ payload = {
80
+ "contexts": self.run_context.messages,
81
+ "func_tool": self.req.func_tool,
82
+ "model": self.req.model, # NOTE: in fact, this arg is None in most cases
83
+ "session_id": self.req.session_id,
84
+ }
85
+
79
86
  if self.streaming:
80
- stream = self.provider.text_chat_stream(**self.req.__dict__)
87
+ stream = self.provider.text_chat_stream(**payload)
81
88
  async for resp in stream: # type: ignore
82
89
  yield resp
83
90
  else:
84
- yield await self.provider.text_chat(**self.req.__dict__)
91
+ yield await self.provider.text_chat(**payload)
85
92
 
86
93
  @override
87
94
  async def step(self):
@@ -165,7 +172,7 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
165
172
  self.run_context.messages.append(
166
173
  Message(
167
174
  role="assistant",
168
- content=llm_resp.completion_text or "",
175
+ content=llm_resp.completion_text or "*No response*",
169
176
  ),
170
177
  )
171
178
  try:
@@ -230,6 +237,25 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
230
237
  async for resp in self.step():
231
238
  yield resp
232
239
 
240
+ # 如果循环结束了但是 agent 还没有完成,说明是达到了 max_step
241
+ if not self.done():
242
+ logger.warning(
243
+ f"Agent reached max steps ({max_step}), forcing a final response."
244
+ )
245
+ # 拔掉所有工具
246
+ if self.req:
247
+ self.req.func_tool = None
248
+ # 注入提示词
249
+ self.run_context.messages.append(
250
+ Message(
251
+ role="user",
252
+ content="工具调用次数已达到上限,请停止使用工具,并根据已经收集到的信息,对你的任务和发现进行总结,然后直接回复用户。",
253
+ )
254
+ )
255
+ # 再执行最后一步
256
+ async for resp in self.step():
257
+ yield resp
258
+
233
259
  async def _handle_function_tools(
234
260
  self,
235
261
  req: ProviderRequest,
@@ -376,35 +402,33 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
376
402
  ),
377
403
  )
378
404
 
379
- # yield the last tool call result
380
- if tool_call_result_blocks:
381
- last_tcr_content = str(tool_call_result_blocks[-1].content)
382
- yield MessageChain(
383
- type="tool_call_result",
384
- chain=[
385
- Json(
386
- data={
387
- "id": func_tool_id,
388
- "ts": time.time(),
389
- "result": last_tcr_content,
390
- }
391
- )
392
- ],
393
- )
394
-
395
405
  elif resp is None:
396
406
  # Tool 直接请求发送消息给用户
397
407
  # 这里我们将直接结束 Agent Loop。
398
408
  # 发送消息逻辑在 ToolExecutor 中处理了。
399
409
  logger.warning(
400
- f"{func_tool_name} 没有没有返回值或者将结果直接发送给用户,此工具调用不会被记录到历史中。"
410
+ f"{func_tool_name} 没有没有返回值或者将结果直接发送给用户。"
401
411
  )
402
412
  self._transition_state(AgentState.DONE)
403
413
  self.stats.end_time = time.time()
414
+ tool_call_result_blocks.append(
415
+ ToolCallMessageSegment(
416
+ role="tool",
417
+ tool_call_id=func_tool_id,
418
+ content="*工具没有返回值或者将结果直接发送给了用户*",
419
+ ),
420
+ )
404
421
  else:
405
422
  # 不应该出现其他类型
406
423
  logger.warning(
407
- f"Tool 返回了不支持的类型: {type(resp)},将忽略。",
424
+ f"Tool 返回了不支持的类型: {type(resp)}",
425
+ )
426
+ tool_call_result_blocks.append(
427
+ ToolCallMessageSegment(
428
+ role="tool",
429
+ tool_call_id=func_tool_id,
430
+ content="*工具返回了不支持的类型,请告诉用户检查这个工具的定义和实现。*",
431
+ ),
408
432
  )
409
433
 
410
434
  try:
@@ -426,6 +450,22 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
426
450
  ),
427
451
  )
428
452
 
453
+ # yield the last tool call result
454
+ if tool_call_result_blocks:
455
+ last_tcr_content = str(tool_call_result_blocks[-1].content)
456
+ yield MessageChain(
457
+ type="tool_call_result",
458
+ chain=[
459
+ Json(
460
+ data={
461
+ "id": func_tool_id,
462
+ "ts": time.time(),
463
+ "result": last_tcr_content,
464
+ }
465
+ )
466
+ ],
467
+ )
468
+
429
469
  # 处理函数调用响应
430
470
  if tool_call_result_blocks:
431
471
  yield tool_call_result_blocks
@@ -2,6 +2,7 @@ import traceback
2
2
  from collections.abc import AsyncGenerator
3
3
 
4
4
  from astrbot.core import logger
5
+ from astrbot.core.agent.message import Message
5
6
  from astrbot.core.agent.runners.tool_loop_agent_runner import ToolLoopAgentRunner
6
7
  from astrbot.core.astr_agent_context import AstrAgentContext
7
8
  from astrbot.core.message.components import Json
@@ -24,8 +25,25 @@ async def run_agent(
24
25
  ) -> AsyncGenerator[MessageChain | None, None]:
25
26
  step_idx = 0
26
27
  astr_event = agent_runner.run_context.context.event
27
- while step_idx < max_step:
28
+ while step_idx < max_step + 1:
28
29
  step_idx += 1
30
+
31
+ if step_idx == max_step + 1:
32
+ logger.warning(
33
+ f"Agent reached max steps ({max_step}), forcing a final response."
34
+ )
35
+ if not agent_runner.done():
36
+ # 拔掉所有工具
37
+ if agent_runner.req:
38
+ agent_runner.req.func_tool = None
39
+ # 注入提示词
40
+ agent_runner.run_context.messages.append(
41
+ Message(
42
+ role="user",
43
+ content="工具调用次数已达到上限,请停止使用工具,并根据已经收集到的信息,对你的任务和发现进行总结,然后直接回复用户。",
44
+ )
45
+ )
46
+
29
47
  try:
30
48
  async for resp in agent_runner.step():
31
49
  if astr_event.is_stopped():
@@ -209,12 +209,42 @@ async def call_local_llm_tool(
209
209
  else:
210
210
  raise ValueError(f"未知的方法名: {method_name}")
211
211
  except ValueError as e:
212
- logger.error(f"调用本地 LLM 工具时出错: {e}", exc_info=True)
213
- except TypeError:
214
- logger.error("处理函数参数不匹配,请检查 handler 的定义。", exc_info=True)
212
+ raise Exception(f"Tool execution ValueError: {e}") from e
213
+ except TypeError as e:
214
+ # 获取函数的签名(包括类型),除了第一个 event/context 参数。
215
+ try:
216
+ sig = inspect.signature(handler)
217
+ params = list(sig.parameters.values())
218
+ # 跳过第一个参数(event 或 context)
219
+ if params:
220
+ params = params[1:]
221
+
222
+ param_strs = []
223
+ for param in params:
224
+ param_str = param.name
225
+ if param.annotation != inspect.Parameter.empty:
226
+ # 获取类型注解的字符串表示
227
+ if isinstance(param.annotation, type):
228
+ type_str = param.annotation.__name__
229
+ else:
230
+ type_str = str(param.annotation)
231
+ param_str += f": {type_str}"
232
+ if param.default != inspect.Parameter.empty:
233
+ param_str += f" = {param.default!r}"
234
+ param_strs.append(param_str)
235
+
236
+ handler_param_str = (
237
+ ", ".join(param_strs) if param_strs else "(no additional parameters)"
238
+ )
239
+ except Exception:
240
+ handler_param_str = "(unable to inspect signature)"
241
+
242
+ raise Exception(
243
+ f"Tool handler parameter mismatch, please check the handler definition. Handler parameters: {handler_param_str}"
244
+ ) from e
215
245
  except Exception as e:
216
246
  trace_ = traceback.format_exc()
217
- logger.error(f"调用本地 LLM 工具时出错: {e}\n{trace_}")
247
+ raise Exception(f"Tool execution error: {e}. Traceback: {trace_}") from e
218
248
 
219
249
  if not ready_to_call:
220
250
  return
@@ -5,7 +5,7 @@ from typing import Any, TypedDict
5
5
 
6
6
  from astrbot.core.utils.astrbot_path import get_astrbot_data_path
7
7
 
8
- VERSION = "4.10.0-alpha.1"
8
+ VERSION = "4.10.1"
9
9
  DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
10
10
 
11
11
  WEBHOOK_SUPPORTED_PLATFORMS = [
@@ -321,7 +321,12 @@ class InternalAgentSubStage(Stage):
321
321
  elif isinstance(req.tool_calls_result, list):
322
322
  for tcr in req.tool_calls_result:
323
323
  messages.extend(tcr.to_openai_messages())
324
- messages.append({"role": "assistant", "content": llm_response.completion_text})
324
+ messages.append(
325
+ {
326
+ "role": "assistant",
327
+ "content": llm_response.completion_text or "*No response*",
328
+ }
329
+ )
325
330
  messages = list(filter(lambda item: "_no_save" not in item, messages))
326
331
  await self.conv_manager.update_conversation(
327
332
  event.unified_msg_origin,
@@ -385,10 +385,25 @@ class AiocqhttpAdapter(Platform):
385
385
  logger.error(f"获取 @ 用户信息失败: {e},此消息段将被忽略。")
386
386
 
387
387
  message_str += "".join(at_parts)
388
+ elif t == "markdown":
389
+ text = m["data"].get("markdown") or m["data"].get("content", "")
390
+ abm.message.append(Plain(text=text))
391
+ message_str += text
388
392
  else:
389
393
  for m in m_group:
390
- a = ComponentTypes[t](**m["data"])
391
- abm.message.append(a)
394
+ try:
395
+ if t not in ComponentTypes:
396
+ logger.warning(
397
+ f"不支持的消息段类型,已忽略: {t}, data={m['data']}"
398
+ )
399
+ continue
400
+ a = ComponentTypes[t](**m["data"])
401
+ abm.message.append(a)
402
+ except Exception as e:
403
+ logger.exception(
404
+ f"消息段解析失败: type={t}, data={m['data']}. {e}"
405
+ )
406
+ continue
392
407
 
393
408
  abm.timestamp = int(time.time())
394
409
  abm.message_str = message_str
@@ -138,7 +138,7 @@ class ProviderGoogleGenAI(Provider):
138
138
  modalities = ["TEXT"]
139
139
 
140
140
  tool_list: list[types.Tool] | None = []
141
- model_name = payloads.get("model", self.get_model())
141
+ model_name = cast(str, payloads.get("model", self.get_model()))
142
142
  native_coderunner = self.provider_config.get("gm_native_coderunner", False)
143
143
  native_search = self.provider_config.get("gm_native_search", False)
144
144
  url_context = self.provider_config.get("gm_url_context", False)
@@ -199,7 +199,16 @@ class ProviderGoogleGenAI(Provider):
199
199
 
200
200
  # oper thinking config
201
201
  thinking_config = None
202
- if model_name.startswith("gemini-2.5"):
202
+ if model_name in [
203
+ "gemini-2.5-pro",
204
+ "gemini-2.5-pro-preview",
205
+ "gemini-2.5-flash",
206
+ "gemini-2.5-flash-preview",
207
+ "gemini-2.5-flash-lite",
208
+ "gemini-2.5-flash-lite-preview",
209
+ "gemini-robotics-er-1.5-preview",
210
+ "gemini-live-2.5-flash-preview-native-audio-09-2025",
211
+ ]:
203
212
  # The thinkingBudget parameter, introduced with the Gemini 2.5 series
204
213
  thinking_budget = self.provider_config.get("gm_thinking_config", {}).get(
205
214
  "budget", 0
@@ -208,7 +217,14 @@ class ProviderGoogleGenAI(Provider):
208
217
  thinking_config = types.ThinkingConfig(
209
218
  thinking_budget=thinking_budget,
210
219
  )
211
- elif model_name.startswith("gemini-3"):
220
+ elif model_name in [
221
+ "gemini-3-pro",
222
+ "gemini-3-pro-preview",
223
+ "gemini-3-flash",
224
+ "gemini-3-flash-preview",
225
+ "gemini-3-flash-lite",
226
+ "gemini-3-flash-lite-preview",
227
+ ]:
212
228
  # The thinkingLevel parameter, recommended for Gemini 3 models and onwards
213
229
  # Gemini 2.5 series models don't support thinkingLevel; use thinkingBudget instead.
214
230
  thinking_level = self.provider_config.get("gm_thinking_config", {}).get(
@@ -4,7 +4,7 @@ from collections import defaultdict
4
4
  from dataclasses import dataclass, field
5
5
  from typing import Any
6
6
 
7
- from astrbot.core import db_helper
7
+ from astrbot.core import db_helper, logger
8
8
  from astrbot.core.db.po import CommandConfig
9
9
  from astrbot.core.star.filter.command import CommandFilter
10
10
  from astrbot.core.star.filter.command_group import CommandGroupFilter
@@ -192,12 +192,18 @@ def _collect_descriptors(include_sub_commands: bool) -> list[CommandDescriptor]:
192
192
  """收集指令,按需包含子指令。"""
193
193
  descriptors: list[CommandDescriptor] = []
194
194
  for handler in star_handlers_registry:
195
- desc = _build_descriptor(handler)
196
- if not desc:
197
- continue
198
- if not include_sub_commands and desc.is_sub_command:
195
+ try:
196
+ desc = _build_descriptor(handler)
197
+ if not desc:
198
+ continue
199
+ if not include_sub_commands and desc.is_sub_command:
200
+ continue
201
+ descriptors.append(desc)
202
+ except Exception as e:
203
+ logger.warning(
204
+ f"解析指令处理函数 {handler.handler_full_name} 失败,跳过该指令。原因: {e!s}"
205
+ )
199
206
  continue
200
- descriptors.append(desc)
201
207
  return descriptors
202
208
 
203
209
 
@@ -631,7 +631,11 @@ class PluginManager:
631
631
  # 清除 pip.main 导致的多余的 logging handlers
632
632
  for handler in logging.root.handlers[:]:
633
633
  logging.root.removeHandler(handler)
634
- await sync_command_configs()
634
+ try:
635
+ await sync_command_configs()
636
+ except Exception as e:
637
+ logger.error(f"同步指令配置失败: {e!s}")
638
+ logger.error(traceback.format_exc())
635
639
 
636
640
  if not fail_rec:
637
641
  return True, None
@@ -436,7 +436,7 @@ class ChatRoute(Route):
436
436
  accumulated_parts = []
437
437
  accumulated_text = ""
438
438
  accumulated_reasoning = ""
439
- tool_calls = {}
439
+ # tool_calls = {}
440
440
  agent_stats = {}
441
441
  except BaseException as e:
442
442
  logger.exception(f"WebChat stream unexpected error: {e}", exc_info=True)
@@ -185,23 +185,30 @@ class ConfigRoute(Route):
185
185
  "/config/provider/list": ("GET", self.get_provider_config_list),
186
186
  "/config/provider/model_list": ("GET", self.get_provider_model_list),
187
187
  "/config/provider/get_embedding_dim": ("POST", self.get_embedding_dim),
188
- "/config/provider_sources/<provider_source_id>/models": (
188
+ "/config/provider_sources/models": (
189
189
  "GET",
190
190
  self.get_provider_source_models,
191
191
  ),
192
- "/config/provider_sources/<provider_source_id>/update": (
192
+ "/config/provider_sources/update": (
193
193
  "POST",
194
194
  self.update_provider_source,
195
195
  ),
196
- "/config/provider_sources/<provider_source_id>/delete": (
196
+ "/config/provider_sources/delete": (
197
197
  "POST",
198
198
  self.delete_provider_source,
199
199
  ),
200
200
  }
201
201
  self.register_routes()
202
202
 
203
- async def delete_provider_source(self, provider_source_id: str):
203
+ async def delete_provider_source(self):
204
204
  """删除 provider_source,并更新关联的 providers"""
205
+ post_data = await request.json
206
+ if not post_data:
207
+ return Response().error("缺少配置数据").__dict__
208
+
209
+ provider_source_id = post_data.get("id")
210
+ if not provider_source_id:
211
+ return Response().error("缺少 provider_source_id").__dict__
205
212
 
206
213
  provider_sources = self.config.get("provider_sources", [])
207
214
  target_idx = next(
@@ -235,15 +242,16 @@ class ConfigRoute(Route):
235
242
 
236
243
  return Response().ok(message="删除 provider source 成功").__dict__
237
244
 
238
- async def update_provider_source(self, provider_source_id: str):
245
+ async def update_provider_source(self):
239
246
  """更新或新增 provider_source,并重载关联的 providers"""
240
-
241
247
  post_data = await request.json
242
248
  if not post_data:
243
249
  return Response().error("缺少配置数据").__dict__
244
250
 
245
251
  new_source_config = post_data.get("config") or post_data
246
- original_id = provider_source_id
252
+ original_id = post_data.get("original_id")
253
+ if not original_id:
254
+ return Response().error("缺少 original_id").__dict__
247
255
 
248
256
  if not isinstance(new_source_config, dict):
249
257
  return Response().error("缺少或错误的配置数据").__dict__
@@ -684,11 +692,15 @@ class ConfigRoute(Route):
684
692
  logger.error(traceback.format_exc())
685
693
  return Response().error(f"获取嵌入维度失败: {e!s}").__dict__
686
694
 
687
- async def get_provider_source_models(self, provider_source_id: str):
695
+ async def get_provider_source_models(self):
688
696
  """获取指定 provider_source 支持的模型列表
689
697
 
690
698
  本质上会临时初始化一个 Provider 实例,调用 get_models() 获取模型列表,然后销毁实例
691
699
  """
700
+ provider_source_id = request.args.get("source_id")
701
+ if not provider_source_id:
702
+ return Response().error("缺少参数 source_id").__dict__
703
+
692
704
  try:
693
705
  from astrbot.core.provider.register import provider_cls_map
694
706
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AstrBot
3
- Version: 4.10.0a1
3
+ Version: 4.10.1
4
4
  Summary: Easy-to-use multi-platform LLM chatbot and development framework
5
5
  License-File: LICENSE
6
6
  Keywords: Astrbot,Astrbot Module,Astrbot Plugin
@@ -8,7 +8,7 @@ astrbot/api/platform/__init__.py,sha256=HXvAy_KLtOJspoGVgDtLa7VjIZoF6WK3Puww55yy
8
8
  astrbot/api/provider/__init__.py,sha256=mJVcon0snjn_xYirk2hntwba6ymIYYC-ZKKmxvx-jok,379
9
9
  astrbot/api/star/__init__.py,sha256=OxgHGtWn3lEQGjb4twbpbWnRepUevPu7gxtDAkAsfhQ,250
10
10
  astrbot/api/util/__init__.py,sha256=L1O_mFEUDk8V4lEPsT5iiNbIiOVh7HbrNmitqzUWMZg,180
11
- astrbot/cli/__init__.py,sha256=7tPyHq9-ywFKjFXC8MGPLhb0SShJyNZOIKFI-DEVAqQ,31
11
+ astrbot/cli/__init__.py,sha256=ogZ1wJ10Itlh9CdbwovCzGjxyYPJlQvG3lxFz6oBJ-c,23
12
12
  astrbot/cli/__main__.py,sha256=QobgMyFoLNTgI_OYddhGOZ9ZvQeBVjjz79mA2cC2OEU,1758
13
13
  astrbot/cli/commands/__init__.py,sha256=eAgppZQIqFO1ylQJFABeYrzQ0oZqPWjtE80aKIPB3ks,149
14
14
  astrbot/cli/commands/cmd_conf.py,sha256=6-YLicBt_zjWTzaVLUJ1VQLQPbDEPYACB9IVnN8Zvng,6330
@@ -22,8 +22,8 @@ astrbot/cli/utils/version_comparator.py,sha256=NVUmshfb5LU4a-S453rI7opqo0QtIHvlT
22
22
  astrbot/core/__init__.py,sha256=zsaF9IeON4NaHk_Ktr0eB7xQEFC5tUZ4UJCesC3-KHM,1220
23
23
  astrbot/core/astr_agent_context.py,sha256=bJnAm_CGzkhMnC99GA_j0Xwmi-OYoBPmgGanuS36DF4,637
24
24
  astrbot/core/astr_agent_hooks.py,sha256=QOMtBaamDRiylGIby5D5ApThk94Y_Dcy4gDnhPBHXKo,1073
25
- astrbot/core/astr_agent_run_util.py,sha256=woTtR-6Z6EQh0Yj2cBx8LBSgqaOj_zCau8KefeXE_Gc,4755
26
- astrbot/core/astr_agent_tool_exec.py,sha256=KnUP1q0k_pOWT3krw8leH53G7QTnapDjMlXH-LnI-xA,9005
25
+ astrbot/core/astr_agent_run_util.py,sha256=D_K2MOhAp0O8tQpAkrciiUhjbgDOo7zewMrXpzjdgsM,5534
26
+ astrbot/core/astr_agent_tool_exec.py,sha256=DpGqVhQzSwL2EN6wfBJrlcwH7b1jLkX5b_1eI5xqUB8,10258
27
27
  astrbot/core/astrbot_config_mgr.py,sha256=SUvusfo8Qk89eNpEmduWcXuczJ9g5TBH-VOV69ax28g,8950
28
28
  astrbot/core/conversation_mgr.py,sha256=GsirCeMBmgxyaOb3hYNleF_11yyFyAER5PtpM3IUvIQ,15765
29
29
  astrbot/core/core_lifecycle.py,sha256=nFuuNA0SJkCAeyoGZmG0LbBAhoq9j-_ajHq71s5tWAA,12796
@@ -48,7 +48,7 @@ astrbot/core/agent/tool.py,sha256=ITSAmYBp2y-QPWdZkc-KXof3UIHjQ2rmweyUPuYykFA,94
48
48
  astrbot/core/agent/tool_executor.py,sha256=8GGgVB_JaKGVLQUG1epeL-lvKMqgfQ7mJaOPnVytnXo,438
49
49
  astrbot/core/agent/runners/__init__.py,sha256=KwR34OKGVSQpJ_MaGVP_MX5L1SZ4oU-lv4GuMbSF5Ys,65
50
50
  astrbot/core/agent/runners/base.py,sha256=OHMt15x1C3O_F3EJI2Nb_3hwggGUkJHuPWWCa1kHX9o,1885
51
- astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=ZGkG0JanhBYaUPqfj5PbCkLeP0lwC5LacCHZfMM6nuU,17973
51
+ astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=ZXSvTb9SoZ98VfVzneL3pDpoRObasGSU8mTCJB9p91I,19520
52
52
  astrbot/core/agent/runners/coze/coze_agent_runner.py,sha256=bc2GImNsBTyXuotl_ohKYiNqws5Dkcms_xmIoUtDJMM,13846
53
53
  astrbot/core/agent/runners/coze/coze_api_client.py,sha256=0k8pQsFsbjKdF-jkY91qZWsC8YSaSmwC98TMTK-zqw0,10853
54
54
  astrbot/core/agent/runners/dashscope/dashscope_agent_runner.py,sha256=xr3otT0o6kHEy_sWjUv4xh-KmES3fjlowIPrtcKYiVI,13339
@@ -56,7 +56,7 @@ astrbot/core/agent/runners/dify/dify_agent_runner.py,sha256=LYwpjOcBWf3XlwNVzrDv
56
56
  astrbot/core/agent/runners/dify/dify_api_client.py,sha256=OXukDVgNx3VmYw6OCzjXyP8JmDWEFuy81sD9XnC4VRo,6530
57
57
  astrbot/core/config/__init__.py,sha256=vZjtpC7vr-IvBgSUtbS04C0wpulmCG5tPmcEP1WYE_4,172
58
58
  astrbot/core/config/astrbot_config.py,sha256=6bUTnMCOyaS8s6ELsWctDfUFTB53fKJQNu272dZXkdU,6347
59
- astrbot/core/config/default.py,sha256=nBcK_RVYg0NiiWfhjLt4iQM4bfHmWkB-kJ3PbmEpZJI,147682
59
+ astrbot/core/config/default.py,sha256=sGTmORVNNVAqbXoNyOnBCGSE3Cs6sYpE0UdFrRxvBRc,147674
60
60
  astrbot/core/config/i18n_utils.py,sha256=HJn_0XeeVS9ryCBelYfnc0nEn10LlX702fcSSFrF1J8,3879
61
61
  astrbot/core/db/__init__.py,sha256=OnvNaC76hYp28Bq9zkFXMl19zn7w-FC1zxyLgsemGvU,13400
62
62
  astrbot/core/db/po.py,sha256=eoI4sjpFb9CwRy6_Gf6-zHVSka6-oJr0LA4qcepqHzU,11804
@@ -111,7 +111,7 @@ astrbot/core/pipeline/process_stage/stage.py,sha256=tOg6HYGVU1GoY921YBYVO1MTM7a5
111
111
  astrbot/core/pipeline/process_stage/utils.py,sha256=q4V5G0PZD5b5mPh1lM-6w79LKGpp7RR7-PqYFhWpopM,4061
112
112
  astrbot/core/pipeline/process_stage/method/agent_request.py,sha256=GlGrGCsCASC4a3PpG6Oc1907aLdl_PrUMXrFiEiEEzc,2043
113
113
  astrbot/core/pipeline/process_stage/method/star_request.py,sha256=C-PTq_Wpq4QMS2ecfRDCcDSX3rYyldfsAN-jAaEEb-w,2430
114
- astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py,sha256=sDU4b85nV7LswGngFeYOG9VUv-BRR7gufy00ptU_Utg,21175
114
+ astrbot/core/pipeline/process_stage/method/agent_sub_stages/internal.py,sha256=RSeEqvJEV33RH6OGHEdDaCYyv6zt7RosG4j-hVdbjnc,21263
115
115
  astrbot/core/pipeline/process_stage/method/agent_sub_stages/third_party.py,sha256=LNBRItSpZn0MLP4fyHQ_3gUJ8lnmCwuPlqnZDVFLI6Q,7332
116
116
  astrbot/core/pipeline/rate_limit_check/stage.py,sha256=9EVJ0zYtxATFsj7ADyWDYcSGBRqmrMiKWp1kkD9LONI,3962
117
117
  astrbot/core/pipeline/respond/stage.py,sha256=RIYGXTG-XvBhgRqaHyJYWlsZjskS9pgV-2jm5o956ho,11042
@@ -129,7 +129,7 @@ astrbot/core/platform/platform.py,sha256=U2jq248bfPaAcIa8PUO5aiPyAOGIN1lz6LVnqQO
129
129
  astrbot/core/platform/platform_metadata.py,sha256=PCqNk-H-V7BtiQXbbyHd84s43BBIZNhUQ9X-SVKP3uM,693
130
130
  astrbot/core/platform/register.py,sha256=ptIPhVvbzODuWwXr8J0jJSzSPfv3rr7F67gXqvIpvvk,1985
131
131
  astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py,sha256=ycNdNPKUnBJ3hJuDn_S8GM_W7XFbhumpotM8yqcOrqg,8146
132
- astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py,sha256=wR8aTS_GJdTM5o73YJOzsjQP34miSJ_gM-Z3nwS3dB8,17914
132
+ astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py,sha256=y6fx7UVkBAm67aTQO9dDQLpdcnfPt5kXco_sN_mL620,18642
133
133
  astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py,sha256=FBlNB7BpwGIp0frGNY45seep4hV06fPmckfOH7qFS58,9558
134
134
  astrbot/core/platform/sources/dingtalk/dingtalk_event.py,sha256=01If6T-YJqlCfmyIh6UO668LA1f5EKUqeoZLVYkxds0,2850
135
135
  astrbot/core/platform/sources/discord/client.py,sha256=YGrUSopQKDRFfzjCdcBQm-EcNWonBwAgXzW678G0e_c,5181
@@ -190,7 +190,7 @@ astrbot/core/provider/sources/dashscope_tts.py,sha256=-qBMwbIt_QSmWCT_uPAxrXSYuE
190
190
  astrbot/core/provider/sources/edge_tts_source.py,sha256=dsf6YtSGzCJvas3BqBwHSn8vlMgQ_vgD9NEwngqDlEo,4690
191
191
  astrbot/core/provider/sources/fishaudio_tts_api_source.py,sha256=z5yJuc47iky31N0Za3Li7uwMP15N1gsKJkV9ybIbKew,5556
192
192
  astrbot/core/provider/sources/gemini_embedding_source.py,sha256=bj4iXnMyONTyUBmBFeezPcBpjtfX_UBjMrbwMFyCis8,2607
193
- astrbot/core/provider/sources/gemini_source.py,sha256=7CoVxKvC4mPU4pnVbjplvl2AMHwcNpq4UAQR-nIJrN4,33379
193
+ astrbot/core/provider/sources/gemini_source.py,sha256=o4vrlq6Pp7hcPJpVq4ppx1IOmG_1JPJNrwqt923QlMw,33916
194
194
  astrbot/core/provider/sources/gemini_tts_source.py,sha256=6LJIT2aTjoZaMszjYRzDu38prsO9G5Xg7SzJmQb2TzE,2880
195
195
  astrbot/core/provider/sources/groq_source.py,sha256=NqmiQn37mrMsaTyGX25eNzMpIgkCifY-5TJO8DFzHaA,456
196
196
  astrbot/core/provider/sources/gsv_selfhosted_source.py,sha256=RYQgwCc67N7RWPaODN4sSLJZn6o5gpgk_jF_KaRnD0M,5942
@@ -209,14 +209,14 @@ astrbot/core/provider/sources/xinference_stt_provider.py,sha256=DPEc7cVo2KXKGIgb
209
209
  astrbot/core/provider/sources/zhipu_source.py,sha256=oOCPXGsR9PLWOuu3h8RSVNRw1Qy2Se6dwmeFR3zk3GM,612
210
210
  astrbot/core/star/README.md,sha256=LXxqxp3xv_oejO8ocBPOrbmLe0WB4feu43fYDNddHTQ,161
211
211
  astrbot/core/star/__init__.py,sha256=iTlnjfEGJGy--78PhG7F1cKj9VwJVcDNFtGomX8hRO0,2229
212
- astrbot/core/star/command_management.py,sha256=uDCntlIwW3Pk5DSEHTmnW7SrqpLXgfM2BxmzyCuXpdk,16305
212
+ astrbot/core/star/command_management.py,sha256=QJ-3jP9gA86iv-jBKAeuFkqYqJ3zkllHQXwjjKXmsao,16557
213
213
  astrbot/core/star/config.py,sha256=FgrBz_fUrBU0-9BxD8enX-xGNGVbFxst3UT10sboYNA,3531
214
214
  astrbot/core/star/context.py,sha256=zudyvlcVJb5zO7pAh_TGQOUQ3q8JSoKM1wldcciXypw,21234
215
215
  astrbot/core/star/session_llm_manager.py,sha256=W_ZgNDyUPjMQGccqnK83hFjZvSCv5BLQeyv5fHvRLUw,5307
216
216
  astrbot/core/star/session_plugin_manager.py,sha256=8sEzOxf_Gq-dwK_S-4rwocAFsYzx7Yi4FJuMRttPTac,2830
217
217
  astrbot/core/star/star.py,sha256=Wkf81teNZ27JE_JrENuP0SrpFc2uFYRxHQsWo8R9-No,1826
218
218
  astrbot/core/star/star_handler.py,sha256=x95UxHomijT6AamIlpij9Q2PweOw0jXPciFlS5IpPVI,7616
219
- astrbot/core/star/star_manager.py,sha256=1bf7eOBXsMbgVl9_LRDX0RPpOf_JetdjysBEcV5sDus,41007
219
+ astrbot/core/star/star_manager.py,sha256=GDN_aOJLLakQBN0wuEyD3hAtyNln_9UzX8JIryUupUA,41165
220
220
  astrbot/core/star/star_tools.py,sha256=4q8emjyTbyIsVXHmzT88kX9uK28rIhlHc0re40Xm6m0,10847
221
221
  astrbot/core/star/updator.py,sha256=4pl42Ks_yjJ3kydx3BwOqocAczhhFBrRnxhBKh4_0Eo,3106
222
222
  astrbot/core/star/filter/__init__.py,sha256=bC6eHXh0CjzHmn-LTvsanWReoGIPhhMnBSrMLh97hZQ,470
@@ -258,9 +258,9 @@ astrbot/dashboard/server.py,sha256=HfmWHj4aqYcTT1re0vD4Fw6BHedg4bcfqpnWiisFWko,9
258
258
  astrbot/dashboard/utils.py,sha256=KrAv0lnPaVR0bx8yevT1CLGbSNsJizlfkKkPEtVVANI,5355
259
259
  astrbot/dashboard/routes/__init__.py,sha256=57ZYHYQfNI-YAiA8K9m2tRJcHzMKcZ02Vu-A_eD0HUE,894
260
260
  astrbot/dashboard/routes/auth.py,sha256=rYkvt3MpCY9BhWjG0DUoX3YaBkJT1Id7M2pKqTmXbvo,2946
261
- astrbot/dashboard/routes/chat.py,sha256=Bs9RUj0WFeyiXJgJTu3i19tPocRvpm87W3IYqIiMSH8,27118
261
+ astrbot/dashboard/routes/chat.py,sha256=ntQrgrnOTIep_9Ycb1DCZjZBJPtlIJUO2YnTvC1GXFQ,27120
262
262
  astrbot/dashboard/routes/command.py,sha256=OLrDDUAE5zpxZMRJ3_IGe-6xFEpPwcXcd-EJ60e9OHI,2862
263
- astrbot/dashboard/routes/config.py,sha256=v2CQ6rPb1VAyrj9bJNr8g0GoFlzm3qeEuXs2P6kIwQw,42903
263
+ astrbot/dashboard/routes/config.py,sha256=4CsabE-ARxmLSGg30ZxlW-EvGHD-ppWHH03jml5-uQc,43326
264
264
  astrbot/dashboard/routes/conversation.py,sha256=TWGY7BJ9QfmbxurAieBrbMmCi4_Ua2klxsAUlSRXbng,14302
265
265
  astrbot/dashboard/routes/file.py,sha256=gULvXP9PnVOQlyv_PCEzZQE5ptnGQEjFPvwOLxdVgb4,708
266
266
  astrbot/dashboard/routes/knowledge_base.py,sha256=GZ_iDYV2uXXzvGMF-4VJ8hZxLdHIWSSfg_3wlWwsizA,46081
@@ -275,8 +275,8 @@ astrbot/dashboard/routes/static_file.py,sha256=7KnNcOb1BVqSTft114LhGsDkfg69X2jHE
275
275
  astrbot/dashboard/routes/t2i.py,sha256=F6smxdL99MF7cRw3hqS6-2GErw8Zhsv0V0mfBUeEk-c,8931
276
276
  astrbot/dashboard/routes/tools.py,sha256=mMwVFw_VOlpqy_WZg1A-ddGtYa5L5QLWYawl37PT0-c,15354
277
277
  astrbot/dashboard/routes/update.py,sha256=qXiqQ_dbqRVftOzGgCQrvK8-qopVK6zKhhVVJ9SK26U,6648
278
- astrbot-4.10.0a1.dist-info/METADATA,sha256=c4FiZcy2QW4xkZJRjNzKeRC8VaKHUmYOLo_6mcCnvUc,11927
279
- astrbot-4.10.0a1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
280
- astrbot-4.10.0a1.dist-info/entry_points.txt,sha256=OEF09YmhBWYuViXrvTLLpstF4ccmNwDL8r7nnFD0pfI,53
281
- astrbot-4.10.0a1.dist-info/licenses/LICENSE,sha256=zPfQj5Mq8-gThIiBcxETr7t8gND9bZWOjTGQAr80TQI,34500
282
- astrbot-4.10.0a1.dist-info/RECORD,,
278
+ astrbot-4.10.1.dist-info/METADATA,sha256=lBZaSiFV--2ampd45pQJ3_Cz5PRwJWkXQHJbmD9Xerc,11925
279
+ astrbot-4.10.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
280
+ astrbot-4.10.1.dist-info/entry_points.txt,sha256=OEF09YmhBWYuViXrvTLLpstF4ccmNwDL8r7nnFD0pfI,53
281
+ astrbot-4.10.1.dist-info/licenses/LICENSE,sha256=zPfQj5Mq8-gThIiBcxETr7t8gND9bZWOjTGQAr80TQI,34500
282
+ astrbot-4.10.1.dist-info/RECORD,,