"""
ContextBuilder 基础使用示例

展示如何使用 ContextBuilder 构建优化的上下文，包括：
1. 初始化 ContextBuilder
2. 准备对话历史
3. 添加记忆
4. 构建结构化上下文
"""

from hello_agents.context import ContextBuilder, ContextConfig
from hello_agents.tools import MemoryTool, RAGTool
from hello_agents.core.message import Message
from datetime import datetime


def main():
    print("=" * 80)
    print("ContextBuilder 基础使用示例")
    print("=" * 80 + "\n")

    # 1. 初始化工具（Optional）
    print("1. 初始化工具...")
    # memory_tool = MemoryTool(user_id="user123")
    # rag_tool = RAGTool(knowledge_base_path="./knowledge_base")

    # 2. 创建 ContextBuilder
    print("2. 创建 ContextBuilder...")
    config = ContextConfig(
        max_tokens=3000,
        reserve_ratio=0.2,
        min_relevance=0,#最小相关性阈值，0代表所有历史信息会被保留,
        enable_compression=True
    )

    builder = ContextBuilder(
        # memory_tool=memory_tool,
        # rag_tool=rag_tool,
        config=config
    )

    # 3. 准备对话历史
    print("3. 准备对话历史...")
    conversation_history = [
        Message(content="我正在开发一个数据分析工具", role="user", timestamp=datetime.now()),
        Message(content="很好!数据分析工具通常需要处理大量数据。您计划使用什么技术栈?", role="assistant", timestamp=datetime.now()),
        Message(content="我打算使用Python和Pandas,已经完成了CSV读取模块", role="user", timestamp=datetime.now()),
        Message(content="不错的选择!Pandas在数据处理方面非常强大。接下来您可能需要考虑数据清洗和转换。", role="assistant", timestamp=datetime.now()),
    ]

    # 4. 添加一些记忆
    print("4. 添加记忆...")
    # memory_tool.execute(
    #     "add",
    #     content="用户正在开发数据分析工具,使用Python和Pandas",
    #     memory_type="semantic",
    #     importance=0.8
    # )

    # memory_tool.execute(
    #     "add",
    #     content="已完成CSV读取模块的开发",
    #     memory_type="episodic",
    #     importance=0.7
    # )

    # 5. 构建上下文
    print("5. 构建上下文...\n")
    context_str = builder.build(
        user_query="如何优化Pandas的内存占用?",
        conversation_history=conversation_history,
        system_instructions="你是一位资深的Python数据工程顾问。你的回答需要:1) 提供具体可行的建议 2) 解释技术原理 3) 给出代码示例"
    )

    print("=" * 80)
    print("构建的上下文 (结构化字符串):")
    print("=" * 80)
    print(context_str)
    print("=" * 80)
    print()

    # 6. 将上下文字符串转换为消息格式供 LLM 使用
    print("6. 将上下文传给 LLM...")
    messages = [
        {"role": "system", "content": context_str},
        {"role": "user", "content": "请回答"}

    ]

    from hello_agents.core.llm import HelloAgentsLLM
    llm = HelloAgentsLLM(
        model="ZhipuAI/GLM-4.6",
        api_key="6ff5219e-410a-4293-8772-0c948bfa691c",
        base_url="https://api-inference.modelscope.cn/v1/",
        provider="modelscope"
    )
    # 注意: 实际使用时需要配置 LLM
    response = llm.invoke(messages)
    print(f"LLM 回答: {response}")

    print("✅ ContextBuilder 演示完成!")
    print("\n提示: ContextBuilder 返回的是结构化的上下文字符串,")
    print("      可以直接作为 system message 传给 LLM。")


if __name__ == "__main__":
    main()
