diff --git a/src/heart_flow/0.6Bing.md b/src/0.6Bing.md similarity index 100% rename from src/heart_flow/0.6Bing.md rename to src/0.6Bing.md diff --git a/src/heart_flow/README.md b/src/README.md similarity index 100% rename from src/heart_flow/README.md rename to src/README.md diff --git a/src/chat/focus_chat/cycle_viewer.py b/src/chat/focus_chat/cycle_viewer.py deleted file mode 100644 index 811edba4d..000000000 --- a/src/chat/focus_chat/cycle_viewer.py +++ /dev/null @@ -1,170 +0,0 @@ -import os -import argparse -from src.chat.focus_chat.cycle_analyzer import CycleAnalyzer - - -def print_section(title: str, width: int = 80): - """打印分隔线和标题""" - print("\n" + "=" * width) - print(f" {title} ".center(width, "=")) - print("=" * width) - - -def list_streams_cmd(analyzer: CycleAnalyzer, args: argparse.Namespace): - """列出所有聊天流""" - print_section("所有聊天流") - streams = analyzer.list_streams() - - if not streams: - print("没有找到任何聊天流记录。") - return - - for i, stream_id in enumerate(streams): - count = analyzer.get_stream_cycle_count(stream_id) - print(f"[{i + 1}] {stream_id} - {count} 个循环") - - -def analyze_stream_cmd(analyzer: CycleAnalyzer, args: argparse.Namespace): - """分析指定聊天流的循环信息""" - stream_id = args.stream_id - - print_section(f"聊天流 {stream_id} 分析") - stats = analyzer.analyze_stream_cycles(stream_id) - - if "error" in stats: - print(f"错误: {stats['error']}") - return - - print("基本统计:") - print(f" 总循环数: {stats['总循环数']}") - print(f" 总耗时: {stats['总耗时']}") - print(f" 平均耗时: {stats['平均耗时']}") - - print("\n动作统计:") - for action, count in stats["动作统计"].items(): - if count > 0: - percent = (count / stats["总循环数"]) * 100 - print(f" {action}: {count} ({percent:.1f}%)") - - if stats.get("工具使用次数"): - print("\n工具使用次数:") - for tool, count in stats["工具使用次数"].items(): - print(f" {tool}: {count}") - - -def list_cycles_cmd(analyzer: CycleAnalyzer, args: argparse.Namespace): - """列出指定聊天流的循环""" - stream_id = args.stream_id - limit = args.limit if args.limit > 0 else -1 - - print_section(f"聊天流 {stream_id} 的循环列表") - cycles = analyzer.get_stream_cycles(stream_id) - - if not cycles: - print("没有找到任何循环记录。") - return - - if limit > 0: - cycles = cycles[-limit:] # 取最新的limit个 - print(f"显示最新的 {limit} 个循环 (共 {len(cycles)} 个):") - else: - print(f"共找到 {len(cycles)} 个循环:") - - for i, filepath in enumerate(cycles): - filename = os.path.basename(filepath) - cycle_id = filename.split("_")[1] - timestamp = filename.split("_", 2)[2].split(".")[0] - print(f"[{i + 1}] 循环ID: {cycle_id}, 时间: {timestamp}, 文件: {filename}") - - -def view_cycle_cmd(analyzer: CycleAnalyzer, args: argparse.Namespace): - """查看指定循环的详细信息""" - stream_id = args.stream_id - cycle_index = args.cycle_index - 1 # 转换为0-based索引 - - cycles = analyzer.get_stream_cycles(stream_id) - if not cycles: - print(f"错误: 聊天流 {stream_id} 没有找到任何循环记录。") - return - - if cycle_index < 0 or cycle_index >= len(cycles): - print(f"错误: 循环索引 {args.cycle_index} 超出范围 (1-{len(cycles)})。") - return - - filepath = cycles[cycle_index] - filename = os.path.basename(filepath) - - print_section(f"循环详情: {filename}") - content = analyzer.get_cycle_content(filepath) - print(content) - - -def latest_cycles_cmd(analyzer: CycleAnalyzer, args: argparse.Namespace): - """查看所有聊天流中最新的几个循环""" - count = args.count if args.count > 0 else 10 - - print_section(f"最新的 {count} 个循环") - latest_cycles = analyzer.get_latest_cycles(count) - - if not latest_cycles: - print("没有找到任何循环记录。") - return - - for i, (stream_id, filepath) in enumerate(latest_cycles): - filename = os.path.basename(filepath) - cycle_id = filename.split("_")[1] - timestamp = filename.split("_", 2)[2].split(".")[0] - print(f"[{i + 1}] 聊天流: {stream_id}, 循环ID: {cycle_id}, 时间: {timestamp}") - - # 可以选择性添加提取基本信息的功能 - with open(filepath, "r", encoding="utf-8") as f: - for line in f: - if line.startswith("动作:"): - action = line.strip() - print(f" {action}") - break - print() - - -def main(): - parser = argparse.ArgumentParser(description="HeartFC循环信息查看工具") - subparsers = parser.add_subparsers(dest="command", help="子命令") - - # 分析聊天流 - analyze_parser = subparsers.add_parser("analyze", help="分析指定聊天流的循环信息") - analyze_parser.add_argument("stream_id", help="聊天流ID") - - # 列出聊天流的循环 - list_cycles_parser = subparsers.add_parser("list-cycles", help="列出指定聊天流的循环") - list_cycles_parser.add_argument("stream_id", help="聊天流ID") - list_cycles_parser.add_argument("-l", "--limit", type=int, default=-1, help="显示最新的N个循环") - - # 查看指定循环 - view_parser = subparsers.add_parser("view", help="查看指定循环的详细信息") - view_parser.add_argument("stream_id", help="聊天流ID") - view_parser.add_argument("cycle_index", type=int, help="循环索引(从1开始)") - - # 查看最新循环 - latest_parser = subparsers.add_parser("latest", help="查看所有聊天流中最新的几个循环") - latest_parser.add_argument("-c", "--count", type=int, default=10, help="显示的数量") - - args = parser.parse_args() - - analyzer = CycleAnalyzer() - - if args.command == "list-streams": - list_streams_cmd(analyzer, args) - elif args.command == "analyze": - analyze_stream_cmd(analyzer, args) - elif args.command == "list-cycles": - list_cycles_cmd(analyzer, args) - elif args.command == "view": - view_cycle_cmd(analyzer, args) - elif args.command == "latest": - latest_cycles_cmd(analyzer, args) - else: - parser.print_help() - - -if __name__ == "__main__": - main() diff --git a/src/chat/focus_chat/heartflow_prompt_builder.py b/src/chat/focus_chat/heartflow_prompt_builder.py index 2b2cdb67b..404fb3e69 100644 --- a/src/chat/focus_chat/heartflow_prompt_builder.py +++ b/src/chat/focus_chat/heartflow_prompt_builder.py @@ -310,6 +310,7 @@ class PromptBuilder: message_txt=None, sender_name="某人", in_mind_reply=None, + target_message=None, ) -> Optional[str]: if build_mode == "normal": return await self._build_prompt_normal(chat_stream, message_txt or "", sender_name) @@ -322,6 +323,7 @@ class PromptBuilder: chat_stream, sender_name, in_mind_reply, + target_message, ) return None diff --git a/src/chat/focus_chat/heartFC_readme.md b/src/heartFC_readme.md similarity index 100% rename from src/chat/focus_chat/heartFC_readme.md rename to src/heartFC_readme.md