diff --git a/agentmain.py b/agentmain.py index cd8b5f6..48f1757 100644 --- a/agentmain.py +++ b/agentmain.py @@ -138,7 +138,7 @@ class GeneraticAgent: user_input = raw_query if source == 'feishu' and len(self.history) > 1: # 如果有历史记录且来自飞书,注入到首轮 user_input 中(支持/restore恢复上下文) user_input = handler._get_anchor_prompt() + f"\n\n### 用户当前消息\n{raw_query}" - if 'gpt' in self.get_llm_name(model=True): handler._done_hooks.append('请确定任务是否完成,如果完成请给出信息完整的简报回答,如未完成需要继续工具调用直到完成任务,确实需要问用户应使用ask_user工具') + #if 'gpt' in self.get_llm_name(model=True): handler._done_hooks.append('请确定任务是否完成,如果完成请给出信息完整的简报回答,如未完成需要继续工具调用直到完成任务,确实需要问用户应使用ask_user工具') # although new handler, the **full** history is in llmclient, so it is full history! gen = agent_runner_loop(self.llmclient, sys_prompt, user_input, handler, TOOLS_SCHEMA, max_turns=70, verbose=self.verbose) diff --git a/llmcore.py b/llmcore.py index e770a40..abc7ab8 100644 --- a/llmcore.py +++ b/llmcore.py @@ -314,7 +314,7 @@ def _stamp_oai_cache_markers(messages, model): messages[idx] = {**messages[idx], 'content': c} def _openai_stream(api_base, api_key, messages, model, api_mode='chat_completions', *, - temperature=0.5, max_tokens=None, tools=None, reasoning_effort=None, + system=None, temperature=0.5, max_tokens=None, tools=None, reasoning_effort=None, max_retries=0, connect_timeout=10, read_timeout=300, proxies=None, stream=True): """Shared OpenAI-compatible streaming request with retry. Yields text chunks, returns list[content_block].""" ml = model.lower() @@ -323,10 +323,12 @@ def _openai_stream(api_base, api_key, messages, model, api_mode='chat_completion headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json", "Accept": "text/event-stream"} if api_mode == "responses": url = auto_make_url(api_base, "responses") - payload = {"model": model, "input": _to_responses_input(messages), "stream": stream, "prompt_cache_key": _RESP_CACHE_KEY} + payload = {"model": model, "input": _to_responses_input(messages), "stream": stream, + "prompt_cache_key": _RESP_CACHE_KEY, "instructions": system or "You are an Omnipotent Executor."} if reasoning_effort: payload["reasoning"] = {"effort": reasoning_effort} else: url = auto_make_url(api_base, "chat/completions") + if system: messages = [{"role": "system", "content": system}] + messages _stamp_oai_cache_markers(messages, model) payload = {"model": model, "messages": messages, "stream": stream} if stream: payload["stream_options"] = {"include_usage": True} @@ -643,11 +645,9 @@ class NativeClaudeSession(BaseSession): class NativeOAISession(NativeClaudeSession): def raw_ask(self, messages): - """OpenAI streaming. yields text chunks, generator return = list[content_block]""" messages = _fix_messages(messages) - msgs = ([{"role": "system", "content": self.system}] if self.system else []) + _msgs_claude2oai(messages) - return (yield from _openai_stream(self.api_base, self.api_key, msgs, self.model, self.api_mode, - temperature=self.temperature, max_tokens=self.max_tokens, + return (yield from _openai_stream(self.api_base, self.api_key, _msgs_claude2oai(messages), self.model, self.api_mode, + system=self.system, temperature=self.temperature, max_tokens=self.max_tokens, tools=self.tools, reasoning_effort=self.reasoning_effort, max_retries=self.max_retries, connect_timeout=self.connect_timeout, read_timeout=self.read_timeout, proxies=self.proxies, stream=self.stream))