From 9e18ce26dcc644a8aad30ad106b86dc73f899ba0 Mon Sep 17 00:00:00 2001 From: Liang Jiaqing Date: Thu, 16 Apr 2026 16:04:18 +0800 Subject: [PATCH] fix: empty file ZeroDivisionError in file_read; remove SiderLLMSession; init global_mem with header --- agentmain.py | 6 ++---- ga.py | 2 +- llmcore.py | 14 -------------- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/agentmain.py b/agentmain.py index 9e430b1..f6b28a8 100644 --- a/agentmain.py +++ b/agentmain.py @@ -5,7 +5,7 @@ if sys.stderr is None: sys.stderr = open(os.devnull, "w") elif hasattr(sys.stderr, 'reconfigure'): sys.stderr.reconfigure(errors='replace') sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -from llmcore import SiderLLMSession, LLMSession, ToolClient, ClaudeSession, MixinSession, NativeToolClient, NativeClaudeSession, NativeOAISession +from llmcore import LLMSession, ToolClient, ClaudeSession, MixinSession, NativeToolClient, NativeClaudeSession, NativeOAISession from agent_loop import agent_runner_loop from ga import GenericAgentHandler, smart_format, get_global_memory, format_error, consume_file @@ -19,7 +19,7 @@ load_tool_schema() mem_dir = os.path.join(script_dir, 'memory') if not os.path.exists(mem_dir): os.makedirs(mem_dir) mem_txt = os.path.join(mem_dir, 'global_mem.txt') -if not os.path.exists(mem_txt): open(mem_txt, 'w', encoding='utf-8').write('') +if not os.path.exists(mem_txt): open(mem_txt, 'w', encoding='utf-8').write('# [Global Memory - L2]\n') mem_insight = os.path.join(mem_dir, 'global_mem_insight.txt') if not os.path.exists(mem_insight): t = os.path.join(script_dir, 'assets/global_mem_insight_template.txt') @@ -50,8 +50,6 @@ class GeneraticAgent: elif 'native' in k and 'oai' in k: llm_sessions += [NativeToolClient(NativeOAISession(cfg=cfg))] elif 'claude' in k: llm_sessions += [ToolClient(ClaudeSession(cfg=cfg))] elif 'oai' in k: llm_sessions += [ToolClient(LLMSession(cfg=cfg))] - elif 'sider' in k: llm_sessions += [ToolClient(SiderLLMSession(cfg={'apikey': cfg, 'model': x})) for x in \ - ["gemini-3.0-flash", "gpt-5.4"]] elif 'mixin' in k: llm_sessions += [{'mixin_cfg': cfg}] except: pass for i, s in enumerate(llm_sessions): diff --git a/ga.py b/ga.py index 3eec2b7..5b446b4 100644 --- a/ga.py +++ b/ga.py @@ -243,7 +243,7 @@ def file_read(path, start=1, keyword=None, count=200, show_linenos=True): else: return f"Keyword '{keyword}' not found after line {start}. Falling back to content from line {start}:\n\n" \ + file_read(path, start, None, count, show_linenos) else: res = list(itertools.islice(stream, count)) - realcnt = len(res); L_MAX = min(max(100, 256000//realcnt), 8000); TAG = " ... [TRUNCATED]" + realcnt = len(res); L_MAX = min(max(100, 256000//max(realcnt,1)), 8000); TAG = " ... [TRUNCATED]" remaining = sum(1 for _ in itertools.islice(stream, 5000)) total_lines = (res[0][0] - 1 if res else start - 1) + realcnt + remaining total_tag = "[FILE] Total " + (f"{total_lines}+" if remaining >= 5000 else str(total_lines)) + ' lines\n' diff --git a/llmcore.py b/llmcore.py index 61780e8..710d1ef 100644 --- a/llmcore.py +++ b/llmcore.py @@ -91,20 +91,6 @@ def auto_make_url(base, path): if b.endswith(p): return b return f"{b}/{p}" if re.search(r'/v\d+(/|$)', b) else f"{b}/v1/{p}" -class SiderLLMSession: - def __init__(self, cfg): - from sider_ai_api import Session # 不使用sider的话没必要安装这个包 - self._core = Session(cookie=cfg['apikey'], proxies=proxies) - self.model = cfg.get('model', 'gemini-3.0-flash') - def ask(self, prompt, stream=False): - model = self.model - if len(prompt) > 28000: - print(f"[Warn] Prompt too long ({len(prompt)} chars), truncating.") - prompt = prompt[-28000:] - full_text = self._core.chat(prompt, model, stream=False) - if stream: return iter([full_text]) # gen有奇怪的空回复或死循环行为,sider足够快 - return full_text - def _parse_claude_sse(resp_lines): """Parse Anthropic SSE stream. Yields text chunks, returns list[content_block].""" content_blocks = []; current_block = None; tool_json_buf = ""