docs.rs failed to build hippox-0.6.0
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, skill_categories β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β 3. Workflow Execution (Step 2) using clean_intent β β
β β ββββββββββββ ββββββββββββ ββββββββββββ βββββββββββββββββββ β β
β β β ReAct β β Batch β β Chain β β PlanAndExecute β β β
β β ββββββ¬ββββββ ββββββ¬ββββββ ββββββ¬ββββββ βββββββββ¬ββββββββββ β β
β β ββββββββββββββ΄βββββββββββββ΄βββββββββββββββ β β
β β LLM generates SkillCall β 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, skill_categories
β
βΌ
βββββββββββββββ
β Step 2 β β Workflow Execution
β Execution β Execute skills 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: SkillScheduler β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 skill + 1 final response | Open-ended tasks, dynamic decision making, error recovery |
| Batch | WorkflowMode::Batch | Execute multiple independent skills 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 |
Atomic Skill Registry
π‘ HintοΌIn Hippox, an atomic skill represents a smallest indivisible unit of execution, This is a different concept from "Skill" in user business.
Working Principle
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SKILL REGISTRY β
β β
β SkillRegistryMap = HashMap<SkillCategory, β
β HashMap<String, Arc<dyn Skill>>> β
β β
β ββββββββββββ ββββββββββββ ββββββββββββ β
β β File β β Math β β Net β β
β ββββββββββββ€ ββββββββββββ€ ββββββββββββ€ β
β β read β β calc β β http β β
β β write β β power β β ping β β
β β delete β β stats β β dns β β
β β ... β β ... β β ... β β
β ββββββββββββ ββββββββββββ ββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Registration:
Compile-time: file_register() / math_register() / net_register()
Runtime: register_skill(category, name, skill)
Query:
get_skill_by_name("read") β Skill impl β execute()
Core Type
pub type SkillRegistryMap = ;
Main Functions
| Function | Description |
|---|---|
| get_registry() | Get read lock on the registry |
| get_registry_mut() | Get write lock on the registry |
| register_skill(category, name, skill) | Dynamically register a skill |
| get_all_skills() | Get all registered skills |
| get_skill_by_name(name) | Find a skill by name |
| get_skill_by_name_and_category(name, category) | Find a skill by name and category |
| has_skill(name) | Check if a skill exists |
| list_skills_names() | List all skill names |
| list_skills_name_by_category(category) | List skill names in a category |
| get_skills_by_category(category) | Get skills by category string |
| get_skills_by_category_list(categories) | Get skills by multiple categories |
| list_skills_name_by_category_list(categories) | List skill names by multiple categories |
| get_all_categorys() | Get all category names |
| get_skill_category() | Get categories with skill counts |
| get_skill_category_names() | Get all category names |
| get_skill_category_name_and_describe() | Get category names with descriptions |
| generate_skill_registry_table_json_str() | Generate registry JSON string |
SkillCategory 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 |