1+ <!DOCTYPE html> < html lang ="en "> < head > < meta charset ="UTF-8 "> < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
2+ < title > EAI API Reference v0.1.0 - EmbeddedOS</ title > < link rel ="stylesheet " href ="../style.css "> </ head > < body >
3+ < nav class ="navbar "> < div class ="nav-inner ">
4+ < a href ="../index.html " class ="logo "> < span class ="logo-icon "> EoS</ span > EmbeddedOS < span class ="nav-version "> v0.1.0</ span > </ a >
5+ < div class ="nav-links "> < a href ="../index.html "> Home</ a > < a href ="../getting-started.html "> Get Started</ a > < a href ="index.html " class ="active "> Docs</ a > < a href ="../flow.html "> Flow</ a >
6+ < a href ="https://github.com/embeddedos-org " class ="nav-github "> ★ GitHub</ a > </ div > </ div > </ nav >
7+ < div class ="doc-layout "> < aside class ="doc-sidebar "> < div class ="sidebar-section "> < div class ="sidebar-title "> EAI Modules</ div >
8+ < a href ="#config " class ="sidebar-link active "> Config</ a > < a href ="#tool " class ="sidebar-link "> Tool Registry</ a >
9+ < a href ="#agent " class ="sidebar-link "> Agent (EAI-Min)</ a > < a href ="#models " class ="sidebar-link "> Models</ a >
10+ </ div > < div class ="sidebar-section "> < div class ="sidebar-title "> Products</ div >
11+ < a href ="eos.html " class ="sidebar-link "> EoS</ a > < a href ="eboot.html " class ="sidebar-link "> eBoot</ a >
12+ < a href ="eni.html " class ="sidebar-link "> ENI</ a > < a href ="ebuild.html " class ="sidebar-link "> ebuild</ a >
13+ </ div > </ aside >
14+ < main class ="doc-content ">
15+ < h1 > EAI Developer Documentation < span class ="version-badge "> v0.1.0</ span > </ h1 >
16+ < p > Embedded AI framework for on-device LLM inference, tool-calling agents, and model management. Headers: < code > <eai/config.h></ code > , < code > <eai/tool.h></ code > , < code > <eai_min/agent.h></ code > , < code > <eai/models.h></ code > </ p >
17+
18+ < div id ="config " class ="module-section "> < h2 style ="color:var(--purple) "> ⚙ Configuration API</ h2 >
19+ < p class ="module-desc "> Runtime configuration for EAI variants. Header: < code > <eai/config.h></ code > </ p > </ div >
20+
21+ < div class ="struct-card "> < h4 > eai_config_t</ h4 > < table >
22+ < tr > < td > < code > variant</ code > </ td > < td > < code > eai_variant_t</ code > </ td > < td > EAI variant (Min, Framework, etc.)</ td > </ tr >
23+ < tr > < td > < code > mode</ code > </ td > < td > < code > eai_mode_t</ code > </ td > < td > Execution mode</ td > </ tr >
24+ < tr > < td > < code > runtime_single</ code > </ td > < td > < code > eai_runtime_config_single_t</ code > </ td > < td > EAI-Min: single provider name</ td > </ tr >
25+ < tr > < td > < code > runtime_multi</ code > </ td > < td > < code > eai_runtime_config_multi_t</ code > </ td > < td > EAI-Framework: multiple providers (max 8)</ td > </ tr >
26+ < tr > < td > < code > tools[]</ code > </ td > < td > < code > const char *[32]</ code > </ td > < td > Enabled tool names</ td > </ tr >
27+ < tr > < td > < code > connectors[]</ code > </ td > < td > < code > const char *[16]</ code > </ td > < td > Connector names (Framework only)</ td > </ tr >
28+ < tr > < td > < code > policy.cloud_fallback</ code > </ td > < td > < code > bool</ code > </ td > < td > Allow cloud fallback</ td > </ tr >
29+ < tr > < td > < code > observability</ code > </ td > < td > < code > bool</ code > </ td > < td > Enable tracing/metrics</ td > </ tr >
30+ </ table > </ div >
31+
32+ < div class ="api-card accent-purple "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_config_init</ span > (< span class ="param "> eai_config_t *cfg</ span > )</ code > </ div >
33+ < p class ="api-desc "> Initialize config with defaults.</ p > </ div >
34+
35+ < div class ="api-card accent-purple "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_config_load_file</ span > (< span class ="param "> eai_config_t *cfg, const char *path</ span > )</ code > </ div >
36+ < p class ="api-desc "> Load configuration from a YAML/JSON file.</ p >
37+ < div class ="api-example "> < h5 > Example</ h5 > < pre > < code > eai_config_t cfg;
38+ eai_config_init(&cfg);
39+ eai_config_load_file(&cfg, "/etc/eai/config.yml");
40+ eai_config_dump(&cfg);</ code > </ pre > </ div > </ div >
41+
42+ < div class ="api-card accent-purple "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_config_load_profile</ span > (< span class ="param "> eai_config_t *cfg, const char *profile_name</ span > )</ code > </ div >
43+ < p class ="api-desc "> Load a named profile (e.g., "production", "debug", "minimal").</ p > </ div >
44+
45+ < div class ="api-card accent-purple "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> void</ span > < span class ="fn "> eai_config_dump</ span > (< span class ="param "> const eai_config_t *cfg</ span > ) / < span class ="fn "> eai_config_free</ span > (< span class ="param "> eai_config_t *cfg</ span > )</ code > </ div >
46+ < p class ="api-desc "> Print config to stdout or free allocated resources.</ p > </ div >
47+
48+ < div id ="tool " class ="module-section "> < h2 style ="color:var(--cyan) "> 🔧 Tool Registry API</ h2 >
49+ < p class ="module-desc "> Register callable tools for AI agents. Header: < code > <eai/tool.h></ code > </ p > </ div >
50+
51+ < div class ="struct-card "> < h4 > eai_tool_t</ h4 > < table >
52+ < tr > < td > < code > name[64]</ code > </ td > < td > < code > char</ code > </ td > < td > Tool name</ td > </ tr >
53+ < tr > < td > < code > description</ code > </ td > < td > < code > const char *</ code > </ td > < td > Human-readable description</ td > </ tr >
54+ < tr > < td > < code > params[16]</ code > </ td > < td > < code > eai_tool_param_t</ code > </ td > < td > Parameters: name, type (STRING/INT/FLOAT/BOOL/BYTES), required</ td > </ tr >
55+ < tr > < td > < code > param_count</ code > </ td > < td > < code > int</ code > </ td > < td > Number of parameters</ td > </ tr >
56+ < tr > < td > < code > permissions[8]</ code > </ td > < td > < code > const char *</ code > </ td > < td > Required permissions</ td > </ tr >
57+ < tr > < td > < code > exec</ code > </ td > < td > < code > eai_tool_exec_fn</ code > </ td > < td > Execution callback</ td > </ tr >
58+ </ table > </ div >
59+
60+ < div class ="api-card "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_tool_registry_init</ span > (< span class ="param "> eai_tool_registry_t *reg</ span > )</ code > </ div >
61+ < p class ="api-desc "> Initialize tool registry (max 64 tools).</ p > </ div >
62+
63+ < div class ="api-card "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_tool_register</ span > (< span class ="param "> eai_tool_registry_t *reg, const eai_tool_t *tool</ span > )</ code > </ div >
64+ < p class ="api-desc "> Register a tool. Agent can discover and call it by name.</ p >
65+ < div class ="api-example "> < h5 > Example</ h5 > < pre > < code > eai_status_t read_sensor_exec(const eai_kv_t *args, int n, eai_tool_result_t *r) {
66+ float val = read_temperature();
67+ r-> len = snprintf(r-> data, sizeof(r-> data), "%.1f", val);
68+ r-> status = EAI_OK;
69+ return EAI_OK;
70+ }
71+ eai_tool_t sensor_tool = {
72+ .name = "read_temperature",
73+ .description = "Read the ambient temperature sensor",
74+ .param_count = 0,
75+ .exec = read_sensor_exec
76+ };
77+ eai_tool_register(&registry, &sensor_tool);</ code > </ pre > </ div > </ div >
78+
79+ < div class ="api-card "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_tool_t *</ span > < span class ="fn "> eai_tool_find</ span > (< span class ="param "> eai_tool_registry_t *reg, const char *name</ span > )</ code > </ div >
80+ < p class ="api-desc "> Find a tool by name. Returns pointer or NULL.</ p > </ div >
81+
82+ < div class ="api-card "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_tool_exec</ span > (< span class ="param "> eai_tool_t *tool, const eai_kv_t *args, int arg_count, eai_tool_result_t *result</ span > )</ code > </ div >
83+ < p class ="api-desc "> Execute a tool with arguments. Result stored in < code > eai_tool_result_t</ code > (data[4096], len, status).</ p > </ div >
84+
85+ < div id ="agent " class ="module-section "> < h2 style ="color:var(--green) "> 🤖 Agent API (EAI-Min)</ h2 >
86+ < p class ="module-desc "> Minimal ReAct agent loop for embedded devices. Header: < code > <eai_min/agent.h></ code > </ p > </ div >
87+
88+ < div class ="api-card accent-green "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_min_agent_init</ span > (< span class ="param "> eai_min_agent_t *agent, eai_min_runtime_t *runtime, eai_tool_registry_t *tools, eai_mem_lite_t *memory</ span > )</ code > </ div >
89+ < p class ="api-desc "> Initialize agent with runtime (LLM), tool registry, and optional memory store.</ p >
90+ < div class ="api-params "> < h5 > Parameters</ h5 > < table >
91+ < tr > < td > agent</ td > < td > eai_min_agent_t *</ td > < td > Agent instance.</ td > </ tr >
92+ < tr > < td > runtime</ td > < td > eai_min_runtime_t *</ td > < td > LLM runtime backend.</ td > </ tr >
93+ < tr > < td > tools</ td > < td > eai_tool_registry_t *</ td > < td > Available tools.</ td > </ tr >
94+ < tr > < td > memory</ td > < td > eai_mem_lite_t *</ td > < td > Conversation memory (NULL to disable).</ td > </ tr >
95+ </ table > </ div > </ div >
96+
97+ < div class ="api-card accent-green "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_min_agent_run</ span > (< span class ="param "> eai_min_agent_t *agent, const eai_agent_task_t *task</ span > )</ code > </ div >
98+ < p class ="api-desc "> Run agent on a task to completion. Max < code > EAI_AGENT_MAX_ITERATIONS</ code > (10) loops.</ p >
99+ < div class ="api-params "> < h5 > Parameters</ h5 > < table >
100+ < tr > < td > task</ td > < td > const eai_agent_task_t *</ td > < td > goal (prompt), offline_only flag, max_iterations override.</ td > </ tr >
101+ </ table > </ div >
102+ < div class ="api-example "> < h5 > Example</ h5 > < pre > < code > eai_min_agent_t agent;
103+ eai_min_agent_init(&agent, &runtime, &tools, &memory);
104+
105+ eai_agent_task_t task = { .goal = "What is the current temperature?", .offline_only = true };
106+ eai_min_agent_run(&agent, &task);
107+ printf("Agent: %s\n", eai_min_agent_output(&agent));</ code > </ pre > </ div > </ div >
108+
109+ < div class ="api-card accent-green "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> eai_status_t</ span > < span class ="fn "> eai_min_agent_step</ span > (< span class ="param "> eai_min_agent_t *agent</ span > )</ code > </ div >
110+ < p class ="api-desc "> Run a single agent iteration (think → tool call → observe). Agent state: IDLE, THINKING, TOOL_CALL, DONE, ERROR.</ p > </ div >
111+
112+ < div class ="api-card accent-green "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> const char *</ span > < span class ="fn "> eai_min_agent_output</ span > (< span class ="param "> const eai_min_agent_t *agent</ span > )</ code > </ div >
113+ < p class ="api-desc "> Get agent's final output string after run completes.</ p > </ div >
114+
115+ < div class ="api-card accent-green "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> void</ span > < span class ="fn "> eai_min_agent_reset</ span > (< span class ="param "> eai_min_agent_t *agent</ span > )</ code > </ div >
116+ < p class ="api-desc "> Reset agent for new task. Clears state and iteration count.</ p > </ div >
117+
118+ < div id ="models " class ="module-section "> < h2 style ="color:var(--orange) "> 🧠 Model Registry</ h2 >
119+ < p class ="module-desc "> Curated embedded LLM models with hardware requirements. Header: < code > <eai/models.h></ code > </ p > </ div >
120+
121+ < div class ="api-card accent-orange "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> const eai_model_info_t *</ span > < span class ="fn "> eai_model_find</ span > (< span class ="param "> const char *name</ span > )</ code > </ div >
122+ < p class ="api-desc "> Find a model by name. Returns pointer to model info or NULL.</ p > </ div >
123+
124+ < div class ="api-card accent-orange "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> const eai_model_info_t *</ span > < span class ="fn "> eai_model_find_by_tier</ span > (< span class ="param "> eai_model_tier_t tier</ span > )</ code > </ div >
125+ < p class ="api-desc "> Find first model matching hardware tier: MICRO, TINY, SMALL, MEDIUM, LARGE.</ p > </ div >
126+
127+ < div class ="api-card accent-orange "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> const eai_model_info_t *</ span > < span class ="fn "> eai_model_find_best_fit</ span > (< span class ="param "> uint32_t ram_mb, uint32_t storage_mb</ span > )</ code > </ div >
128+ < p class ="api-desc "> Find the best model that fits within given RAM and storage constraints.</ p >
129+ < div class ="api-example "> < h5 > Example</ h5 > < pre > < code > const eai_model_info_t *m = eai_model_find_best_fit(512, 256);
130+ if (m) printf("Best model: %s (%u MB RAM, %u tok/s)\n", m-> name, m-> ram_mb, m-> tokens_per_sec);</ code > </ pre > </ div > </ div >
131+
132+ < div class ="api-card accent-orange "> < div class ="api-header "> < code class ="api-signature "> < span class ="ret "> void</ span > < span class ="fn "> eai_model_list</ span > (< span class ="param "> void</ span > )</ code > </ div >
133+ < p class ="api-desc "> Print all available models to stdout.</ p > </ div >
134+
135+ < h3 > Model Catalog</ h3 >
136+ < table class ="table-orange "> < thead > < tr > < th > Model</ th > < th > Tier</ th > < th > Quant</ th > < th > RAM</ th > < th > Storage</ th > < th > tok/s</ th > < th > Hardware</ th > </ tr > </ thead > < tbody >
137+ < tr > < td > TinyLlama-1.1B</ td > < td > SMALL</ td > < td > Q4_0</ td > < td > 768 MB</ td > < td > 640 MB</ td > < td > 12</ td > < td > RPi4, i.MX8M</ td > </ tr >
138+ < tr > < td > Phi-2-2.7B</ td > < td > MEDIUM</ td > < td > Q4_0</ td > < td > 2048 MB</ td > < td > 1600 MB</ td > < td > 8</ td > < td > Jetson Nano, RPi5</ td > </ tr >
139+ < tr > < td > SmolLM-135M</ td > < td > TINY</ td > < td > Q8_0</ td > < td > 256 MB</ td > < td > 150 MB</ td > < td > 25</ td > < td > RPi3, nRF5340</ td > </ tr >
140+ < tr > < td > Gemma-2B</ td > < td > MEDIUM</ td > < td > Q5_1</ td > < td > 2048 MB</ td > < td > 1400 MB</ td > < td > 6</ td > < td > Jetson Nano</ td > </ tr >
141+ < tr > < td > RWKV-169M</ td > < td > TINY</ td > < td > F16</ td > < td > 384 MB</ td > < td > 338 MB</ td > < td > 18</ td > < td > RPi3, ESP32-S3</ td > </ tr >
142+ < tr > < td > Llama-3.2-1B</ td > < td > SMALL</ td > < td > Q4_0</ td > < td > 896 MB</ td > < td > 700 MB</ td > < td > 10</ td > < td > RPi4, i.MX8M</ td > </ tr >
143+ < tr > < td > Qwen2-0.5B</ td > < td > TINY</ td > < td > Q4_0</ td > < td > 384 MB</ td > < td > 300 MB</ td > < td > 20</ td > < td > RPi3, nRF5340</ td > </ tr >
144+ < tr > < td > Mistral-7B</ td > < td > LARGE</ td > < td > Q4_0</ td > < td > 5120 MB</ td > < td > 4100 MB</ td > < td > 5</ td > < td > Jetson Orin, x86</ td > </ tr >
145+ </ tbody > </ table >
146+
147+ < div class ="struct-card "> < h4 > eai_model_info_t</ h4 > < table >
148+ < tr > < td > < code > name</ code > </ td > < td > < code > const char *</ code > </ td > < td > Model name</ td > </ tr >
149+ < tr > < td > < code > family</ code > </ td > < td > < code > const char *</ code > </ td > < td > Model family</ td > </ tr >
150+ < tr > < td > < code > quant</ code > </ td > < td > < code > eai_quant_t</ code > </ td > < td > F32, F16, Q8_0, Q5_1, Q5_0, Q4_1, Q4_0, Q3_K, Q2_K, IQ2</ td > </ tr >
151+ < tr > < td > < code > runtime</ code > </ td > < td > < code > eai_runtime_t</ code > </ td > < td > LLAMA_CPP, ONNX, TFLITE, CUSTOM</ td > </ tr >
152+ < tr > < td > < code > tier</ code > </ td > < td > < code > eai_model_tier_t</ code > </ td > < td > MICRO (<100MB), TINY, SMALL, MEDIUM, LARGE (4GB+)</ td > </ tr >
153+ < tr > < td > < code > param_count_m</ code > </ td > < td > < code > uint32_t</ code > </ td > < td > Parameters in millions</ td > </ tr >
154+ < tr > < td > < code > context_len</ code > </ td > < td > < code > uint32_t</ code > </ td > < td > Max context tokens</ td > </ tr >
155+ < tr > < td > < code > ram_mb / storage_mb</ code > </ td > < td > < code > uint32_t</ code > </ td > < td > Memory requirements</ td > </ tr >
156+ < tr > < td > < code > tokens_per_sec</ code > </ td > < td > < code > uint32_t</ code > </ td > < td > Approx inference speed</ td > </ tr >
157+ < tr > < td > < code > target_hardware</ code > </ td > < td > < code > const char *</ code > </ td > < td > Recommended hardware</ td > </ tr >
158+ < tr > < td > < code > gguf_file</ code > </ td > < td > < code > const char *</ code > </ td > < td > GGUF filename for llama.cpp</ td > </ tr >
159+ </ table > </ div >
160+
161+ </ main > </ div >
162+ < div class ="footer "> < div class ="footer-inner "> < div class ="footer-brand "> < h4 > EmbeddedOS</ h4 > < p > Open-source embedded OS.</ p > </ div >
163+ < div > < h4 > Docs</ h4 > < ul > < li > < a href ="eos.html "> EoS</ a > </ li > < li > < a href ="eboot.html "> eBoot</ a > </ li > < li > < a href ="eai.html "> EAI</ a > </ li > < li > < a href ="eni.html "> ENI</ a > </ li > </ ul > </ div >
164+ </ div > < div class ="footer-bottom "> © 2026 EmbeddedOS Project. MIT License. v0.1.0</ div > </ div >
165+ </ body > </ html >
0 commit comments