""" Пример интеграции State Manager с OpenCLaW на HuggingFace Space """ import os import gradio as gr from openclaw_state_manager import OpenClawStateManager # Инициализация State Manager HF_TOKEN = os.environ.get("HF_TOKEN") state_manager = OpenClawStateManager( hf_token=HF_TOKEN, username="mcchtsgladiatis", config_repo="openclaw-config", workspace_dataset="openclaw-workspace", auto_save_interval=900 # 15 минут ) # Восстановление состояния при старте print("="*60) print("ЗАПУСК OPENCLAW С АВТОСОХРАНЕНИЕМ") print("="*60) state_manager.restore_state() # Запуск автосохранения state_manager.start_auto_save() # Здесь идет ваш код запуска OpenCLaW # Например: # from openclaw import OpenClawGateway # gateway = OpenClawGateway(config_path="/root/.openclaw/openclaw-config.json") # gateway.start() # Пример Gradio интерфейса с кнопкой ручного сохранения def manual_save(): """Ручное сохранение состояния""" success = state_manager.save_state(force=True) if success: return "✅ Состояние успешно сохранено!" else: return "⚠️ Нет изменений для сохранения" def get_status(): """Получение статуса менеджера""" status = state_manager.get_status() return f""" **Статус State Manager:** - Config repo: `{status['config_repo']}` - Workspace dataset: `{status['workspace_dataset']}` - Автосохранение: {'✅ Активно' if status['auto_save_enabled'] else '❌ Неактивно'} - Интервал: {status['auto_save_interval']}s ({status['auto_save_interval']//60} мин) - Локальная конфигурация: {'✅' if status['local_config_exists'] else '❌'} - Локальный workspace: {'✅' if status['local_workspace_exists'] else '❌'} """ # Создаем Gradio интерфейс with gr.Blocks(title="OpenCLaW Control Panel") as demo: gr.Markdown("# 🤖 OpenCLaW Control Panel") gr.Markdown("Управление состоянием OpenCLaW на HuggingFace Spaces") with gr.Tab("💾 Сохранение"): gr.Markdown("### Ручное сохранение состояния") gr.Markdown("Нажмите кнопку для немедленного сохранения текущего состояния на HuggingFace Hub") save_btn = gr.Button("💾 Сохранить состояние сейчас", variant="primary", size="lg") save_output = gr.Textbox(label="Результат", interactive=False) save_btn.click(fn=manual_save, outputs=save_output) with gr.Tab("📊 Статус"): gr.Markdown("### Статус State Manager") status_btn = gr.Button("🔄 Обновить статус") status_output = gr.Markdown() status_btn.click(fn=get_status, outputs=status_output) # Показываем статус при загрузке demo.load(fn=get_status, outputs=status_output) with gr.Tab("ℹ️ Информация"): gr.Markdown(""" ### Как это работает **Стратегия B: Раздельное хранение** Ваше состояние OpenCLaW автоматически сохраняется в двух местах: 1. **Конфигурация** → Репозиторий модели на HF Hub - Файл `openclaw-config.json` - Все настройки агентов, каналов, моделей 2. **Workspace** → Dataset на HF Hub - История диалогов всех агентов - Пользовательские данные - Файлы workspace **Автоматическое сохранение:** - Каждые 15 минут фоновый поток сохраняет состояние - При перезапуске Space состояние автоматически восстанавливается **Ручное сохранение:** - Используйте кнопку "Сохранить состояние сейчас" для немедленного сохранения - Рекомендуется перед важными изменениями **Репозитории:** - Config: `mcchtsgladiatis/openclaw-config` (private) - Workspace: `mcchtsgladiatis/openclaw-workspace` (private) """) # Запуск интерфейса if __name__ == "__main__": demo.launch( server_name="0.0.0.0", server_port=7860, share=False )