From 068e0a43990b346fa953529ff0f07ac3d9e1b044 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Dec 2024 19:22:01 +0000 Subject: [PATCH] Deployed 4826503 with MkDocs version: 1.6.1 --- .nojekyll | 0 404.html | 1198 +++ .../1_memory/index.html | 1226 +++ .../Let the agent think/1_workflow/index.html | 1226 +++ Guides/Let the agent think/2_tool/index.html | 1226 +++ Guides/outfit_with_loop/index.html | 1505 ++++ Guides/outfit_with_ltm/index.html | 1526 ++++ Guides/outfit_with_switch/index.html | 1504 ++++ Guides/simple_vqa/index.html | 1466 ++++ assets/images/GeneralTaskSolver.png | Bin 0 -> 1665702 bytes assets/images/OmAgent.png | Bin 0 -> 350197 bytes assets/images/OutfitwithLTM.png | Bin 0 -> 2219805 bytes assets/images/OutfitwithLoop.png | Bin 0 -> 1163646 bytes assets/images/OutfitwithSwitch.png | Bin 0 -> 2481695 bytes assets/images/SimpleVQA.png | Bin 0 -> 2005018 bytes assets/images/Videounderstanding.png | Bin 0 -> 1749077 bytes assets/images/app_album.png | Bin 0 -> 279498 bytes assets/images/app_album_img.png | Bin 0 -> 89469 bytes assets/images/app_allow.png | Bin 0 -> 141936 bytes assets/images/app_back_button.png | Bin 0 -> 811 bytes assets/images/app_boot_page.png | Bin 0 -> 70243 bytes assets/images/app_brush_button1.png | Bin 0 -> 9077 bytes assets/images/app_brush_button2.png | Bin 0 -> 25515 bytes assets/images/app_brush_button3.png | Bin 0 -> 1883 bytes assets/images/app_brush_button4.png | Bin 0 -> 4944 bytes assets/images/app_camera_button.png | Bin 0 -> 2731 bytes assets/images/app_cancel_button.png | Bin 0 -> 14394 bytes assets/images/app_chat_history.png | Bin 0 -> 105221 bytes assets/images/app_chat_history2.png | Bin 0 -> 80739 bytes assets/images/app_chat_history3.png | Bin 0 -> 63845 bytes assets/images/app_check_button.png | Bin 0 -> 408 bytes assets/images/app_close_button.png | Bin 0 -> 863 bytes assets/images/app_collapse_button.png | Bin 0 -> 4870 bytes assets/images/app_connection_settings.png | Bin 0 -> 31961 bytes assets/images/app_conversation.png | Bin 0 -> 588676 bytes assets/images/app_expand_button.png | Bin 0 -> 4917 bytes assets/images/app_home.png | Bin 0 -> 93526 bytes assets/images/app_home_button.png | Bin 0 -> 2440 bytes assets/images/app_mobile.png | Bin 0 -> 35373 bytes assets/images/app_multi-turn_setting.png | Bin 0 -> 34179 bytes assets/images/app_parameter_setting.png | Bin 0 -> 7229 bytes assets/images/app_parameter_setting2.png | Bin 0 -> 12628 bytes assets/images/app_play_voice.png | Bin 0 -> 4682 bytes assets/images/app_qrcode.png | Bin 0 -> 43016 bytes assets/images/app_refresh_button.png | Bin 0 -> 695 bytes assets/images/app_setting.png | Bin 0 -> 49573 bytes assets/images/app_setting_button.png | Bin 0 -> 7664 bytes assets/images/app_setting_window.png | Bin 0 -> 35373 bytes assets/images/app_stop_generating.png | Bin 0 -> 14201 bytes assets/images/app_stop_voice.png | Bin 0 -> 5379 bytes assets/images/app_time_button.png | Bin 0 -> 308696 bytes assets/images/app_time_button2.png | Bin 0 -> 67118 bytes assets/images/app_voice_button.png | Bin 0 -> 3900 bytes assets/images/app_voice_dailog2.png | Bin 0 -> 116193 bytes assets/images/app_voice_dialog.png | Bin 0 -> 588676 bytes assets/images/app_workflow_button.png | Bin 0 -> 2834 bytes assets/images/app_workflow_button2.png | Bin 0 -> 4008 bytes assets/images/app_workflow_list.png | Bin 0 -> 41203 bytes assets/images/app_workflow_name.png | Bin 0 -> 22259 bytes assets/images/app_workflow_progress.png | Bin 0 -> 83178 bytes assets/images/app_workflow_setting.png | Bin 0 -> 74750 bytes assets/images/architecture.jpg | Bin 0 -> 1779901 bytes assets/images/bg.png | Bin 0 -> 1058623 bytes assets/images/favicon.png | Bin 0 -> 1870 bytes assets/images/fork_task.png | Bin 0 -> 61493 bytes assets/images/icon.png | Bin 0 -> 131590 bytes assets/images/intro.png | Bin 0 -> 10076227 bytes assets/images/logo.png | Bin 0 -> 21662 bytes assets/images/switch_task.png | Bin 0 -> 77364 bytes assets/javascripts/bundle.83f73b43.min.js | 16 + assets/javascripts/bundle.83f73b43.min.js.map | 7 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.el.min.js | 1 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.he.min.js | 1 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.hy.min.js | 1 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.kn.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + assets/javascripts/lunr/min/lunr.sa.min.js | 1 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.te.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.6ce7567c.min.js | 42 + .../workers/search.6ce7567c.min.js.map | 7 + assets/stylesheets/custom.7c86dd97.min.css | 185 + assets/stylesheets/main.6f8fc17f.min.css | 1 + assets/stylesheets/main.6f8fc17f.min.css.map | 1 + assets/stylesheets/palette.06af60db.min.css | 1 + .../stylesheets/palette.06af60db.min.css.map | 1 + core_concepts/Clients/app/index.html | 1922 +++++ core_concepts/Clients/build/index.html | 1226 +++ core_concepts/Clients/client/index.html | 1296 ++++ core_concepts/Clients/config/index.html | 1226 +++ core_concepts/Clients/intro/index.html | 1226 +++ core_concepts/Memory/build/index.html | 1226 +++ core_concepts/Memory/config/index.html | 1226 +++ core_concepts/Memory/intro/index.html | 1263 ++++ core_concepts/Models/build/index.html | 1226 +++ core_concepts/Models/config/index.html | 1226 +++ core_concepts/Models/intro/index.html | 1226 +++ core_concepts/Models/llms/index.html | 1386 ++++ core_concepts/Node/build/index.html | 1226 +++ core_concepts/Node/config/index.html | 1226 +++ core_concepts/Node/intro/index.html | 1226 +++ core_concepts/Tool/build/index.html | 1226 +++ core_concepts/Tool/config/index.html | 1226 +++ core_concepts/Tool/intro/index.html | 1510 ++++ core_concepts/Workflow/build/index.html | 1226 +++ core_concepts/Workflow/config/index.html | 1226 +++ core_concepts/Workflow/intro/index.html | 1226 +++ core_concepts/Workflow/task/index.html | 1533 ++++ core_concepts/Workflow/worker/index.html | 1711 +++++ core_concepts/Workflow/workflow/index.html | 1416 ++++ core_concepts/container/index.html | 1542 ++++ core_concepts/debug/index.html | 1241 +++ core_concepts/registry/index.html | 1380 ++++ getting_started/2_devices/index.html | 1226 +++ getting_started/install/index.html | 1376 ++++ getting_started/intro/index.html | 1374 ++++ getting_started/quick_start/index.html | 1366 ++++ index.html | 1332 ++++ search/search_index.json | 1 + sitemap.xml | 237 + sitemap.xml.gz | Bin 0 -> 720 bytes 147 files changed, 61067 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 Guides/Let the agent remember/1_memory/index.html create mode 100644 Guides/Let the agent think/1_workflow/index.html create mode 100644 Guides/Let the agent think/2_tool/index.html create mode 100644 Guides/outfit_with_loop/index.html create mode 100644 Guides/outfit_with_ltm/index.html create mode 100644 Guides/outfit_with_switch/index.html create mode 100644 Guides/simple_vqa/index.html create mode 100644 assets/images/GeneralTaskSolver.png create mode 100644 assets/images/OmAgent.png create mode 100644 assets/images/OutfitwithLTM.png create mode 100644 assets/images/OutfitwithLoop.png create mode 100644 assets/images/OutfitwithSwitch.png create mode 100644 assets/images/SimpleVQA.png create mode 100644 assets/images/Videounderstanding.png create mode 100644 assets/images/app_album.png create mode 100644 assets/images/app_album_img.png create mode 100644 assets/images/app_allow.png create mode 100644 assets/images/app_back_button.png create mode 100644 assets/images/app_boot_page.png create mode 100644 assets/images/app_brush_button1.png create mode 100644 assets/images/app_brush_button2.png create mode 100644 assets/images/app_brush_button3.png create mode 100644 assets/images/app_brush_button4.png create mode 100644 assets/images/app_camera_button.png create mode 100644 assets/images/app_cancel_button.png create mode 100644 assets/images/app_chat_history.png create mode 100644 assets/images/app_chat_history2.png create mode 100644 assets/images/app_chat_history3.png create mode 100644 assets/images/app_check_button.png create mode 100644 assets/images/app_close_button.png create mode 100644 assets/images/app_collapse_button.png create mode 100644 assets/images/app_connection_settings.png create mode 100644 assets/images/app_conversation.png create mode 100644 assets/images/app_expand_button.png create mode 100644 assets/images/app_home.png create mode 100644 assets/images/app_home_button.png create mode 100644 assets/images/app_mobile.png create mode 100644 assets/images/app_multi-turn_setting.png create mode 100644 assets/images/app_parameter_setting.png create mode 100644 assets/images/app_parameter_setting2.png create mode 100644 assets/images/app_play_voice.png create mode 100644 assets/images/app_qrcode.png create mode 100644 assets/images/app_refresh_button.png create mode 100644 assets/images/app_setting.png create mode 100644 assets/images/app_setting_button.png create mode 100644 assets/images/app_setting_window.png create mode 100644 assets/images/app_stop_generating.png create mode 100644 assets/images/app_stop_voice.png create mode 100644 assets/images/app_time_button.png create mode 100644 assets/images/app_time_button2.png create mode 100644 assets/images/app_voice_button.png create mode 100644 assets/images/app_voice_dailog2.png create mode 100644 assets/images/app_voice_dialog.png create mode 100644 assets/images/app_workflow_button.png create mode 100644 assets/images/app_workflow_button2.png create mode 100644 assets/images/app_workflow_list.png create mode 100644 assets/images/app_workflow_name.png create mode 100644 assets/images/app_workflow_progress.png create mode 100644 assets/images/app_workflow_setting.png create mode 100644 assets/images/architecture.jpg create mode 100644 assets/images/bg.png create mode 100644 assets/images/favicon.png create mode 100644 assets/images/fork_task.png create mode 100644 assets/images/icon.png create mode 100644 assets/images/intro.png create mode 100644 assets/images/logo.png create mode 100644 assets/images/switch_task.png create mode 100644 assets/javascripts/bundle.83f73b43.min.js create mode 100644 assets/javascripts/bundle.83f73b43.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.el.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.he.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hy.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.kn.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sa.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.te.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.6ce7567c.min.js create mode 100644 assets/javascripts/workers/search.6ce7567c.min.js.map create mode 100644 assets/stylesheets/custom.7c86dd97.min.css create mode 100644 assets/stylesheets/main.6f8fc17f.min.css create mode 100644 assets/stylesheets/main.6f8fc17f.min.css.map create mode 100644 assets/stylesheets/palette.06af60db.min.css create mode 100644 assets/stylesheets/palette.06af60db.min.css.map create mode 100644 core_concepts/Clients/app/index.html create mode 100644 core_concepts/Clients/build/index.html create mode 100644 core_concepts/Clients/client/index.html create mode 100644 core_concepts/Clients/config/index.html create mode 100644 core_concepts/Clients/intro/index.html create mode 100644 core_concepts/Memory/build/index.html create mode 100644 core_concepts/Memory/config/index.html create mode 100644 core_concepts/Memory/intro/index.html create mode 100644 core_concepts/Models/build/index.html create mode 100644 core_concepts/Models/config/index.html create mode 100644 core_concepts/Models/intro/index.html create mode 100644 core_concepts/Models/llms/index.html create mode 100644 core_concepts/Node/build/index.html create mode 100644 core_concepts/Node/config/index.html create mode 100644 core_concepts/Node/intro/index.html create mode 100644 core_concepts/Tool/build/index.html create mode 100644 core_concepts/Tool/config/index.html create mode 100644 core_concepts/Tool/intro/index.html create mode 100644 core_concepts/Workflow/build/index.html create mode 100644 core_concepts/Workflow/config/index.html create mode 100644 core_concepts/Workflow/intro/index.html create mode 100644 core_concepts/Workflow/task/index.html create mode 100644 core_concepts/Workflow/worker/index.html create mode 100644 core_concepts/Workflow/workflow/index.html create mode 100644 core_concepts/container/index.html create mode 100644 core_concepts/debug/index.html create mode 100644 core_concepts/registry/index.html create mode 100644 getting_started/2_devices/index.html create mode 100644 getting_started/install/index.html create mode 100644 getting_started/intro/index.html create mode 100644 getting_started/quick_start/index.html create mode 100644 index.html create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..a304844 --- /dev/null +++ b/404.html @@ -0,0 +1,1198 @@ + + + +
+ + + + + + + + + + + + + + +How to use LTM memory.
+ + + + + + + + + + + + + +Advanced Node Concepts: Decider & Loop
+ + + + + + + + + + + + + +How to let the agent use tools.
+ + + + + + + + + + + + + +This example demonstrates how to use the framework for outfit recommendation tasks with loop functionality. The example code can be found in the examples/step3_outfit_with_loop
directory.
cd examples/step3_outfit_with_loop
+
+This example implements an interactive outfit recommendation workflow that uses a loop-based approach to refine recommendations based on user feedback. The workflow consists of the following key components:
+Serves as the starting point for the recommendation process
+Interactive QA Loop with Weather Integration
+Loop terminates when OutfitDecider returns decision=true
+Final Recommendation
+OutfitRecommendation: Generates the final outfit suggestions based on:
+Workflow Flow
+ Start -> Image Input -> OutfitQA Loop (QA + Weather Search + Decision) -> Final Recommendation -> End
The workflow leverages Redis for state management and the Conductor server for workflow orchestration. This architecture enables: +- Image-based outfit recommendations +- Weather-aware outfit suggestions using real-time data +- Interactive refinement through structured Q&A +- Context-aware suggestions incorporating multiple factors +- Persistent state management across the workflow
+The container.yaml file is a configuration file that manages dependencies and settings for different components of the system, including Conductor connections, Redis connections, and other service configurations. To set up your configuration:
+Generate the container.yaml file:
+ bash
+ python compile_container.py
+ This will create a container.yaml file with default settings under examples/step3_outfit_with_loop
.
Configure your LLM settings in configs/llms/gpt.yml
and configs/llms/text_res.yml
:
bash
+ export custom_openai_key="your_openai_api_key"
+ export custom_openai_endpoint="your_openai_endpoint"
Configure other model settings like temperature as needed through environment variable or by directly modifying the yml file
+Configure your Bing Search API key in configs/tools/websearch.yml
:
Set your Bing API key through environment variable or by directly modifying the yml file
+ bash
+ export bing_api_key="your_bing_api_key"
Update settings in the generated container.yaml
:
redis_stream_client
and redis_stm_client
sectionsFor terminal/CLI usage:
+ bash
+ python run_cli.py
For app/GUI usage:
+ bash
+ python run_app.py
If you encounter issues: +- Verify Redis is running and accessible +- Check your OpenAI API key and Bing API key are valid +- Ensure all dependencies are installed correctly +- Review logs for any error messages +- Confirm Conductor server is running and accessible +- Check Redis Stream client and Redis STM client configuration
+Coming soon! This section will provide detailed instructions for building the step3_outfit_with_loop example step by step.
+ + + + + + + + + + + + + +This example demonstrates how to use the framework for outfit recommendation tasks with long-term memory functionality. The example code can be found in the examples/step4_outfit_with_ltm
directory.
cd examples/step4_outfit_with_ltm
+
+This example implements an outfit recommendation system with long-term memory capabilities through two main workflows:
+Workflow sequence: Image Listening -> Preprocessing -> LTM Storage
+Outfit Recommendation Workflow
+The system leverages both short-term memory (Redis STM) and long-term memory (Milvus LTM) for: +- Efficient image storage and retrieval +- Persistent clothing item database +- Context-aware outfit recommendations +- Interactive preference refinement +- Stateful conversation management
+Image Storage: Listen -> Preprocess -> Store in LTM
+ Recommendation: QA Loop (QA + Decision) -> Generation -> Conclusion
The system uses Redis for state management, Milvus for long-term image storage, and Conductor for workflow orchestration. This architecture enables: +- Scalable image database management +- Intelligent outfit recommendations based on stored items +- Interactive preference gathering +- Persistent clothing knowledge base +- Efficient retrieval of relevant items
+git lfs intall
, then pull sample images by git lfs pull
The container.yaml file is a configuration file that manages dependencies and settings for different components of the system, including Conductor connections, Redis connections, Milvus connections and other service configurations. To set up your configuration:
+# For outfit recommendation workflow
+ python outfit_from_storage/compile_container.py
+ ``
+ This will create two container.yaml files with default settings under
image_storageand
outfit_from_storagedirectories:
+ -
image_storage/container.yaml: Configuration for the image storage workflow
+ -
outfit_from_storage/container.yaml`: Configuration for the outfit recommendation workflow
configs/llms/gpt.yml
and configs/llms/text_res.yml
in the two workflow directories:bash
+ export custom_openai_key="your_openai_api_key"
+ export custom_openai_endpoint="your_openai_endpoint"
Configure other model settings like temperature as needed through environment variable or by directly modifying the yml file
+Configure your Bing Search API key in configs/tools/websearch.yml
in the two workflow directories:
bash
+ export bing_api_key="your_bing_api_key"
configs/llms/text_encoder.yml
in the two workflow directories:bash
+ export custom_openai_text_encoder_key="openai_text_encoder_key"
+ export custom_openai_text_encoder_endpoint="your_openai_endpoint"
MilvusLTM
in container.yaml
Adjust the embedding dimension and other settings as needed through environment variable or by directly modifying the yml file
+Update settings in the generated container.yaml
:
redis_stream_client
and redis_stm_client
sectionscomponents
section:storage_name
and dim
for MilvusLTMFor terminal/CLI usage:
+ bash
+ python image_storage/run_image_storage_cli.py
+ For app usage:
+ bash
+ python image_storage/run_image_storage_app.py
This workflow will store outfit images in the Milvus database.
+For terminal/CLI usage:
+ bash
+ python outfit_from_storage/run_outfit_recommendation_cli.py
For app/GUI usage:
+ bash
+ python outfit_from_storage/run_outfit_recommendation_app.py
This workflow will retrieve outfit recommendations from the stored images.
+If you encounter issues: +- Verify Redis is running and accessible +- Check your OpenAI API key and Bing API key are valid +- Ensure all dependencies are installed correctly +- Review logs for any error messages +- Confirm Conductor server is running and accessible +- Check Redis Stream client and Redis STM client configuration
+Coming soon! This section will provide detailed instructions for building the step4_outfit_with_ltm example step by step.
+ + + + + + + + + + + + + +This example demonstrates how to use the framework for outfit recommendation tasks with switch_case functionality. The example code can be found in the examples/step2_outfit_with_switch
directory.
cd examples/step2_outfit_with_switch
+
+This example implements an outfit recommendation workflow that uses switch-case functionality to conditionally include weather information in the recommendation process. The workflow consists of the following key components:
+Extracts the user's outfit request instructions
+Weather Decision Logic
+Controls whether weather data should be fetched
+Conditional Weather Search
+Integrates weather data into the recommendation context
+Outfit Recommendation
+The workflow follows this sequence:
+The container.yaml file is a configuration file that manages dependencies and settings for different components of the system, including Conductor connections, Redis connections, and other service configurations. To set up your configuration:
+Generate the container.yaml file:
+ bash
+ python compile_container.py
+ This will create a container.yaml file with default settings under examples/step2_outfit_with_switch
.
Configure your LLM settings in configs/llms/gpt.yml
and configs/llms/text_res.yml
:
Set your OpenAI API key or compatible endpoint through environment variable or by directly modifying the yml file
+ bash
+ export custom_openai_key="your_openai_api_key"
+ export custom_openai_endpoint="your_openai_endpoint"
Configure other model settings like temperature as needed through environment variable or by directly modifying the yml file
+Configure your Bing Search API key in configs/tools/websearch.yml
:
Set your Bing API key through environment variable or by directly modifying the yml file
+ bash
+ export bing_api_key="your_bing_api_key"
Update settings in the generated container.yaml
:
redis_stream_client
and redis_stm_client
sectionsFor terminal/CLI usage:
+ bash
+ python run_cli.py
For app/GUI usage:
+ bash
+ python run_app.py
If you encounter issues:
+Check Redis Stream client and Redis STM client configuration
+Ensure all dependencies are installed correctly
+Coming soon! This section will provide detailed instructions for building the step2_outfit_with_switch example step by step.
+ + + + + + + + + + + + + +This example demonstrates how to use the framework for visual question answering (VQA) tasks. The example code can be found in the examples/step1_simpleVQA
directory.
cd examples/step1_simpleVQA
+
+This example implements a simple Visual Question Answering (VQA) workflow that consists of two main components:
+Extracts the user's questions/instructions
+Simple VQA Processing
+The workflow follows a straightforward sequence:
+The container.yaml file is a configuration file that manages dependencies and settings for different components of the system, including Conductor connections, Redis connections, and other service configurations. To set up your configuration:
+Generate the container.yaml file:
+ bash
+ python compile_container.py
+ This will create a container.yaml file with default settings under examples/step1_simpleVQA
.
Configure your LLM settings in configs/llms/gpt.yml
:
bash
+ export custom_openai_key="your_openai_api_key"
+ export custom_openai_endpoint="your_openai_endpoint"
Configure other model settings like temperature as needed through environment variable or by directly modifying the yml file
+Update settings in the generated container.yaml
:
redis_stream_client
and redis_stm_client
sectionsFor terminal/CLI usage:
+ bash
+ python run_cli.py
For app/GUI usage:
+ bash
+ python run_app.py
If you encounter issues: +- Verify Redis is running and accessible +- Check your OpenAI API key is valid +- Ensure all dependencies are installed correctly +- Review logs for any error messages
+Coming soon! This section will provide detailed instructions for building and packaging the step1_simpleVQA example step by step.
+ + + + + + + + + + + + + +Z<60$3fm;j(DXr^3gVi$Sv< zjvd93LJl_%mju`1p=HT!nM&AIV3=@p;ld+Q(Llr$-PhemLr&9h$A$3^p1j0&tw+Hl!Qz0wX+?%mSh_hUgk-BQ}H_tvJ-81p2H*lr;3;P!XIU zh(Iyf31!15a@oPm;a$rq9v0eFhn*jqXGATPl(=Y*gsI$Lux^|}n2T0Me4&fL34lb- zFb4t`resmCXwHQHSVs6ybBr8xJN?`>|GWfQD&oIDIjKkUf_GHv3c~o9mg~4fP#Xp? zZ6@RVd lr5<=Wo~1*I{mi_#uZ1#@%9Vr7Ud-cwu$Mhk~{SZK7z=p5Fnc2q_aYD+dTC zNrIa1n`{AEKm@*bRle7BR8P|w#X{#Q7 n9=D&`kle2ohL%Ot4|n znnN)`KEMwOc4n*q#)$J$)> )%JQ*56Ddt@HzOvaAe6s1` z7bZ|;$OUG8aO>j{T5l6P9d_Uj9fcZ?Ce63Q3d3^I5`fNgYMTugg@V!EESsTcVR3>_ zx}4e&SFAa_6g(WHzF_>sbbduE%whs_P+lxf8ta6Igiynt4S83K@nK+AUh%(zO{B+D zME@uqvX<6bh;Wq{q=i4DK@!vFV(3lgOG$pvU-Xd})y6)PS7MrzQ3q<>B^FgdUvkhD zYA|R9Am-t0 l(<64m~@wRo$6qzZ^ z6Eld6gLg7!pW98zggbQgt2Z8=5M0S&*7|`%I*J(9AcVL*0+F!k3dTu&L#cbr#I~v( zvyx0l2e=C>PM>V6X``}+R|E9<;>EWE$W?^O?_NN-Np&YDUzKeN7<-D@gLZnm12MMO z7xs3Qpn2Y|Yvj`xGm3-|=PfZO4Q);A6FAI7wdXUE3Q0_4*lmcx8sryH$SQIv&skF7 zh$BT1n$(W8@x*jl&o~T+7V@6p5W$L^g8w=%hj33x;}|kjW6qQsv8=EIDg&LIM21SR zI0+V6+|fb#tEWS)LM0=5$(`8adxR0j-W04L7@&9n(k8t+;|uFuL88X13SedE1yTKC z=rQG+!Tr=-6W18PUR-(P59VRU)KTG3XL`81Tc>ZXoKx692mImP>D8GD)~DE{^jJl$ zxw_%e-$^H)1CgC)h7qu}&mZ=f8!uiCxbp* 2J-cqx&s9`8@|0WU{Pjj%0}7~|{F`2~)`s<+x z8K zM|tTvOo1TI3)8_EMz%kmVhGEdJ*TJr?uEw<1e_?@(LX#S=$R8k;*V2_K^8QAB;v~{ zBP=9H&N6Tv zh_5fbC~59i)vvDU^cAom75dY2h?;>c!rd{rL&HRKhDN$C=-(I*$E~@-vQ;-@*QRn` z4M|qC9^(EF?y+DgDCN ^~KnP zL*Y>2(jFm=mCf7d^0ya0N0ECF<`c%aq_?a3{HrL*Q<81~Z9g4~Z+xyL5O*m2;h}sv zF^aZ_ArrN^tlmAu@P&`-bmrqx;bM&z>K%Rns~3>7Mbe<)Q(lCwT`-4?TNmk>v0liA z3s7t;rmrcspKkVuYk&Y-YY^`!+l1l8NWp}PMZpUkOo-+X>RM+PkB3ays8sd$cky>; zSnQbk74;IB^7{w;kxZmAm8)Y$+UD)5lE3xjw(8bE`9t&O!rH|W$(s~|CivwsM)U!n z@wB2hExW6+>kkP?l>BbHE(xqx=fe_6g5wgvp{q;~e%Um?xddBrCxp0MftCDMR)!Xz zq0D`S3Jf>-!=m~YT9TQ a2m;C``;_01;-#hvyI&$+sU;`Q;U=lN2Y?*vEdFtV;!p6W|Z$G_{v14O$xxv?6PH z{!&-3XZ|T-j#G~r5@n>#)&B9__O}-U0+ >HjaPH#8OYdp@( zH)EdLSMcjMs|p_;Q|-vv47P%z#BejWByqh-E#bKYyHN7PkX)}2%%=iB3HiA`h4`CP z1~%5G^3B{4HGn%J5MS{7t_tc5jYd>3abaw6EfMJSNv)DA{p}8J0~7?EfSRu}Z1>~G zXfh;FsCH0OcnnZu720}gEWX*_JyhTioMZ4`tQCsz&$sp21nwWOq eQ7# zEiu$`aTaQ_fKe0@CZdF}rvg36l~t1VXO}){ijsmaUxfqIw4ZLm?=JECsmBDvsOTG> z4~Qrgk_)mU#v}ZljKUOnGc<)d`~D$$F@w$F9vyl^C~4{EWr<<~`dr3>=-n669~RAT z2I5YkL&0M(d&@|oxU30iE9eB%046>hv1}qja W-~yjHu#tg zof+(;ZBX>DCYl)frO)~5+9D&1>vO6y%JlPdymZpO)JK}kd`qI>08n2H=v8oDDv0pF zsb99t`5>)GUsmK|>y#BxM{foOerYj6LBhvs%-DveZI2~vKmP3~EEjR}3KB>KUG$D7 zVYy+_iXX!wf4{Aa0Bew#zh~*9UACt xw{^Mi)W~Si{U>xlHYyd;{jE>BD|&mV-7hd+c2z`>Abi2V(wjHT zAYoNcOG=a+VjmxAo3P;q58&_ZvU)LKgD~UOx2yboZm;21xv_^zAa@UU3Dh`fV88Du z9GEGQC8q<2S7)5P=#-(a{``ePD{eJG8h!tieC_1L*cG*Kn{`KAPxxoBvGKemw_RvM z(K0AB8A;jzGPsLt9oE-FlP(ZT5}o-eY=>vga+QEY$U?K3PXGYJ5x=r9;|RXJi_m|N z@eoHHPg`!HecIrlV{ I zkA;i|BW;01fc|aTzY_U@iX oYs)+S^P$Gxa*jzkf=Hz8yFy z4>c}gTxvHfE``%TZgEPPuwg6&Y*BDja>twmEK1M2&~-CTx$rGy^cVZQA#LxG%n$ z8#qtkF2K91Jr|)d-=hEdG5L1pz(k|5W1(e`)S1JYH)-0~6F4d^J-~t4b14rzM$*@B z@6%shFk+&Xor;)7AAY|`sIH9qe7w(IUg6K_nf`h`H^k6^-n}^Y#pOaWCBVigvOYA& zV?nvc)*^Dfq`-6HO&qvtfcuYblsSh0&$s3Il;V!dIymCI(I4*f-(1k7Yf-LVU&6^K zA6Bqx7!-vQ7nzisEmjc5^xNDVAoU+M8R`lnx-~;1E~-WU%R`37MT2?@Ya|$m^Ix7} zWGRf|+7=i)$f@Hl=fRFA%yROdKW70nF#1NNm|tgk-!Hq@0~KnOSmJwtw&={mfgT=~m+HErV*B9=-%%5WY*JFm#$@MTb7WPq~`PD_h z`>(d~YRi3nV%81^3rRR{x)%d3V#L%SuEK-J8=m>HW#osF0aH&>eM@;hqz`fTW? w9r zV`9kMRx!)bK$2-!Ve_jQE*&6%jD!*w^$%Ox0Gl?9#tK<&Q5OGo*S+Az7Gk;Y (6Vqc9`%`RSyZR*2P{ zIUK4f2$<_sAPUS5c@o`3wxz{dBJC$p3hBtt&@hNTP1a}zxz#W{0C1|ugG7yGnCTQr z9+#RZ-Q!LaEU*wB*KvTY5+nnkBiW`5?mj!Sx$)`oxps!gH4NS;Tz5##cv>Gp9t_t_ zCKfsm7w|9>#6T3_5va^DOe<+Vv&&PlskyAC$J)n*Cv n4`t+B9g!eqM6R2p`4WiW0MLa4i=9sbP&}aVsbNpiB_&loy0jf=1$)TBU z@Jd5zY1cE5u7q9X@wxB}voSPA^8w7vt8g52RZuV%_)^e_)qnbY#Pq?#94Uy3`sF6U z+_B#!>i_h={I56+U}w2nWaKbFCf~K~uLcSdvWqlg=&M7;O?(1%=qg}?dmivn0j51s zlsNckwxa*0qraeaRAuJz3RiiI%Ex_vKH)YL3=f$6z)syA>nnT{`kQks8C>0f4NKfL zMZa@7 oXIo6Q;VyOJTu{2Gl{`ni*l{1A0D|aQSm+d6~>0XyIFCKN5kwCX#CY!AgAN0 zSS?dD`UzvW0aRC)VYwN*FUHV$HI;)4m=1-4V3Enj`AnGeKCJ68?z9Y*g9|3~oAp;` zY^mabP9Ps@X)rK U4TNKgBG$O|6L*a%XD)wKx?L9-IGEyiIWp<;AD{9ks)Fzts_xi=Y}@RG z_(L-ZkwJyVhy}nhUFX+RV1IW!m7ktVL`*KX#D{~cY8UmMhx*Y4Z8w{0+)+BBu=?C^ zS3ZRu6NG>KrQ-A;mp?@6ryYWcRmUAn20VMKQ|+pRF=d2&S*~q;vCFo*@?vg@d? qU0fE*UR2$_VyspUS3o}bd;mZ|zrSL@y2|uUwKRd{WYC9!V3n7$r+9dZUba;9 zmiM<26Ap-9C>tO@XcRya$qs<}dPeBA%Tw~>k?U(! XK9u+A^kweosmJ={^ui(f+ zN<-SB1HrL=J+b1ZzMi{~$0vjpm11BZkak5E+a@B(gitb!-c%OP>9UhwOe}gMF-*?= zSKJWt)iW0ivC8Yalv(%Ym@x9exCr+JgBQ)SF_#ZPM`=tyJcV-WTHIPdvx^r$Y&9lj z2^9v*utab rFb>RfFwzYso-@u% zFD>^kFC4CLrneuB-RDKhM 8=lLlC-@;8qhr*wF%rYH0O&4|z4n}l>j>|jlTKKdU!xQUHdog2X zzNLf0zMnuxd)7hHKq~8fjZQ7R*@VW>dfFz43@#2 R)GqST4%AEY;eKGP>Mi|kSxQ|XH zHIc^!gGLK4I$kc0^IZcIFKr3IAhUA-F|G|@q8aoAb*7or8iuO5!;D8oQiMXva&ec) z=My9nRh%g@u0oR1zFrs7%mI(d4B^7FFVYS_5?mz+AXnv2>yl`Mn1`ICB5=23kNARx z+K_#`<22*277YR5Wr${Q0(7+WiEW>dWp&{Z=SG7 A@|42H2> zmP|!+mPlKRRYuE!+Dtdaunu-0J75T;c#i0Bd6Bep;5O)^qj3eT6=9ZQM<`h!A?)KYqaAtEU)iYq-5SNWHrDftC92;R( z(1!#Q7mf)UdpdU?*FY5=I|x=NCTEDaw`-hlN))1t zpS~n0X+TuO6H+DP$W9=avbsGr=NAFjb$s~9TpCc2%UX)@jDA2{9GeJnHAGeFXernG zW;*i#@z0xr%g3+g^l3db1cxRg#DQ~ij{y|-O{NfCc@)-I;UU1TVG?j2sM1fjTmhm_ z6zew=M5q4gxhU8g9D`bS$tg2c^c-hw{j^~`kFzfS@xC5UtUuk>Ox?mqLOO6cw8vC5 zm)r@xs>--R3?^66xNTy$@6-Sva`F8``r;fHxkS^=6QFwV7h|Y!5MoYeV%~4EV=D=F z22wr*w~j!EnyXcyZB60As@HQJvc+H+V{E2OFxFHV Vh#0s;i7!FU{x=wGetM0CwW1wU}NzmfR#E>@<(0+P+&tf z5E?qs_A^yM^W`(oYD&6|6yA?9$o_Bt?%y&CoMqYHes@ki`G@b9fB(jr`wpf|90hG2 zJ#0Wx=4Q`Dzxv2lKi?!UT20ZXEnY+P7jY}& PW8VYRG@Q z?_P|xl)3o1i3=S32Oow;%zZOV{i9spgm@9iSNflxv)6NU3<>d7SiqUZquy!?6w78; zE}1|dSpVf?_+o6p3NTGFoEQU{cT-L$OaKNWq&Ii@#e@~<$ALWH+CdE!8 ^?lTvyp!0Q9dx>st8&>k`M+5P(oe*^i-Y)-0dd+a95JhF=CWu`OTFF zu)-8c5{01S*!UJkZ8UoQ$Gem&%+hnuF2)wtA9=ja)xpR*?wLnaK7A>;go{$NS(h&+ z+8LY|#ZHmuCe=&hHmAFFKO5^4Rl*BAoS3WtGSF otk*^#v1X z&@JU(UArN7YN9V2@-K^$K^IB@cZyxvDs$?zYFxRnk6Ntu7E`%Pky|EQZbh?N U+g+;cHD9HVuHayf7q5Vi?B!7pI* 7FF>MuGkbqb`;Q}>7c{%1#W0z_`>=(Yc8x`X4aH=0xCEYc5 zjf`o9ZDr;`Z|0C*S7+AGtFAGWw_l?3F*=*%d(2(%FLQv>Y+pjD;@=b3j?q $3`jnEYC_`?Z9u#U^taX>_SM+wo>s*-XOu-6^_tWVLqIPLfdCuy z4 >{>hE0U`;KI# (#=-L; t+v$PMEdW&bWg5*lV$*9{0=`n16W8znht8NaRUK z0}vaoFm7t`(e7I9!ydv0#+_kSuCwSpu2MjIi8E$HA)zqT5vWAbepP^$-mQQdHEj$j zYw9$NvK!n+%9UJm0+`EK>WB;95PhT?vK=XyYaO@=h&$`&K9|hMm82C>Maj%-VYf?i z6}Q-mS=AbmLHgZ&`+BGra&@zZMA7pD8av~5+>c0ysFD+~FET;{Vb0mr#}4h^Ug}r) z==oPtpmq4t^L;W8Y~b}OWw=fGaO}`0xmENEu!R{*k#bXI2qZjm2OkJos?+9zhL*dT z(+d8d30v%2L+G) uUpvyB?g1T5*5r?LLvqCY;B^C4p=B~ysAfLq&J zuKUp{JVM$ f`S3^9lW=<0JOfHFf%$wH?lYBn% z@Z1CyAMgh9cp3yV*BO6|wTY|lmQl_%GA>D_e`O&rQ2xZl?W37VR-CbglKjI{b2-u; z7ZuGODE1Kb17BV* &J=K-Z!&YGX#arIrD~b1oJZV-d|mX*IU=!) MMyBwRS}>c zH|^^|2SjBii#>*=wB(Wt>lliDSjp$6dw09OTV8cYfkNAyfC`wn7-kr~A7biFr20 ziiUiSqELxQE?D!qM1iTifyLyQyx5WkrC?;eoIrVNAD(lrnV9&fT=J_amx*;u ItuL;G=|?m+MH27lfb-(J%7;pRYp=gL+t_frFGsJ4MK?N4hi zQIxO7&L%3BYi{ E^#L!JAs<`zy!o$1@3ABtVm0(Gzo;I3u(hkF=4 z-*F|BXfU9?p?(KiFK8aApUL9tIWFq_{@Dorf0FKF$FeQW5Bqk<#0l?By6ehx7u95o zoCtaZjr9nc2?AsW90(8rK7l5h=sg4oB0!35s=KSYs;;TL_ofdYapHJyw$X2;NP=Bm zbt^OCoW0ljzP|-huqt7aS=c*^gPq#>UM$dxI@A=42W~jVCrc#f^TSrVz3fkm^Ig94 z{CF=qAZ_xVP<|Q?v#9+z{rae3HnrO*O#&TkauUr$nm%ZNkQGk%H-8>{b+$F^Ex9`k ziG*kJP1+BmuTG7$ 8{UNfQ~kxa>iD~BYcDqYd0ms z%P&CoGIq=IOdUuwKH021!qPnlv*j2T*@~IJ?mH{NN8exeNI z>(7JeVw>%!WR>3+*p;m}Ia`_$nV#SA;IIL2+LX%}^F}WjoK805-(B|4Hfo?=Jh0j7 z>9!99G&}v_&G_(Ga74u%vdj2XWHb`nj+wY1;5gbwZ$!(<^cD1~nbNzCnA_syrnjJR zINjg485f N*s9We#eQucKt{%}1x*yYzPK6FLo#eYklM8-+%7ks_heP{f> z&kqw)C1}qc? 1)#Sf#!vppaPnRVu;Tu&D7J2?`IY|m2;7m)V6Ov_&h7+xesCfJIQU>|?4 zXJ2ew95rZ}KuV9Dl~^tRspU_5i}lCLOs1{m#>MGHmmq6)X8-noe|0L|H~H?(V{HSE zQ~%hNdsB%f6jBTMw(w#2qeMuEoM}lu8(7TupX93`yUKwtvk~n^0#(v4ju1lC+uQE8 z+uMs`^9t1p?hBgf=vOD31eSuhfBB4nuDot9n9l%H;$b~gT#5F2%2mJA{s9(#!l`V> zy1APkcmspMv=XyLPsVgCsD3)0@wK3a-CNI(TJ!PZ_2uJctub6w!vC72u5tA2Y=gvw zx=C<>(=@bRfStzjx-mzA&6HeATu7E4k}I(Yn+ 8P2pQ2*657FhU1O z2%4yhT1CXV-HM68P);8oCF^CKVW0wWLn2&jyN2v3*Z@7rF!1FG902>2I^fph{P(@p zVQb^lgnO@f8Whwk1{b{jQ*TW8$lR >}4)B5uU^YG#yMW?hk_?EB3R)&A^cGIa=v0H(4`#b-2NWGMNcH zDJjm;EVv{JWCR~ 7htof*A;VNssCO zg%$-`PC%{)v@AKE7n8-!o1QmftLE1YdH|n!fK7z8xmknso76hfA)y0;oYvPADvxkl z1j~Y)gPp(5LKI>srl`UUnMTCTnS?Fh)FH6SfAw4r+PX8~L#PehDij{1M^rduJllzU z9v?cyWIUt1ir(KYzdEeQsO~$GL&OP}_i_xFK$Oa@LSB9dBT9pk$4l_+(C5h!zL*r% zRX5r>aigm^$q0YLbiQK|Eid~K?m8Z<&UVsI?fHnn&pjZOEQ#ILbZEAfmGrcy>2kb2 zIjq0?*mq&Qf<-h#zNahsUAwOe wRD!nL+!i;Z4|fwCUdDEqzMpNr$VZDp?^qBxdjUVI;}rVsAJzHE=(xmjL9B&wS<>EK z4^jBbKoH2wlI0?ft2P*s@g&42UX|0GtbIQ|6rl(c2~}t-iR=!?# k(nj%&K)fh5 zZ$Jk;{GfM_+Bvm!sBmfI6o4TOnK+y3FPn|aSytZM685{EtLb3*>!aGn+U=MMSmfhm z@97T4XCPw!;CggKOB(zd6ndgzJioD!81YQvH#|6~=K~s{{(QHHz5r>|B7`T>!=xXk zQKrCkPyp^{>D~tRxQ0NGYL75w5IWqES7WZqB&GPqX)>~{h)#j|erBqf76(Ty`S*K? zWhnmek)sK?lnOWu!F>|H8-m2`BS6gPIYD}6AZya8&KHx*&N{?#HfRGBUxoY(Tkwe# zjaqFy_jr@D123}Y2M6PEe!rwzrZ_9|M*XaoAV%aA0b*siV@)yO#EN7*G!RF-p*`(T z4a;anM7OXZI6P6EzQz!lWgxe+7jQ#xB(b+GhBM^trzf2-LK`=BLSk6Hj9;9RlIPv_ z9G?H%A3LlR>_LPid-aT7xf2{^4*w8G=ufbgAM9@6+s$cj#8A?>3e{Oj(4saW2%P_m zize{CO{4_LswJ0f;C3*w2KbUKaUP7nL8_is5^v$M?>{}6Rc4}vge^{uN`&RM!vc;= zuTLakoapw2oR}}2NkQ8Wf4xWi%2)Bp$I({@8;j9;u$Z$wSRvRRu!W@UTX;+Gr7zHC z7?t}wr9080!WPo&xFICoN{cp~C5t(kKoxShqJr4Qq^9j?_n0z;9Il2|;ywG+UAS*) zsG9rr< Tj%x`L%5)#P45a5-b zh(b;x!pm}2o$R?Ri_=z(vGT6B?9I~c!`hp7L#jc-BUuHY#yzkR1e<%IkqPHDR|w6y zIBl79tWQV2-{n%GH~r7YzNpJqwq(E}3=09}yE`fN)ek^Q=TDnYU>6scr%x-_7F$HTR1Bwd62;Lui+Wob~<+bd3 zyin#T!UG5b=q+c?L6@;5yvLPnwL5OybjCr85v3n)CKyyO`D0&j7!#J+&Ge-Cqcrv6 zFHLBt+l}`(Y(B)7@qM@01o guZm}}4tIHXu*~t!lLGrBCBH_5{O4!`G4PlG5 zGtqNP4CfX*+~rd)@&U5!JCZlgdpMZU$Yic&9Vp{b)H-Z>Pl4kR-S3SwRl9EZ2c&WW zuR)Ke4Em#-;=?ZjqW5QhwdbwX_M=h@QxPgqg_zAXuY@qe sR-bO2FOs(SvU2doZ!YLx%|+f2 zHcjEBGJ)fZ14zMoyEIYck}-H#p!>+F!{gd4seXG~-*9Yh)cT#gQI$`FwFu#V`30qG zbk{NQR#ftTXvZq6WH{(Gc>iSbjo)6Y-H4uV*T!ArWi%<`Uwng{Z-|gP+o|6U -r z@xCS$ja||Sw~J&a`=M72QW1*T`E!bnayqfqWg9c`!_}%M{U92wqvONvYFhsM9=6-~ z Kyf_PDC @;p4IY89 0^yencqZ7yg0 zZj;Xqh%EDyc}=5(?x9cpm1u%zNKJa;Ohq@p*ZQVY=pb{Y4b(YJ63j)rSJsJ-t6aZ| z)~o;O>jr*sJSa{neOJYIIGlsp!I7lA^|w#aVjBG{Vqg>*`z8ZPtkErZ$Jy5TcH@h^ zWXCgF%s;4?h^oInZeZ8=0C9zC8Ai3@+sDPx-ZmLO%tnvJw`A6NH5Q{-tX?* a14(@p7@d zSATxY7?c0@T5_=`yiR8cA?tT1Z|@e^lW$JN8b!cm@Xe>YH3jLOyP?uHT~aMLp*d(b z @)_@dWcay2+Y zv@IdZIdDxp7-5XRc(LzRfbNH6z*)T`gEWgy_L9?DuF1qP+omt6MW5DrXRZvzQ3MT) z{-#|`X9<9||G0W&H(G>zHkroHgdtGJM$M=8s&_BvB)&LShES>cagO!I^UiqYV)&OY z8ix!aft)GSq^XPh(AHHV8HqtLesQ+HD5Bl~TvGeg32tHnpXa;$hbh5)zRJ{O{qqBq zz5eT?=6+goYOR{l51skrWZf+m7ig$P^{3lqG|yhQ^9T#NRr~JE0Is1&^Wu1$|LQ=} zO+-?U#Q5xhmbf~vj%&EJVm+9hsHhvr%3l1!!P;o`$I)N>dPh?2Z||% +YL>aV1a-7B(8#p2C-xy4(Nl+%ysZNyHiUY-amSE zPzQ?t?c2$ou$|4?<@M68q9(H?wx!v8f4x9#Ha2Ti__GPDhS4YygsD;!dG&p-*5e-s z6W6MrJ_s6CuMst< =u}3u3PI=8NCo$y|?|Jf?hc4ro2~oX&>R7yA?#^O=Oi{2v~o{yL)x z+KtylpC{BCaXwrvf6!_JS=_9T^4TS}e40ND6X(Brj{Ca>3u(4lzc}0J_C@8nt{a39 zrV?}CG+O=VE5hsyG?pzB(v3G)D`KfvFIrr!rhl^T_OSZCU6HWtZh<=FtMc&55lUL2 zo-Q7C@qj@ >sx*lq1s`V*qM#L5&yx3ALUx)(G3^NV!CGjsV zHt-1>Vo&?Db@g>!H&gKLzZtIoc%KUhxiXiOc-@WH?-@QrXXmfKJYCL f6+BlqO#jT z^u8OZ0izp+@!QG $`lGY8sKyTD2!D-&F&OR`;E5OuF-daDkor7iT-zil6V+ znzGiR4*=U2y%JAZ@YEGwz1Y#`_8&gw>}@-TDW~ZV50<4^1{YY-+4AAzVz6HC9){=? zZ{W^>r8@t%z53XPN3bjCnxn|izWqoI1Tju;u5 MI<9tWg_Y?K zZ-z4E* jH*cL?BBj#{Oj}9_LivwEUxTL z2e2ef+c}>~+8eHWLlI!?Wj@T}wmUx(Fy`P>h23a8&FB5Gf|zX%uXU1*du!vAIt;S) zFTUI}rh4QVcHs!TyK)@yTxNv!gs8E2bG!Ph6NMP$h9M$J91Zjf1jMy8926Eb7B*`u z7*!RWBLkELf?7?)G!YhQj4G&`*~or)KmYnU{c!UB&e@wkd*0&iWtpc- !z1X_&-dDU5-y>KPj0xBi%%A|KfgfNzQ z4KH=lAtofKxpn->5Q@+;l_eeJJ0z~l;O_4a?K|a9{rO*B1l!h|tG?JcLR+*o6 -iXfln#CK|T`H6D?i9icQ5S|~s$5CJ^0UbwCm32`%0c71=d{N|YW zz79GivWN1>05u76$@u0V4d`EbBlV7Me4xmO>-pY6M#lOil#Nm!XttzWNQ5J?j(GwX zv>BF>JeKt>RvnV&WRH^1{@QxxADgZSX=;Aom#0!H3hu+hu+pV{OCC-D0uz^0`ma5* z(e;1&Y58AYgfL=8MP|NbSulEw41!s%r?tJk^rxHE@lJ7Z68KG@gYn8=2DhfWSV_Go z61|2JP)Lc03{Q?E 6sJ#?wLs&ADs!y&Ff*S%9o1lFO-t>*8xbW(wZD^c*hq zi=ot>xN6rxIazHSG{!o4Yn~h|yBLb3JI2o@??Sq6#={^K+-vJsf$EE5MAZ6@uq~HQ zfq^B;jK{@(P_51pF)Dc}n8U}4WG~~vwCs&t!_v#lXOWpno3$$Xv!e}6I@AN(pvBoH z=`9gO7ak&k=t(?R3XLvnt~-y*THZJ~giqtx%cDIdwWZ*59ODA<#C@XU#0TfutGQf@ zo8hwR#?PN`u2yr*q^H?utHuXDL^BW`1nIracvfW-#mn*f?rHU}PFrvku1BdyW(f<1 z5b<&$I~?emwEK%!`&@Je@hPZ-q>W^DjMeN1Szs{8x3V#qI;tH}W_z+*N%v`$GOA9B z)`2425IU~CnZHx{p~=^7Ma&1Uy>73;iv8aDcqak43dVsjjkIUFS<33ij>M8=&@BY) zLLA+G*^~iS;E7Q1jMX`ivVI#OA s&6JZO&KtlnMLcP!r&>t`Stt^m|Li~`T;;Ev|4HkFW+(g&hg8x OG|W7Bt6y=S3TFT*BYT`pko9PMWpVF&g- z?rv^|R3P_-In~0Q3e?ILWJuf9yPNzMAV<(4+Ak mxLpx^bjj)ed&k-@aMC+7HE}-PuggAW3+Lw>K oSxn_=ng9sF z9M`8WOmvc{WY Alwjhlyu5|-CL+?Ow#nlU{@wyXe8*rR~rB2c&uXY=yS&GKJ=rQkkNrW9&uc%sbm zRLC5ndC7r{OFU>4@A}2oB6_~ZHNMte5@M`OMLf1~bt9^B7l+IQnDBN^l+OCzNjTh= zp(KaW1!-9k`V+N@>z`qz_<8DnSBEQ_HsASd%NfTtwI?6@`CnhuJXbhy2DfRRfo2er zXU7@g{whQX1w|45gjT?xKt~NbGtj6gb}?UmoIZcH?S}jKX>oj-7?apSq (`x^uqRQ}O7>-b1CWK+2-wh0$R8}EqW+hnab$kBR9tBL| z=F&G0pVoDt`qrFA&B?O=Ic6nhzLeG$QlYYxqHl$;a^@>pov-!}Lt!#wXS-iL+fTl| zU;XkJWK_dVdG8*^bHUtBR6nYZdK60faz;@Zz$8E+uB5>~P42ijJ=z!If#p~~ts2`D zDq)L8{>*0!l3@F0XHZfGjj!^PukA+&D|mhKaJxJ{B|eEj #<&xdb(EdLW#~&(+ z2xeU7#YNy) iem6WI_f#QtD}%@~HT*j{Kuk_E5&hl@Y4t_@ind+bWgL%(X)L zhrBm~G)1xQ)oa}@{t?WT{O(hEx>a4M17swx)ef`#`fl*`^F6{QTk}6$=BEM~nvKg( zK^sRD5}bEUoFmH%QE5ILCK}Xw{c^O7r1L&IhUA2dy(Pn6t@`TBln%p7-aN%zP`>h~ zhlO5A#~uC5_ICC1m_jACXbRZ+9IjQJHtIihnbT|YkzuQ)QN=*cS471g@qe|3$6as$MkG3&BtYjGT!=ap!6}ygcc~; zu)2jWI>d)R5;aN-jV?GBr{y$mOsBwx)yor)BMYym*56Bc;$VkZ6w=^sI^xL<{WZ+G zKSP#;C-ZB &e}tj<$5SQNFnwT^zKo z2kV4|l R~YNCjf~WT zRrJiDBO7>|!6W|dhfmLrj*0L>PNuFZBUDx&cBB~c`bR%s6NSg}--#j?f?}2{MyOw0 zV94`qqqv!*`@1o)mLp9gK}-qVXGjTI=03^Js*rc$uRo^u4NuLQw?VhsR$Bdhg`^4( zWPc#WE;$cON@& x=!(l3OKO>{Euy44qYTb|@^^ zGXLWh{k`9}=CmOj(0s^;eF3(u87Yc;rpfK i0@@^21FGhre!k?PO(Q>vEle;SE43hkS;9Z|Nkn>zJ)2xnt@ zw`|&vQ8xYI@>wAIGly!(@aay!I18}>OP#Yd^61Q1z)$G~L6v{|VJ5{3I;g;XQYK$P z9aR4u3T{moX&%(%hjqu(>$^3~i9?z*;b5ByuSRrk6 V(|p#VH7|a+tUfoY`s@Yyr_cB8 z_SJG+v>yw11`obb$LK_ZL6l-26hi6vvLq_BhBF9-e0nkl)Hnz3hRZKcRriMQ*zcy< zt6k2&>;~MZoKjKr &Q|T)TjO}#?Z}@dL5kM1xoy%;vO~BcrY3|EGE~I39izU5 zL!#OS6HrjL;7(`$F0!h4S{8qETR;SseOaxd=mWjsW|m!zkSa#=Exbb_K4==M(4xxF zq1Jjxo?s*G=JtGk{Rb~ hv00(M1g|a+sh8J8jqa?9V&1)EW7hk zsXQm?ro!WT_4}JOw9G*Pd1!8{x=Oq4X?vh{&9_tj{^J@=f8LU?Bx0-FiPp-r56HGs z72WCo^S1vC{3Z&P_L-<=A#C0`UFa4xj(obAQOWazi66Rc&qPz0KW--Z>1J@B-u9Q| z;!G*5QF>SQb~61NPra2S?vow<(Xfr%R5x8f-pmCVm_+CJ{awD@sN@8q1vd0?R+Uum zzkI%Ru$|KweE(RZ`1hfH_kJ$UVFS4wPUZTs87mIamJ+MZsdQ?|?>|kxJO%+}9r?3F z&7N37l#Pb+4lcLr&eZtx>}dC AmeFiNPb&$!XwNPF g|Hi_A~AgtyMJq9YNbB`GL!h`DU^f2q;5L}?f<@~ISUf6(we(ox>K0r zZ61r6g~zy*{KHkYvq_lR5MBQ;jdvpBRQ{LGOux%Xr~J@&?q#;w_OS5b(?|>_gdXX^ zPNK8Puockn&4jV!&yUIZUbYho2XpN4WGv=O%R4`Q2 AE^U zO3!6~&DSies_fo(%H#dk;f|eTJu$j(PQaBXV+!Q?Yy;SHpGwYNy%ltvV(BPl?nO zC#?uY{9>;H(uGcU_Y1*|gG K{O6lwZ%5xb2%}^UJl!&fx!+@2TQW~N;P38=0~syiT<2)^+EKN- z>x{m+*lcaAhvVwILH+qY^+WaHK}-d2xAOJS#>%h@s6xWX4&zL)4}Ev7mAN54VaPg= z)Sfq^pWpSrI&JOmYBMbU<6R~PPi%vBnh;K8TS%ZnHR#5s!8`Pttqqzk@E;y4sb2?L zKG$6G4JXdW_QL(EOr4?n?=N*WOa6@?dx>xwo2O;fM*PdO20Y)%W~!GDC9B5R<7WBO z4LzOA^iT)hY+ALViFuN(0_?kyTAoROJy)RpkSCl=sRkhXaY`_Rv}gzHWtS2H&`WI_ zzwS0)*7(%K>?X}tw0jU=4jS?Xpj(qkrTCQco=-+;y?k>M*i}D-ONb&w1Db&4%#xFw z0CI}t<0tWMwXG!n)2Eqcq1#^dG@ME9mt6n;W+r2UDbz1!tkHQ#qS}#pt&RYAorBoY zQ>ZW0Q-j{qZ2PFL*!%K!;cm8KzwIo}H|u8`$sgWN?VQTfzP+5E^T@IPYJ>2xQ~?wg z=VV|DO^y@-@&mmAQgZvDdzZp+dl$t6(~V7gv;fVW;_XAO*f-#Bwwj??N XV^5GHQBU8$zTdkLb3%m{mNwNmz5e3Q_o@6D_-? uYsGM*aG;oc%~k?m+J{qT@KJD}C0LR2K& zxV GXVC;r`H`AA-7YK)t?B M%N-fBS+Lus{?jvOqZj7+tAd3I2TI!FqTE&W4#`sEk< zfZ}d$*usRAnoxdmu_=FjpQmy=z4|mIAci?8h10V5K!vp{tUI7A7_}0a3MwP`Ln-9R zi?c(t>7y @Rd>QZklYcfhR#KAN8TN+1twsx$J6NaM2eiH-A7$5*XzbX zb2jw2W*58axaD>!$Iz2vysmRI0W)cJ9tOA|D4lD+I67-C`%Gl
r&eeUjweRnPXKSV`p7a20r;m1KD-*kx9jwlOQN7wn z7A51bV}Lu8$L{i&W0=`togD6N$oZNxV8RLD_FR)ybw4Xq0Zn`PK0CXQk~FFrI=PN^ z^k^hfp6Ov{arOIl8cb2O p2;FA#&=u%p&MQMrjH kju5-sf44!cSC?Hqjfz&%KI^N(@MSM zPBs}!L wK85%w3LbaS$3Yx^ &IBF_KsDr+ZR&K3SKKWqC@`q+1C5} zkPm}s(P-mynlFL@5rre1&0%u=xYY0IkbM{#f3;KPt$mn|l`r*uuCVQu7^Na;LN}$1 zD0hpmq;{@rCs5+Nx^62PYficr1P4)b+X-w%zbRNCa0o|Y=BxO9H}96R{H^VkJQf!+ zJ$Zi;|Kb^k?i!{e7|&G_%Rb