import os
import sys
import asyncio

sys.path.insert(0, '/root/02-production/nanobot')
os.chdir('/root/02-production/nanobot')
os.environ['HTTPS_PROXY'] = 'socks5://127.0.0.1:20000'
os.environ['HTTP_PROXY'] = 'socks5://127.0.0.1:20000'

from nanobot.config.loader import load_config
from nanobot.providers.responses_http_provider import ResponsesHTTPProvider
from nanobot.agent.loop import AgentLoop
from nanobot.bus.queue import MessageBus
from nanobot.config.paths import get_cron_dir
from nanobot.cron.service import CronService
import json

cfg = load_config()
bus = MessageBus()
cron = CronService(get_cron_dir() / 'jobs.json')
loop = AgentLoop(
    bus=bus,
    provider=None,
    workspace=cfg.workspace_path,
    model=cfg.agents.defaults.model,
    max_iterations=cfg.agents.defaults.max_tool_iterations,
    context_window_tokens=cfg.agents.defaults.context_window_tokens,
    web_search_config=cfg.tools.web.search,
    web_proxy=cfg.tools.web.proxy or None,
    exec_config=cfg.tools.exec,
    cron_service=cron,
    restrict_to_workspace=cfg.tools.restrict_to_workspace,
    mcp_servers=cfg.tools.mcp_servers,
    channels_config=cfg.channels,
)
session = loop.sessions.get_or_create('telegram:5736044544')
history = session.get_history(max_messages=0)
messages = loop.context.build_messages(history=history, current_message='你好', channel='telegram', chat_id='5736044544')
tool_defs = loop.tools.get_definitions()
p = cfg.get_provider(cfg.agents.defaults.model)
provider = ResponsesHTTPProvider(api_key=p.api_key, api_base=cfg.get_api_base(cfg.agents.defaults.model), default_model=cfg.agents.defaults.model, extra_headers=p.extra_headers)

async def main():
    body = provider._adapter.build_request(messages=messages, model=cfg.agents.defaults.model, max_output_tokens=8192, stream=False, tools=tool_defs)
    print('history_len', len(history))
    print('body_len', len(json.dumps(body, ensure_ascii=False)))
    resp = await provider.chat(messages=messages, tools=tool_defs, model=cfg.agents.defaults.model)
    print('finish_reason', resp.finish_reason)
    print('content', (resp.content or '')[:200])

asyncio.run(main())
