OW / openclaw_integration_example.py
mcchtsgladiatis's picture
Add State Manager integration example
384601c verified
"""
Пример интеграции 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
)