docs.rs failed to build hippox-0.6.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build:
hippox-0.3.9
π Quick Links
| Resource | Link |
|---|---|
| π Website | https://hippox.vercel.app/ |
| π Documentation | https://hippox-docs-en.vercel.app/ |
| π¦ Crates.io | https://crates.io/crates/hippox |
| π» GitHub | https://github.com/0xhappyboy/hippo |
Basic Usage
Instantiate
// =================== Method 1 ===================
let hippox = builder
.api_key
.lang
.identity
.build
.await?;
// =================== Method 2 ===================
let mut config = default;
config.lang = "zh".to_string;
config.identity_information = IdentityInformation ;
let hippox = new.await?;
// =================== Simple Method ===================
let hippox = new.await?;
// builder
let hippox = builder
.api_key
.build
.await?;
Task Execution
Submit
1. Execution mode
- Asynchronous non-blocking submission. Task goes to background pool, returns task_id immediately. Result must be obtained via polling.
2. How it works
- Call
submit()method NaturalLanguageTaskis created and pushed to globalTASK_POOL- Background execution engine processes tasks automatically
- Method
returns task_id immediately (does NOT wait for completion) - Caller repeatedly queries
get_task(task_id)to check status - When
task.status == TaskStatus::Completed, extract result fromtask.final_output
3. Use when
- You don't need immediate results, or want to run multiple tasks concurrently.
use ;
use ModelProvider;
use Duration;
async
Execute - Direct execution
1. Execution mode
- Synchronous blocking call. The function waits until the task completes and returns the result directly.
2. How it works
- Call
execute()method - Task starts immediately in the current thread
- Code pauses and waits for completion
- Returns
Stringresult directly
3. Use when
- You need the result immediately and don't want to manage task state.
use Hippox;
use ModelProvider;
async
Configuration
1. HippoxConfig
/// Hippox global configuration
2. IdentityInformation
/// AI identity configuration
Hippox Core Working Principle
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Hippox Core Working Principle β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 1. Task Submission (Non-blocking) β β
β β hippox.submit(input) β NaturalLanguageTask β TASK_POOL β β
β β β TASK_NOTIFIER.notify_one() β return task_id β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 2. Intent Analysis (Step 1) β β
β β build_intent_parser_prompt() β LLM.generate() β parse β β
β β Output: clean_intent, driver_categories β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 3. Workflow Execution (Step 2) using clean_intent β β
β β ββββββββββββ ββββββββββββ ββββββββββββ βββββββββββββββββββ β β
β β β ReAct β β Batch β β Chain β β PlanAndExecute β β β
β β ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ βββββββββ¬ββββββββββ β β
β β ββββββββββββββ΄βββββββββββββ΄βββββββββββββββ β β
β β LLM generates DriverCall β Executor.execute() β raw_json β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 4. Response Formatting (Step 3) β β
β β needs_format_conversion(original_input)? β β
β β βββββββββββ βββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β false β βββΆ β return raw_json directly β β β
β β βββββββββββ βββββββββββββββββββββββββββββββββββββββββββββββ β β
β β βββββββββββ βββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β true β βββΆ β build_format_conversion_prompt() β β β
β β βββββββββββ β β LLM.generate() β formatted output β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β final_output β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Pipe Line
User Input
β
βΌ
βββββββββββββββ
β Step 1 β β Intent Analysis
β Analysis β build_intent_parser_prompt() β LLM
ββββββββ¬βββββββ Output: clean_intent, driver_categories
β
βΌ
βββββββββββββββ
β Step 2 β β Workflow Execution
β Execution β Execute drivers using clean_intent
ββββββββ¬βββββββ Output: raw_json
β
βΌ
βββββββββββββββ βββββββββββββββ
β Need Format β ββYesβββΆβ Step 3 β β Response Formatting
β Conversion? β β Formatting β build_format_conversion_prompt() β LLM
ββββββββ¬βββββββ ββββββββ¬βββββββ
β β
ββββββββββββ¬ββββββββββ
βΌ
Final Output
Task Pool
State Machine
Pending βββΊ Running βββΊ Completed
β β
β ββββΊ Paused βββΊ Running (resume)
β β
β ββββΊ Cancelled
β
ββββΊ Cancelled
β
ββββΊ Failed βββΊ Pending (retry)
Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Global Static (Auto-Start) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β GLOBAL_TASK_POOL β β
β β (Initialized at program load) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Hippox Instance β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β TaskPool (Global) β β
β β βββββββββββ βββββββββββ βββββββββββ β β
β β βTask A β βTask B β βTask C β β β
β β βPending β βRunning β βPending β β β
β β ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ β β
β β ββββββββββββββΌβββββββββββββ β β
β β βΌ β β
β β βββββββββββββββββββββββ β β
β β β Priority Queue β β β
β β β [Task A, Task C] β β β
β β ββββββββββββ¬βββββββββββ β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββββββ β β
β β β Execution Engine β (max: 10 workers) β β
β β β ββββββ ββββββ ββββββ β β
β β β β W1 β β W2 β β W3 β ... β β
β β β ββββ¬ββ ββββ¬ββ ββββ¬ββ β β
β β β ββββββββΌβββββββ β β
β β β βΌ β β
β β β βββββββββββββββββββ β β
β β β β ExecutableTask β β β
β β β β .execute() β β β
β β β βββββββββββββββββββ β β
β β βββββββββββββββββββββββ β β
β β β² β β
β β ββββββββββββ΄βββββββββββ β β
β β β Notifier (wakeup) β β β
β β βββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ExecutableTask Implementation β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β NaturalLanguageTask β β β
β β β β’ input: String β β β
β β β β’ workflow_executor: WorkflowExecutor β β β
β β β β’ scheduler: DriverScheduler β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β External APIs β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β handle_natural_language() β task_id (non-blocking) β
β get_task_status() / cancel() / pause() / resume() / retry() β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Workflow Model
| Mode | Enum Value | Core Features | LLM Calls | Use Cases |
|---|---|---|---|---|
| ReAct | WorkflowMode::ReAct | Think β Act β Observe loop, LLM decides next step after each execution | 1 per driver + 1 final response | Open-ended tasks, dynamic decision making, error recovery |
| Batch | WorkflowMode::Batch | Execute multiple independent drivers in parallel | 1 (generates batch plan) | Independent operations, bulk processing |
| Chain | WorkflowMode::Chain | Sequential execution with variable passing ({{variable}} syntax) | 1 (generates chain) | Linear pipelines, data transformation chains |
| PlanAndExecute | WorkflowMode::PlanAndExecute | One-time planning with conditional branching, variable references ({"$ref":"var"}), error handling (retry/skip/fail) | 1 plan + optional dynamic decisions | Complex workflows, conditional logic, deterministic tasks |
Workflow Atomic Driver Retry Strategy
Driver Registry
Working Principle
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DRIVER REGISTRY β
β β
β DriverRegistryMap = HashMap<DriverCategory, β
β HashMap<String, Arc<dyn Driver>>> β
β β
β ββββββββββββ ββββββββββββ ββββββββββββ β
β β File β β Math β β Net β β
β ββββββββββββ€ ββββββββββββ€ ββββββββββββ€ β
β β read β β calc β β http β β
β β write β β power β β ping β β
β β delete β β stats β β dns β β
β β ... β β ... β β ... β β
β ββββββββββββ ββββββββββββ ββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Registration:
Compile-time: file_register() / math_register() / net_register()
Runtime: register_driver(category, name, driver)
Query:
get_driver_by_name("read") β Driver impl β execute()
Core Type
pub type DriverRegistryMap = ;
Main Functions
| Function | Description |
|---|---|
| get_registry() | Get read lock on the registry |
| get_registry_mut() | Get write lock on the registry |
| register_driver(category, name, driver) | Dynamically register a driver |
| get_all_drivers() | Get all registered drivers |
| get_driver_by_name(name) | Find a driver by name |
| get_driver_by_name_and_category(name, category) | Find a driver by name and category |
| has_driver(name) | Check if a driver exists |
| list_drivers_names() | List all driver names |
| list_drivers_name_by_category(category) | List driver names in a category |
| get_drivers_by_category(category) | Get drivers by category string |
| get_drivers_by_category_list(categories) | Get drivers by multiple categories |
| list_drivers_name_by_category_list(categories) | List driver names by multiple categories |
| get_all_categorys() | Get all category names |
| get_driver_category() | Get categories with driver counts |
| get_driver_category_names() | Get all category names |
| get_driver_category_name_and_describe() | Get category names with descriptions |
| generate_driver_registry_table_json_str() | Generate registry JSON string |
DriverCategory Methods
| Method | Description |
|---|---|
| from_str(s) | Convert string to enum |
| name() | Convert enum to string (lowercase) |
| display_name() | Get human-readable display name |
| description() | Get category description |
| icon() | Get category icon/emoji |
| priority() | Get display priority (lower = first) |
| metadata() | Get complete category metadata |
| all_categories() | Get metadata for all categories |