{"id":46082632,"url":"https://github.com/ctrl-gaurav/effgen","last_synced_at":"2026-05-28T03:02:44.052Z","repository":{"id":336351082,"uuid":"1146498042","full_name":"ctrl-gaurav/effGen","owner":"ctrl-gaurav","description":"[ICML 2026] effGen: Enabling Small Language Models as Capable Autonomous Agents","archived":false,"fork":false,"pushed_at":"2026-05-19T14:44:19.000Z","size":3580,"stargazers_count":162,"open_issues_count":40,"forks_count":27,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-05-19T15:38:38.285Z","etag":null,"topics":["agentic-ai","agents","large-language-models","small-language-models"],"latest_commit_sha":null,"homepage":"http://effgen.org/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ctrl-gaurav.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-31T07:26:17.000Z","updated_at":"2026-05-19T14:52:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"341a2fd5-5dae-49b8-acec-a36cdafb55c5","html_url":"https://github.com/ctrl-gaurav/effGen","commit_stats":null,"previous_names":["ctrl-gaurav/effgen"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/ctrl-gaurav/effGen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrl-gaurav%2FeffGen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrl-gaurav%2FeffGen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrl-gaurav%2FeffGen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrl-gaurav%2FeffGen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ctrl-gaurav","download_url":"https://codeload.github.com/ctrl-gaurav/effGen/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ctrl-gaurav%2FeffGen/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33410345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic-ai","agents","large-language-models","small-language-models"],"created_at":"2026-03-01T16:05:24.047Z","updated_at":"2026-05-28T03:02:44.035Z","avatar_url":"https://github.com/ctrl-gaurav.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003c!-- Animated Header --\u003e\n\u003cimg src=\"assets/header.svg\" alt=\"effGen\" width=\"100%\"/\u003e\n\n\u003cbr/\u003e\n\n\u003cbr/\u003e\n\n\u003c!-- Badges --\u003e\n\u003ca href=\"https://github.com/ctrl-gaurav/effGen/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/ctrl-gaurav/effGen/ci.yml?branch=main\u0026style=for-the-badge\u0026logo=github\u0026label=CI\" alt=\"CI\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://arxiv.org/abs/2602.00887\"\u003e\u003cimg src=\"https://img.shields.io/badge/arXiv-2602.00887-b31b1b.svg?style=for-the-badge\u0026logo=arxiv\u0026logoColor=white\" alt=\"arXiv\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/effgen/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/effgen.svg?style=for-the-badge\u0026logo=pypi\u0026logoColor=white\u0026color=3775A9\" alt=\"PyPI\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://www.python.org/downloads/\"\u003e\u003cimg src=\"https://img.shields.io/badge/python-3.10+-blue.svg?style=for-the-badge\u0026logo=python\u0026logoColor=white\" alt=\"Python\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://opensource.org/licenses/Apache-2.0\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Apache_2.0-green.svg?style=for-the-badge\" alt=\"License\"/\u003e\u003c/a\u003e\n\n\u003ca href=\"https://pepy.tech/project/effgen\"\u003e\u003cimg src=\"https://img.shields.io/pepy/dt/effgen?style=for-the-badge\u0026logo=pypi\u0026logoColor=white\u0026color=brightgreen\u0026label=Total%20Downloads\" alt=\"Total Downloads\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/effgen/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/dm/effgen.svg?style=for-the-badge\u0026logo=pypi\u0026logoColor=white\u0026color=orange\" alt=\"Monthly Downloads\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/ctrl-gaurav/effGen\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/ctrl-gaurav/effGen?style=for-the-badge\u0026logo=github\u0026color=yellow\" alt=\"Stars\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/ctrl-gaurav/effGen/fork\"\u003e\u003cimg src=\"https://img.shields.io/github/forks/ctrl-gaurav/effGen?style=for-the-badge\u0026logo=github\u0026color=blue\" alt=\"Forks\"/\u003e\u003c/a\u003e\n\u003ca href=\"docs/prompts/gallery.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/📚_Prompt_Library-31_templates_across_7_domains-8A2BE2?style=for-the-badge\" alt=\"Prompt Library\"/\u003e\u003c/a\u003e\n\u003ca href=\"docs/multimodal/overview.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/🖼️_Multimodal-image_%2F_audio_%2F_video-FF6B35?style=for-the-badge\" alt=\"Multimodal\"/\u003e\u003c/a\u003e\n\u003ca href=\"docs/cookbook/README.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/📖_Cookbook-5_multimodal_walkthroughs-4CAF50?style=for-the-badge\" alt=\"Cookbook\"/\u003e\u003c/a\u003e\n\u003ca href=\"docs/observability/overview.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/📊_Prometheus_Metrics-histograms_%2B_SLOs-E6522C?style=for-the-badge\u0026logo=prometheus\u0026logoColor=white\" alt=\"Prometheus Metrics\"/\u003e\u003c/a\u003e\n\u003ca href=\"docs/observability/tracing.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/🔭_OTel_Traces-samplers_%2B_span_spec-00B4CE?style=for-the-badge\u0026logo=opentelemetry\u0026logoColor=white\" alt=\"OTel Traces\"/\u003e\u003c/a\u003e\n\u003ca href=\"docs/observability/alerting.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/🔔_SLOs_%26_Alerting-Alertmanager_rules-F5A623?style=for-the-badge\" alt=\"SLOs\"/\u003e\u003c/a\u003e\n\u003ca href=\"deploy/docker/Dockerfile\"\u003e\u003cimg src=\"https://img.shields.io/badge/🐳_Docker-multi--stage_%2B_non--root-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white\" alt=\"Docker\"/\u003e\u003c/a\u003e\n\u003ca href=\"deploy/k8s/helm/effgen/\"\u003e\u003cimg src=\"https://img.shields.io/badge/⎈_Helm-chart_%2B_HPA_%2B_PDB-0F1689?style=for-the-badge\u0026logo=helm\u0026logoColor=white\" alt=\"Helm\"/\u003e\u003c/a\u003e\n\u003ca href=\"deploy/aws_lambda/\"\u003e\u003cimg src=\"https://img.shields.io/badge/λ_AWS_Lambda-Mangum_adapter-FF9900?style=for-the-badge\u0026logo=amazonaws\u0026logoColor=white\" alt=\"Lambda\"/\u003e\u003c/a\u003e\n\u003ca href=\"deploy/cloudflare/\"\u003e\u003cimg src=\"https://img.shields.io/badge/☁_Cloudflare_Worker-edge_proxy-F48120?style=for-the-badge\u0026logo=cloudflare\u0026logoColor=white\" alt=\"Cloudflare\"/\u003e\u003c/a\u003e\n\u003ca href=\"tools/vscode-effgen/\"\u003e\u003cimg src=\"https://img.shields.io/badge/🔷_VSCode_Extension-prompt_completion-007ACC?style=for-the-badge\u0026logo=visualstudiocode\u0026logoColor=white\" alt=\"VSCode\"/\u003e\u003c/a\u003e\n\n\u003c!-- Quick Links --\u003e\n\u003ca href=\"https://arxiv.org/abs/2602.00887\"\u003e\u003cimg src=\"https://img.shields.io/badge/📄_Read_Paper-FF6B6B?style=for-the-badge\" alt=\"Paper\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://effgen.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/🌐_Website-4ECDC4?style=for-the-badge\" alt=\"Website\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://effgen.org/docs/\"\u003e\u003cimg src=\"https://img.shields.io/badge/📚_Documentation-45B7D1?style=for-the-badge\" alt=\"Docs\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/effgen/\"\u003e\u003cimg src=\"https://img.shields.io/badge/📦_PyPI-96CEB4?style=for-the-badge\" alt=\"PyPI\"/\u003e\u003c/a\u003e\n\n\u003c!-- Typing Animation --\u003e\n\u003cimg src=\"https://readme-typing-svg.demolab.com?font=Fira+Code\u0026weight=600\u0026size=22\u0026pause=1000\u0026color=6C63FF\u0026center=true\u0026vCenter=true\u0026multiline=true\u0026repeat=true\u0026width=600\u0026height=80\u0026lines=Build+AI+Agents+with+Small+Language+Models;Fast+%E2%80%A2+Efficient+%E2%80%A2+Powerful\" alt=\"Typing SVG\" /\u003e\n\n\u003c/div\u003e\n\n---\n\n## 📰 News \u0026 Updates\n\n| | Date | Update |\n|:---:|:---|:---|\n| 🔒 | **27 May 2026** | **v0.2.10 Released**: Security, Edge \u0026 DX — secret scanning (gitleaks), SBOM (CycloneDX), pip-audit CI, sandboxed CodeExecutor (SubprocessSandbox + DockerSandbox), OAuth2/OIDC + RBAC + audit log, Docker + Helm, AWS Lambda (Mangum), Cloudflare Worker edge proxy, VSCode extension, Jupyter magics, live dashboard. [See changelog](CHANGELOG.md#0210---2026-05-27) |\n| 📊 | **23 May 2026** | **v0.2.9 Released**: Observability \u0026 Reliability — structured JSON logs + secret redaction, OTel samplers + canonical span spec, Prometheus histograms, SLO tracking, circuit breakers, bulkheads, jittered retries, chaos harness, fuzz suite, `effgen loadtest` CLI, Alertmanager rules. [See changelog](CHANGELOG.md#029---2026-05-23) |\n| 🖼️ | **21 May 2026** | **v0.2.8 Released**: First-class multimodal input — image, audio, and video across 6 providers (Gemini, OpenAI, Groq, Anthropic, Together, HF). New `multimodal` preset, `MultimodalDescribeTool`, unified `Message` content schema, 5 cookbook walkthroughs. [See changelog](CHANGELOG.md#028---2026-05-21) |\n| 📚 | **20 May 2026** | **v0.2.7 Released**: 31 prompt templates across 7 domains — research, coding, data/SQL, legal, medical, creative, business — with golden eval harness, interactive playground, and auto-generated gallery. [See changelog](CHANGELOG.md#027---2026-05-20) |\n| 🚀 | **19 May 2026** | **v0.2.6 Released**: 14 new tools — OCR, AudioTranscribe, ImageInfo, ImageCaption, PDF, DOCX, Excel, Weather, Geocode, Maps, EmailSMTP, EmailIMAP, SlackWebhook, DiscordWebhook. New presets: `media`, `notify`. 58+ built-in tools total. [See changelog](CHANGELOG.md#026---2026-05-19) |\n| 🚀 | **18 May 2026** | **v0.2.5 Released**: 13 new free tools — PubMed, ArXiv, SemanticScholar, RSS, News, YouTubeTranscript, YouTubeMetadata, Reddit, HackerNews, Translate, LanguageDetect, QRGenerate, QRRead. 44+ built-in tools total. [See changelog](CHANGELOG.md#025---2026-05-18) |\n| 🚀 | **14 May 2026** | **v0.2.4 Released**: ModelRouter with CostBased/LatencyBased/FirstAvailable policies, transparent provider failover, cross-process SQLite rate-limit coordination, persistent cost tracker + `effgen cost` dashboard CLI. [See changelog](CHANGELOG.md#024---2026-05-14) |\n| 🚀 | **4 May 2026** | **v0.2.3 Released**: 5 new cloud backends (Groq, Together AI, Fireworks, Replicate, HuggingFace Inference) — 9 providers total. Unified ProviderRegistry, `effgen doctor` auth check, backend parity matrix. [See changelog](CHANGELOG.md#023---2026-05-04) |\n| 🚀 | **28 Apr 2026** | **v0.2.2 Released**: Gemini 3.x/2.5/2.0 registry, `thinking_budget`, Google Search grounding, Files API, Gemini native tools (GoogleSearch, UrlContext, CodeExecution). Anthropic Claude 4.7 registry, extended thinking, prompt caching (`cache_control`), streaming polish, experimental native tools. [See changelog](CHANGELOG.md#022---2026-04-28) |\n| 🚀 | **25 Apr 2026** | **v0.2.1 Released**: Cerebras backend (4 free-tier models, streaming, native tool-calling, rate-limit coordinator, cost tracking) + OpenAI gpt-5/gpt-5.4-nano/o-series with `reasoning_effort`, prompt caching, structured outputs v2, and OpenAI native tools (web_search, code_interpreter, file_search). [See changelog](CHANGELOG.md#021---2026-04-25) |\n| 🚀 | **9 Apr 2026** | **v0.2.0 Released**: Major release — native tool calling, guardrails, multi-agent orchestration, RAG pipeline, 31 tools, eval framework, production API server, MLX Apple Silicon support, Python \u0026 TypeScript SDKs. [See changelog](CHANGELOG.md#020---2026-04-09) |\n| 🍎 | **8 Apr 2026** | **MLX \u0026 Apple Silicon support merged** (PR #4): Native Metal GPU acceleration via MLX \u0026 MLX-VLM backends, hardware detection, 5 Gradio GUI examples. `pip install effgen[mlx]` |\n| 🔧 | **25 Mar 2026** | **v0.1.3 Released**: Verification hardening — smarter loop detection, \"skip the tool\" prompting, model-aware token counting, sub-agent depth limits, circuit breaker persistence. [See changelog](CHANGELOG.md#013---2026-03-25) |\n| 🔧 | **12 Mar 2026** | **v0.1.2 Released**: Test-driven hardening — 10 example agents, 19 bug fixes, cross-model compatibility matrix (11 models, 73% pass rate). [See changelog](CHANGELOG.md#012---2026-03-12) |\n| 🔒 | **6 Mar 2026** | **v0.1.1 Released**: Stabilization — fixed license/metadata consistency, improved error handling, added 6 examples, expanded test suite. [See changelog](CHANGELOG.md#011---2026-03-06) |\n| 🎉 | **1 Mar 2026** | **v0.1.0 Released**: Major feature release — 14 built-in tools, agent presets, plugin system, real streaming, memory integration, ACP/MCP protocols, CI/CD, and comprehensive test suite. [See changelog](CHANGELOG.md#010---2026-03-01) |\n| 🔧 | **3 Feb 2026** | **v0.0.2 Released**: vLLM backend fixes with automatic chat template support, GPU memory control, improved OOM error handling, and multi-model family compatibility |\n| 📄 | **2 Feb 2026** | Preprint available: [EffGen: Enabling Small Language Models as Capable Autonomous Agents](https://arxiv.org/abs/2602.00887) |\n| 🚀 | **31 Jan 2026** | Initial release of effGen framework **(v0.0.1)** |\n\n---\n\n## 🤔 What is effGen?\n\n**effGen** transforms Small Language Models into powerful AI agents. While most frameworks require massive LLMs, effGen is **optimized from the ground up** for efficient, smaller models — delivering fast, capable agents without the compute overhead.\n\n```python\nfrom effgen import Agent, load_model\nfrom effgen.core.agent import AgentConfig\nfrom effgen.tools.builtin import Calculator, PythonREPL\n\n# Load a small but mighty model\nmodel = load_model(\"Qwen/Qwen2.5-1.5B-Instruct\", quantization=\"4bit\")\n\n# Create agent with tools\nconfig = AgentConfig(\n    name=\"math_agent\",\n    model=model,\n    tools=[Calculator(), PythonREPL()]\n)\nagent = Agent(config=config)\n\n# Run computation\nresult = agent.run(\"What is 24344 * 334?\")\nprint(f\"Answer: {result.output}\")\n```\n\n---\n\n## ⚡ Installation\n\n\u003e **Requires Python 3.10 or newer.** Tested on Python 3.10, 3.11, 3.12, 3.13, 3.14.\n\n### 📦 From PyPI (Recommended)\n\n```bash\npip install effgen\n```\n\n### 🍎 Apple Silicon (MLX — Recommended for Mac)\n\n```bash\npip install effgen[mlx]          # Text models on Apple Silicon\npip install effgen[mlx-vlm]      # Vision-Language models on Apple Silicon\n```\n\n### 🚀 With vLLM for Faster Inference\n\n```bash\npip install effgen[vllm]\n```\n\n### 🎁 Everything in one shot\n\n```bash\npip install effgen[all]    # installs vLLM + RAG + vector-DB + search + cloud-secrets + monitoring + …\n```\n\n### ⚡ Optional: flash-attn (NVIDIA GPUs only — 2 steps)\n\n\u003e `flash-attn` is **not** in `[all]` on purpose: its own `setup.py` imports\n\u003e `torch` before pip's isolated build environment has torch installed (a\n\u003e well-known upstream bug), so bundling it would break `pip install effgen[all]`\n\u003e for everyone. Install it in two steps instead:\n\n```bash\npip install effgen[all]                       # step 1: gets torch + the rest\npip install flash-attn --no-build-isolation   # step 2: reuses the torch from step 1\n```\n\nSee [docs/installation.md](docs/installation.md) for the full guide.\n\n### 🔧 From Source\n\n```bash\ngit clone https://github.com/ctrl-gaurav/effGen.git\ncd effGen\n\n# Quick install\n./install.sh\n\n# Full install (includes vLLM + dev tools)\n./install.sh --full\n\n# Manual install\npip install -e .\n```\n\n---\n\n## 🚀 Quick Start\n\n### 💻 CLI Usage\n\n```bash\n# Run a task\neffgen run \"What is the capital of France?\"\n\n# Interactive chat\neffgen chat\n\n# Start API server\neffgen serve --port 8000\n\n# List available presets\neffgen presets\n\n# Check infrastructure health\neffgen health\n\n# Interactive wizard\neffgen\n```\n\n### 🐍 Python API\n\n```python\nfrom effgen import Agent, load_model\nfrom effgen.core.agent import AgentConfig\nfrom effgen.tools.builtin import Calculator\n\n# Load model\nmodel = load_model(\"Qwen/Qwen2.5-1.5B-Instruct\", quantization=\"4bit\")\n\n# Configure agent\nconfig = AgentConfig(\n    name=\"calculator_agent\",\n    model=model,\n    tools=[Calculator()],\n    system_prompt=\"You are a helpful math assistant.\"\n)\n\n# Create and run\nagent = Agent(config=config)\nresult = agent.run(\"Calculate 15% tip on $85.50\")\nprint(result.output)\n```\n\n### 🍎 Apple Silicon (MLX)\n\n```python\nfrom effgen import Agent, load_model\nfrom effgen.core.agent import AgentConfig\nfrom effgen.tools.builtin import Calculator\n\n# Load MLX model — native Metal GPU, unified memory, no CPU-GPU transfer\nmodel = load_model(\"LiquidAI/LFM2.5-1.2B-Instruct-MLX-8bit\", engine=\"mlx\")\n\nconfig = AgentConfig(\n    name=\"mlx_agent\",\n    model=model,\n    tools=[Calculator()],\n)\nagent = Agent(config=config)\nresult = agent.run(\"What is sqrt(144) + 2^10?\")\nprint(result.output)\n```\n\n---\n\n## ✨ Features\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🧠**\u003cbr/\u003e\nSLM Optimized\u003cbr/\u003e\n\u003csub\u003eSmall models\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🍎**\u003cbr/\u003e\nApple Silicon\u003cbr/\u003e\n\u003csub\u003eMLX + Metal GPU\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🛡️**\u003cbr/\u003e\nGuardrails\u003cbr/\u003e\n\u003csub\u003ePII, injection, safety\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📚**\u003cbr/\u003e\nRAG Pipeline\u003cbr/\u003e\n\u003csub\u003eIngest, search, cite\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**👥**\u003cbr/\u003e\nMulti-Agent\u003cbr/\u003e\n\u003csub\u003eDAG workflows\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🖼️**\u003cbr/\u003e\nMultimodal\u003cbr/\u003e\n\u003csub\u003eimage/audio/video\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🏭**\u003cbr/\u003e\nProduction API\u003cbr/\u003e\n\u003csub\u003eOpenAI-compat\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📊**\u003cbr/\u003e\nObservability\u003cbr/\u003e\n\u003csub\u003emetrics/traces/SLOs\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n---\n\n## 🆕 What's New in v0.2.9\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003eObservability \u0026 Reliability — production-ready telemetry in v0.2.9\u003c/b\u003e\u003c/summary\u003e\n\n**effGen v0.2.9** ships the full observability and reliability stack. All telemetry is async/non-blocking — a failed export never fails inference.\n\n**Structured JSON logging with secret redaction.** Every log line is a JSON object: `{ts, level, module, event, attributes, trace_id, span_id}`. The built-in `Redactor` strips OpenAI, Anthropic, Cerebras, Google, HF, Groq, Bearer, Slack, and Discord webhook patterns at the encoder — no secret ever appears in a log file.\n\n```python\nfrom effgen.observability import get_logger\nlog = get_logger(__name__)\nlog.event(\"model.call.started\", provider=\"cerebras\", model=\"llama3.1-8b\", cached_tokens=0)\n# → {\"ts\": \"2026-05-23T...\", \"level\": \"INFO\", \"event\": \"model.call.started\", ...}\n```\n\n**Prometheus histograms + SLO tracking.** `effgen_model_call_latency_seconds`, `effgen_tool_call_latency_seconds`, `effgen_agent_iteration_latency_seconds`, and `effgen_tokens_total` now expose histogram buckets at `/metrics`. `SLOTracker` maintains a rolling-window error budget and `burn_rate()` at `/slo`.\n\n**Configurable OTel samplers + canonical span spec.** Choose `AlwaysOn`, `AlwaysOff`, `TraceIdRatio(p)`, or `RateLimited(per_second)` in config. `effgen/observability/spans.py` is the single source of truth for every span attribute name — no more scattered string literals across adapters.\n\n**Reliability primitives.** Four layers now protect every adapter call:\n\n| Primitive | Class | What it does |\n|-----------|-------|-------------|\n| Timeouts | `ReliabilityConfig` | `model_call=60s`, `tool_call=30s`, `http=20s` — explicit on every httpx client |\n| Retries | `@retryable(Retry(...))` | Jittered exponential backoff for 5xx / 429 / network errors; emits OTel events |\n| Circuit breaker | `CircuitBreaker` | CLOSED → OPEN → HALF_OPEN per provider; isolates misbehaving backends |\n| Bulkhead | `Bulkhead` | Per-provider concurrency + queue limit; prevents provider starvation |\n\n**Deterministic chaos harness.** Inject `NetworkTimeout`, `Http5xx`, `Http429`, `SlowResponse`, `PartialResponse`, or `MalformedJSON` faults with `Chaos(seed)`. Four canonical scenarios — fallback on 5xx, Retry-After honoured, timeout fires cleanly, AllProvidersFailed — all pass deterministically across 10 seeds.\n\n**Fuzz suite.** Hypothesis runs 500 examples against all 66 `BaseTool` subclasses, random `ContentPart` message sequences, and the router's provider-availability logic. No unhandled exceptions, no secret leaks.\n\n**Load-testing CLI + Alertmanager rules.**\n\n```bash\n# Run a 30-second load test (JSON report prints to stdout by default)\neffgen loadtest --concurrency 10 --duration 30 --scenario fixed\n\n# Or write the report to a file with --output\neffgen loadtest --concurrency 10 --duration 30 --output report.json\n\n# Integrate with Alertmanager\ncp docs/observability/alert_rules.yaml /etc/prometheus/rules/effgen.yaml\n```\n\nSee [docs/observability/overview.md](docs/observability/overview.md) for full setup, [docs/observability/metrics.md](docs/observability/metrics.md) for all metric definitions, and [docs/observability/alerting.md](docs/observability/alerting.md) for Alertmanager integration.\n\n\u003c/details\u003e\n\n## 🆕 What's New in v0.2.8\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003eFirst-class multimodal in v0.2.8 — image, audio \u0026 video across 6 providers\u003c/b\u003e\u003c/summary\u003e\n\n**effGen v0.2.8** makes multimodal input a first-class citizen. Send images, audio clips, and short video to any vision-capable provider through a unified `Message` schema — the adapter handles the translation, not your code.\n\n**Image input** — Gemini, OpenAI gpt-4o, Groq, Anthropic (code-only), Together, HF. Automatic resize/MIME validation via `image_pre.py`. Raises `CapabilityNotSupportedError` cleanly when the provider doesn't support vision.\n\n**Audio input** — Gemini native inline audio, OpenAI Whisper transcription + gpt-4o audio, HF Inference ASR. Auto-downsamples to 16 kHz mono; chunks files over provider max duration. Anthropic raises `CapabilityNotSupportedError`.\n\n**Video input** — Gemini native video for providers that accept raw video; frame-sampling fallback (ffmpeg) for all others. `MissingSystemDependency` with install hints when ffmpeg is absent.\n\n**Unified message schema** — `TextPart`, `ImagePart`, `AudioPart`, `VideoPart` form a typed `ContentPart` union. `Message.content` is always a `List[ContentPart]`; backwards-compatible string constructor still works.\n\n**`multimodal` preset** — `create_agent(\"multimodal\", model)` wires Gemini Flash-Lite (primary) + OpenAI gpt-4o-mini (fallback) with `ImageInfo`, `ImageCaption`, `OCR`, `AudioTranscribe`, `MultimodalDescribeTool`, and the full tool suite.\n\n**5 cookbook walkthroughs** — image Q\u0026A, audio transcribe + reason, video summarize, OCR + LLM structured extraction, chart reading from an image. All in `docs/cookbook/`.\n\n```python\nfrom effgen import image_from, audio_from, video_from\nfrom effgen.core.messages import Message, Role\nfrom effgen.presets import create_agent\nfrom effgen import load_model\n\nmodel = load_model(\"gemini-2.0-flash\", provider=\"gemini\")\nagent = create_agent(\"multimodal\", model)\n\n# Image question\nimg = image_from(\"https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/240px-PNG_transparency_demonstration_1.png\")\nmsg = Message(role=Role.USER, content=[img, \"What is in this image?\"])\nresult = agent.run_message(msg)\nprint(result.output)\n\n# Audio transcription\naud = audio_from(\"/tmp/clip.mp3\")\nmsg = Message(role=Role.USER, content=[aud, \"Transcribe and summarize.\"])\nresult = agent.run_message(msg)\n```\n\n```bash\n# Multimodal preset\neffgen run --preset multimodal \"Describe this image\" --image /tmp/photo.jpg\n\n# Check capability\npython -c \"from effgen.models.capabilities import Capability; print(Capability.vision)\"\n```\n\nSee [docs/multimodal/overview.md](docs/multimodal/overview.md) for the full architecture and [docs/cookbook/README.md](docs/cookbook/README.md) for the cookbook index.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e31 prompt templates in v0.2.7 — Prompt Library, Eval Harness \u0026 Interactive Playground\u003c/b\u003e\u003c/summary\u003e\n\n**effGen v0.2.7** adds a curated, domain-organized **Prompt Library** with 31 reusable templates across 7 domains, paired with a golden evaluation harness and an interactive playground CLI. See the [full gallery](docs/prompts/gallery.md).\n\n**Research** — literature review (zero-shot + CoT), paper summary, citation extraction, methodology critique.\n\n**Coding** — code review, bug diagnosis, refactoring plan, test generation, docstring fill.\n\n**Data / SQL** — NL-to-SQL with warnings, SQL explain, SQL optimize, data profile, ETL plan.\n\n**Legal** — contract summary, clause classify, research brief. All templates include mandatory legal disclaimer.\n\n**Medical** — symptom triage, drug interaction, medical literature synthesis. All templates include mandatory medical disclaimer.\n\n**Creative** — story continuation (zero-shot + few-shot), poetry forms, character bio, world building.\n\n**Business** — meeting summary, email draft (formal/casual), OKR generation, SWOT analysis, elevator pitch.\n\n```bash\n# Discover and browse\neffgen prompts list\neffgen prompts list --domain research\neffgen prompts list --format markdown\n\n# Inspect and evaluate\neffgen prompts show research.literature_review.v1.cot\neffgen prompts eval\neffgen prompts eval --domain coding --live --model llama3.1-8b\n\n# Interactive playground\neffgen prompts playground\n```\n\n```python\nfrom effgen.prompts.library import registry\n\np = registry.get(\"data.sql_from_nl.v1\")\nsql_prompt = p.template(\n    schema_ddl=\"CREATE TABLE orders (id INT, customer TEXT, total FLOAT, created_at DATE)\",\n    question=\"Total revenue per customer this month\",\n    dialect=\"postgresql\",\n)\n```\n\nSee [docs/prompts/gallery.md](docs/prompts/gallery.md) for the full template catalog and [docs/prompts/library.md](docs/prompts/library.md) for the framework overview.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e14 new tools in v0.2.6 — OCR, Audio, Images, Documents, Geo/Weather \u0026 Communications\u003c/b\u003e\u003c/summary\u003e\n\n**effGen v0.2.6** adds 14 new built-in tools across document, media, and communication categories, bringing the total to **58+**. Two new presets (`media`, `notify`) are also introduced.\n\n1. **OCR** — `OCRTool` (Tesseract local + OCR.space fallback; `OCRBackendUnavailable` raised with install instructions).\n\n   ```python\n   from effgen.tools.builtin.ocr import OCRTool\n   result = OCRTool().execute({\"operation\": \"extract\", \"image_path\": \"/tmp/scan.png\"})\n   print(result[\"data\"][\"text\"])\n   ```\n\n2. **Audio Transcription** — `AudioTranscribeTool` (faster-whisper local; HF Inference fallback; GPU auto-detected).\n\n   ```python\n   from effgen.tools.builtin.audio_transcribe import AudioTranscribeTool\n   result = AudioTranscribeTool().execute({\"operation\": \"transcribe\", \"audio_path\": \"/tmp/clip.mp3\"})\n   ```\n\n3. **Image Analysis** — `ImageInfoTool` (Pillow metadata, zero network) + `ImageCaptionTool` (vision-capable model router).\n\n4. **Document Parsing** — `PDFTool` (pypdf + pdfplumber), `DOCXTool` (python-docx), `ExcelTool` (openpyxl + pandas). All added to `research` and `general` presets.\n\n   ```python\n   from effgen.tools.builtin.pdf import PDFTool\n   result = PDFTool().execute({\"operation\": \"text\", \"path\": \"/tmp/paper.pdf\"})\n   ```\n\n5. **Geo / Weather** — `WeatherTool` (Open-Meteo, free, no auth), `GeocodeTool` (Nominatim/OSM, 1 req/s), `MapsTool` (staticmap PNG renderer).\n\n   ```python\n   from effgen.tools.builtin.geocode import GeocodeTool\n   result = GeocodeTool().execute({\"operation\": \"geocode\", \"address\": \"San Francisco, CA\"})\n   ```\n\n6. **Email \u0026 Webhooks** — `EmailSMTPTool`, `EmailIMAPTool`, `SlackWebhookTool`, `DiscordWebhookTool`. All in new `notify` preset. Webhook URLs are redacted in logs.\n\n   ```python\n   from effgen.tools.builtin.slack_webhook import SlackWebhookTool\n   result = SlackWebhookTool().execute({\"operation\": \"post\", \"text\": \"Deploy complete!\"})\n   ```\n\nSee the [full tool gallery](docs/tools/gallery.md) for quickstart snippets for all 58+ tools.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e13 new free tools in v0.2.5 — Research, News, YouTube, Social, Translation \u0026 QR\u003c/b\u003e\u003c/summary\u003e\n\n**effGen v0.2.5** adds 13 free, no-auth-required tools, bringing the built-in tool count above 44. All tools integrate with the `research` and `general` presets.\n\n1. **Academic Research** — `PubMedTool` (NCBI, 3 ops, built-in rate limiting), `ArXivTool` (Atom feed + PDF download), `SemanticScholarTool` (search + citations + references).\n\n   ```python\n   from effgen.tools.builtin.arxiv import ArXivTool\n   tool = ArXivTool()\n   result = tool.execute({\"operation\": \"search\", \"query\": \"transformer attention\", \"max_results\": 5})\n   ```\n\n2. **News \u0026 RSS** — `RSSFeedTool` (any RSS/Atom feed), `NewsTool` (BBC, Reuters, HN, NPR, etc. + optional NewsAPI.org key).\n\n   ```python\n   from effgen.tools.builtin.news import NewsTool\n   result = NewsTool().execute({\"operation\": \"top_headlines\", \"category\": \"technology\"})\n   ```\n\n3. **YouTube** — `YouTubeTranscriptTool` (captions without Google API key), `YouTubeMetadataTool` (via yt-dlp, public content only).\n\n4. **Social Media** — `RedditTool` (public JSON, no OAuth), `HackerNewsTool` (Firebase API, no auth).\n\n5. **Translation \u0026 Language Detection** — `TranslateTool` (LibreTranslate + offline argostranslate fallback), `LanguageDetectTool` (55+ languages, fully offline).\n\n6. **QR Codes** — `QRGenerateTool` (generate locally), `QRReadTool` (decode from image, with OpenCV fallback if zbar is unavailable).\n\nSee the [full tool gallery](docs/tools/gallery.md) for quickstart snippets for all 58+ tools.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eTop 5 features from v0.2.4 — ModelRouter \u0026 Cost Optimizer\u003c/b\u003e\u003c/summary\u003e\n\n1. **`PolicyBasedRouter`** — composable routing engine with three built-in policies. Pick the cheapest provider within your budget, the fastest under your SLA, or simply the first available — and combine them freely.\n\n   ```python\n   from effgen import PolicyBasedRouter, RoutingContext, CostBasedPolicy, LatencyBasedPolicy\n   from effgen.models.capabilities import Capability\n\n   router = PolicyBasedRouter(policies=[LatencyBasedPolicy(), CostBasedPolicy()])\n   ctx = RoutingContext(\n       prompt_tokens_estimate=500,\n       user_budget_usd=0.01,\n       latency_budget_ms=3000,\n       required_capabilities={Capability.chat},\n   )\n   decision = router.route(ctx)\n   print(decision.chosen)      # e.g., ProviderModelPair(\"cerebras\", \"llama3.1-8b\")\n   print(decision.eliminated)  # [(pair, reason), ...] — fully explainable\n   ```\n\n2. **Transparent failover** — `route_and_execute(ctx, fn)` retries on rate-limits / 5xx / timeouts and seamlessly moves to the next-best provider. Each hop fires a `RouterEvent` to registered subscribers.\n\n   ```python\n   from effgen import load_model\n\n   def call_provider(pair):\n       model = load_model(pair.model_id, provider=pair.provider)\n       return model.generate(\"Hello!\").text\n\n   router.subscribe(\n       lambda event: print(\n           f\"Failover: {event.from_provider}/{event.from_model} \"\n           f\"→ {event.to_provider}/{event.to_model}\"\n       )\n   )\n   result = router.route_and_execute(ctx, call_provider)\n   ```\n\n3. **Cross-process SQLite rate-limit coordination** — share a single rate-limit budget across multiple workers:\n\n   ```python\n   from effgen import RateLimitCoordinator, SQLiteRateLimitStore\n\n   store = SQLiteRateLimitStore(\"~/.effgen/rate_limits.sqlite\")\n   coordinator = RateLimitCoordinator(storage=store)  # WAL-mode, BEGIN IMMEDIATE\n   ```\n\n4. **Persistent cost tracking + `effgen cost` CLI** — every API call persists to SQLite; query spend instantly:\n\n   ```bash\n   effgen cost today          # per-provider per-model table\n   effgen cost week           # rolling 7-day view\n   effgen cost by-provider    # lifetime totals\n   effgen cost set-budget 1.0 # set $1/day cap (BudgetExceededError at 100%)\n   ```\n\n5. **Fully explainable decisions + budget guard** — `RouterDecision` records every eliminated provider and why (`\"rate_limited\"`, `\"no_key\"`, `\"cost_exceeds_budget\"`, `\"latency_exceeds_sla\"`). Configure a daily spend cap; the router automatically fails over to a free-tier provider when the budget is hit.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eTop 5 features from v0.2.3\u003c/b\u003e\u003c/summary\u003e\n\n1. **5 new cloud backends** — `GroqAdapter`, `TogetherAdapter`, `FireworksAdapter`, `ReplicateAdapter`, `HFInferenceAdapter` — each with streaming, native tools, rate-limit coordination, and cost tracking. 9 providers total.\n\n   ```python\n   model = load_model(\"llama-3.1-8b-instant\", provider=\"groq\")\n   model = load_model(\"Qwen/Qwen2.5-72B-Instruct\", provider=\"hf\")\n   ```\n\n2. **Unified ProviderRegistry** — `list_providers()`, `list_models(provider)`, `lookup(model_id)` consolidated across all 9 adapters. `AmbiguousModelError` on bare IDs shared across providers.\n\n3. **`effgen doctor`** — new CLI command showing which providers have API keys configured.\n\n4. **Backend parity matrix** — canonical agentic task (\"(17 × 23) + sqrt(144) = 403\") runs identically across all providers; streaming and error surfaces verified uniform. See `docs/providers/parity.md`.\n\n5. **HuggingFace Router support** — `HFInferenceAdapter` with 124-model dynamic catalog, `refresh_models()` + `check_drift()`, `ModelUnavailableError` with `suggest_alternatives()`, and custom Inference Endpoint URL.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eTop 5 features from v0.2.2 (and earlier)\u003c/b\u003e\u003c/summary\u003e\n\n1. **Gemini 3.x/2.5/2.0 + Gemma families** — full model registry with correct context windows, output limits, and feature flags; SDK migrated to `google-genai\u003e=1.0.0`.\n\n2. **Gemini `thinking_budget`** — activate Gemini's internal reasoning with `GenerationConfig(thinking_budget=8192, include_thoughts=True)`; thinking trace surfaces in `ModelResponse.metadata[\"thinking\"]`.\n\n3. **Gemini grounding + Files API** — `GenerationConfig(grounding=True)` injects Google Search; `upload_file(path)` passes PDFs/images to the model with a 2 GiB guard.\n\n4. **Gemini native tools** — `GoogleSearchTool`, `GeminiUrlContextTool`, `GeminiCodeExecutionTool` activate server-side Gemini capabilities in any Agent. Parallel function calls handled automatically.\n\n5. **Anthropic Claude 4.7, extended thinking, prompt caching** — full Claude 4.x registry; `GenerationConfig.thinking` for extended reasoning; `mark_cached()` + `AgentConfig.cache_system_prompt/cache_tools` for `cache_control`; cache tokens surfaced in usage.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eTop 5 features from v0.2.1\u003c/b\u003e\u003c/summary\u003e\n\n1. **Cerebras backend** — 4 free-tier models (`llama3.1-8b`, `qwen-3-235b-a22b-instruct-2507`, `gpt-oss-120b`, `zai-glm-4.7`) with streaming, native function-calling, automatic RPM/TPM/RPD/TPD rate-limit coordination, and per-call cost tracking. `pip install effgen[cerebras]` and set `CEREBRAS_API_KEY`.\n\n   ```python\n   from effgen import load_model\n   model = load_model(\"llama3.1-8b\", provider=\"cerebras\")\n   ```\n\n2. **OpenAI gpt-5 / gpt-5.4-nano / o-series reasoning models** — full registry coverage with `reasoning_effort` (`minimal`/`low`/`medium`/`high`) and `max_reasoning_tokens` on `GenerationConfig`. Reasoning payloads are routed only to reasoning-capable models.\n\n3. **OpenAI prompt caching surfacing** — `cached_input_tokens` exposed on `ModelResponse.usage`; `AgentConfig.stable_system_prompt=True` keeps the system prompt anchored at position 0 to maximize OpenAI's automatic ≥1024-token prefix cache hit rate.\n\n4. **Structured outputs v2** — `OpenAIAdapter.generate_structured()` with strict JSON Schema; `to_openai_schema(pydantic_model)` inlines `$ref`s and forces `additionalProperties: false`; refusals raise `ModelRefusalError`.\n\n5. **OpenAI native tools** — `OpenAIWebSearchTool`, `OpenAICodeInterpreterTool`, `OpenAIFileSearchTool` route through OpenAI's Responses API and compose with effGen's local tools in the same agent. `ToolIncompatibleError` fires at Agent init when paired with a non-OpenAI model.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eTop 5 features from v0.2.0\u003c/b\u003e\u003c/summary\u003e\n\n1. **Native Tool Calling** — Qwen, Llama, Mistral models use built-in function calling instead of text parsing. Set `tool_calling_mode=\"native\"` or `\"hybrid\"`. Structured JSON/Pydantic output validation included.\n\n2. **Guardrails \u0026 Safety** — PII detection, prompt injection blocking, toxicity filtering, tool permissions. One-liner: `get_guardrail_preset(\"strict\")`.\n\n3. **Production RAG Pipeline** — Ingest PDF/DOCX/HTML/Markdown, semantic+BM25 hybrid search, reranking, inline citations. `create_agent(\"rag\", model, knowledge_base=\"./docs/\")`.\n\n4. **Production API Server** — OpenAI-compatible `/v1/chat/completions`, request queuing, agent pooling, multi-tenancy, API keys. Drop-in OpenAI replacement with local SLMs.\n\n5. **Apple Silicon Native** — MLX \u0026 MLX-VLM backends for M1/M2/M3/M4. Metal GPU acceleration, unified memory. `pip install effgen[mlx]`.\n\n\u003c/details\u003e\n\n---\n\n## 🎯 Agent Presets\n\nGet started instantly with ready-to-use agent configurations:\n\n```python\nfrom effgen import load_model\nfrom effgen.presets import create_agent\n\nmodel = load_model(\"Qwen/Qwen2.5-3B-Instruct\", quantization=\"4bit\")\n\n# One-line agent creation\nmath_agent = create_agent(\"math\", model)       # Calculator + PythonREPL\nresearch_agent = create_agent(\"research\", model) # WebSearch + URLFetch + Wikipedia\ncoding_agent = create_agent(\"coding\", model)     # CodeExecutor + PythonREPL + FileOps + Bash\ngeneral_agent = create_agent(\"general\", model)   # All tools\nrag_agent = create_agent(\"rag\", model, knowledge_base=\"./docs/\")  # RAG pipeline\nminimal_agent = create_agent(\"minimal\", model)   # Direct inference, no tools\n```\n\n```bash\n# CLI preset support\neffgen run --preset math \"What is sqrt(144)?\"\neffgen run --preset research \"Tell me about quantum computing\"\n```\n\n---\n\n## 🛠️ Built-in Tools (58+)\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🔢**\u003cbr/\u003e\nCalculator\u003cbr/\u003e\n\u003csub\u003eMath \u0026 Units\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🌐**\u003cbr/\u003e\nWebSearch\u003cbr/\u003e\n\u003csub\u003eDuckDuckGo\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**💻**\u003cbr/\u003e\nCodeExecutor\u003cbr/\u003e\n\u003csub\u003eSandboxed\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🐍**\u003cbr/\u003e\nPythonREPL\u003cbr/\u003e\n\u003csub\u003eInteractive\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📁**\u003cbr/\u003e\nFileOps\u003cbr/\u003e\n\u003csub\u003eRead/Write\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🔍**\u003cbr/\u003e\nRetrieval\u003cbr/\u003e\n\u003csub\u003eRAG + BM25\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🎯**\u003cbr/\u003e\nAgenticSearch\u003cbr/\u003e\n\u003csub\u003eripgrep\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🖥️**\u003cbr/\u003e\nBashTool\u003cbr/\u003e\n\u003csub\u003eShell Cmds\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🌤️**\u003cbr/\u003e\nWeatherTool\u003cbr/\u003e\n\u003csub\u003eOpen-Meteo\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📋**\u003cbr/\u003e\nJSONTool\u003cbr/\u003e\n\u003csub\u003eQuery/Validate\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🕐**\u003cbr/\u003e\nDateTimeTool\u003cbr/\u003e\n\u003csub\u003eTimezones\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📝**\u003cbr/\u003e\nTextProcessing\u003cbr/\u003e\n\u003csub\u003eRegex/Count\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🔗**\u003cbr/\u003e\nURLFetch\u003cbr/\u003e\n\u003csub\u003eWeb Scrape\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📖**\u003cbr/\u003e\nWikipedia\u003cbr/\u003e\n\u003csub\u003eFree API\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🔬**\u003cbr/\u003e\nPubMed\u003cbr/\u003e\n\u003csub\u003eNCBI / Free\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📄**\u003cbr/\u003e\nArXiv\u003cbr/\u003e\n\u003csub\u003ePapers + PDF\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🎓**\u003cbr/\u003e\nSemanticScholar\u003cbr/\u003e\n\u003csub\u003eCitations\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📡**\u003cbr/\u003e\nRSSFeed\u003cbr/\u003e\n\u003csub\u003eAny Feed\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📰**\u003cbr/\u003e\nNews\u003cbr/\u003e\n\u003csub\u003eBBC/Reuters/HN\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**▶️**\u003cbr/\u003e\nYouTubeTranscript\u003cbr/\u003e\n\u003csub\u003eNo API key\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🎬**\u003cbr/\u003e\nYouTubeMetadata\u003cbr/\u003e\n\u003csub\u003eyt-dlp\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🤖**\u003cbr/\u003e\nReddit\u003cbr/\u003e\n\u003csub\u003ePublic JSON\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🔥**\u003cbr/\u003e\nHackerNews\u003cbr/\u003e\n\u003csub\u003eFirebase API\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🌍**\u003cbr/\u003e\nTranslate\u003cbr/\u003e\n\u003csub\u003eLibreTranslate\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**🔎**\u003cbr/\u003e\nLanguageDetect\u003cbr/\u003e\n\u003csub\u003eOffline / 55+\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📱**\u003cbr/\u003e\nQRGenerate\u003cbr/\u003e\n\u003csub\u003eLocal / No net\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**📷**\u003cbr/\u003e\nQRRead\u003cbr/\u003e\n\u003csub\u003eLocal Decode\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"14%\"\u003e\n\n**…**\u003cbr/\u003e\n+more\u003cbr/\u003e\n\u003csub\u003eFinance, DevOps\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n---\n\n## 📝 Prompt Library (New in v0.2.7)\n\neffGen ships a curated catalog of **31 reusable prompt templates** across 7 domains, each with a golden evaluation test and CLI access. Browse the [full gallery](docs/prompts/gallery.md).\n\n| Domain | Templates | Variants |\n|--------|-----------|----------|\n| Research | 5 | zero-shot, CoT, structured, tool-augmented |\n| Coding | 5 | zero-shot, CoT, structured, few-shot, tool-augmented |\n| Data / SQL | 5 | zero-shot, CoT, structured, few-shot, tool-augmented |\n| Legal | 3 | zero-shot, structured, tool-augmented |\n| Medical | 3 | structured, tool-augmented |\n| Creative | 5 | zero-shot, CoT, structured, few-shot |\n| Business | 5 | zero-shot, CoT, structured, few-shot |\n\n```bash\neffgen prompts list                          # browse all 31 templates\neffgen prompts show research.paper_summary.v1  # inspect a template\neffgen prompts eval                          # run golden eval (no model needed)\neffgen prompts playground                    # interactive REPL\n```\n\n```python\nfrom effgen.prompts.library import registry\n\n# Get and render a template\np = registry.get(\"coding.code_review.v1\")\nprompt = p.template(code=\"def add(a, b): return a + b\", language=\"python\")\n\n# Search templates\ncot_prompts = registry.search(variant=\"cot\")\nsql_prompts = registry.search(domain=\"data\")\n```\n\n\u003e Legal and medical templates enforce a mandatory non-advice disclaimer in every rendered output, verified by unit tests.\n\n---\n\n## 📚 Examples\n\n### 🖥️ GUI Applications (Gradio)\n\n```bash\n# Visual agent \u0026 tool development\npython examples/basic/chat_gui_mlx.py              # MLX Chat — streaming chat with Apple Silicon models (port 7860)\npython examples/basic/agent_viz_mlx.py             # Agent Visualizer — step-by-step reasoning + code editor (port 7860)\npython examples/basic/tool_builder_gui.py          # Tool Builder — visually create custom tools (port 7863)\npython examples/basic/tool_tester_gui.py           # Tool Tester — browse, test, inspect all 58+ tools (port 7864)\n```\n\n### 🍎 Apple Silicon (MLX)\n\n```bash\npython examples/basic/basic_agent_mlx.py           # Basic MLX agent with calculator\npython examples/basic/chat_gui_mlx.py --autoload   # Chat GUI with auto model loading\npython examples/basic/agent_viz_mlx.py --autoload   # Agent visualizer with auto model loading\n```\n\n### 🤖 Core Agent Examples\n\n```bash\npython examples/basic/qa_agent.py                  # Q\u0026A agent (no tools)\npython examples/basic/calculator_agent.py          # Math with Calculator + PythonREPL\npython examples/tools/advanced_multi_tool_agent.py # 5 tools + fallback chains\npython examples/tools/file_operations_agent.py     # File read/write/search\npython examples/tools/coding_agent.py              # Code execution + iteration\npython examples/advanced/conversational_agent.py   # Multi-turn memory\npython examples/advanced/advanced_streaming_agent.py # Token streaming with callbacks\npython examples/advanced/data_processing_agent.py  # JSON \u0026 data pipelines\npython examples/advanced/multi_agent_pipeline.py   # Multi-agent orchestration\npython examples/advanced/error_recovery_agent.py   # Error handling patterns\n```\n\n### ⚡ Quick-Start Examples\n\n```bash\npython examples/basic/basic_agent.py               # Basic agent (Transformers)\npython examples/basic/basic_agent_vllm.py          # Basic agent (vLLM - 5-10x faster)\npython examples/plugins_presets/preset_agents.py   # Ready-to-use agent presets\npython examples/web_retrieval/streaming_agent.py   # Simple streaming\npython examples/web_retrieval/memory_agent.py      # Simple multi-turn memory\npython examples/tools/multi_tool_agent.py          # Simple multi-tool\npython examples/web_retrieval/weather_agent.py     # Weather via Open-Meteo (free)\npython examples/plugins_presets/plugin_example.py  # Custom tool plugins\npython examples/web_retrieval/web_agent.py         # Web search agent\npython examples/web_retrieval/retrieval_agent.py   # RAG-based retrieval\n```\n\n\u003e 📊 See [examples/compatibility_matrix.md](examples/utils/compatibility_matrix.md) for model compatibility across all agents.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📖 More Examples\u003c/b\u003e\u003c/summary\u003e\n\n### Multi-Tool Agent\n\n```python\nfrom effgen import Agent, load_model\nfrom effgen.core.agent import AgentConfig\nfrom effgen.tools.builtin import Calculator, WebSearch, PythonREPL\n\nmodel = load_model(\"Qwen/Qwen2.5-3B-Instruct\")\n\nconfig = AgentConfig(\n    name=\"research_agent\",\n    model=model,\n    tools=[Calculator(), WebSearch(), PythonREPL()],\n    system_prompt=\"You are a research assistant.\"\n)\n\nagent = Agent(config=config)\nresult = agent.run(\"Search for the population of Tokyo and calculate what percentage it is of Japan's total population\")\n```\n\n### Streaming\n\n```python\nfrom effgen import Agent, load_model\nfrom effgen.core.agent import AgentConfig\nfrom effgen.tools.builtin import Calculator\n\nmodel = load_model(\"Qwen/Qwen2.5-3B-Instruct\", quantization=\"4bit\")\nagent = Agent(config=AgentConfig(\n    name=\"stream_demo\", model=model,\n    tools=[Calculator()], enable_streaming=True\n))\n\nfor token in agent.stream(\"What is 2 + 2?\"):\n    print(token, end=\"\", flush=True)\n```\n\n### Memory (Multi-Turn)\n\n```python\nagent = Agent(config=AgentConfig(\n    name=\"memory_demo\", model=model,\n    tools=[], enable_memory=True\n))\n\nagent.run(\"My name is Alice and I'm working on quantum computing.\")\nresult = agent.run(\"What's my name and what am I working on?\")\n# → \"Your name is Alice and you're working on quantum computing.\"\n```\n\n### Retrieval Agent (RAG)\n\n```python\nfrom effgen.tools.builtin import Retrieval\n\nretrieval_tool = Retrieval(knowledge_base_path=\"./docs\")\nconfig = AgentConfig(name=\"qa_agent\", model=model, tools=[retrieval_tool])\nagent = Agent(config=config)\nresult = agent.run(\"What does the documentation say about configuration?\")\n```\n\n\u003c/details\u003e\n\n---\n\n## 🤖 Multi-Model Support\n\neffGen supports **9 cloud inference providers** + 4 local backends, tested across 11+ model families:\n\n| Backend | Platform | Install | Best For |\n|---------|----------|---------|----------|\n| **MLX** | Apple Silicon (M1/M2/M3/M4) | `effgen[mlx]` | Native Metal GPU, unified memory, 4/8-bit quantization |\n| **MLX-VLM** | Apple Silicon | `effgen[mlx-vlm]` | Vision-Language models (Qwen2-VL, LLaVA, Phi-3 Vision, 30+ architectures) |\n| **vLLM** | NVIDIA GPU | `effgen[vllm]` | High-throughput batch inference |\n| **Transformers** | Any (CPU/GPU) | *(bundled)* | Universal compatibility, local models |\n| **OpenAI** | Cloud API | *(bundled)* | gpt-5/gpt-5.4/o-series, reasoning_effort, structured outputs, native tools |\n| **Anthropic** | Cloud API | *(bundled)* | Claude 4.7/4.x, extended thinking, prompt caching, native tools |\n| **Google Gemini** | Cloud API | *(bundled)* | Gemini 3.x/2.5/2.0, thinking_budget, grounding, Files API, native tools |\n| **Cerebras** | Cloud API | `effgen[cerebras]` | 4 free-tier models (llama3.1-8b, qwen-3-235b), ultra-low latency |\n| **Groq** | Cloud API | `effgen[groq]` | 16 models (llama-3.3-70b, mixtral, qwen3-32b), ultra-fast free-tier inference |\n| **Together AI** | Cloud API | `effgen[together]` | 163-model catalog (llama, deepseek, qwen, mistral), per-model pricing |\n| **Fireworks** | Cloud API | `effgen[fireworks]` | 80 chat models (54 tool-capable), serverless + dedicated |\n| **Replicate** | Cloud API | `effgen[replicate]` | 38 models, async run-poll, SSE streaming, compute-second billing |\n| **HuggingFace** | Cloud API | `effgen[hf]` | 124-model HF Router catalog, custom Inference Endpoints, free serverless tier |\n\n### Provider Auth Check\n\n```bash\n# See which API keys are configured\neffgen doctor\n```\n\n### Quick Cloud Start\n\n```python\nfrom effgen import load_model, Agent\nfrom effgen.core.agent import AgentConfig\nfrom effgen.tools.builtin import Calculator\n\n# Any of the 9 cloud providers\nmodel = load_model(\"llama-3.1-8b-instant\", provider=\"groq\")          # Groq\n# model = load_model(\"meta-llama/Llama-3.3-70B-Instruct-Turbo\", provider=\"together\")\n# model = load_model(\"Qwen/Qwen2.5-72B-Instruct\", provider=\"hf\")\n\nagent = Agent(config=AgentConfig(name=\"agent\", model=model, tools=[Calculator()]))\nresult = agent.run(\"What is (17 * 23) + sqrt(144)?\")\nprint(result.output)  # → 403\n```\n\n### Top Recommended Models\n\n| Model | Size | Compatibility |\n|-------|------|---------------|\n| **LFM2.5-1.2B-Instruct-MLX-8bit** | 1.2B | Apple Silicon optimized, fast agentic |\n| **Qwen2.5-1.5B-Instruct** | 1.5B | 10/10 agents pass |\n| **Qwen2.5-3B-Instruct** | 3B | 10/10 agents pass (recommended default) |\n| **Phi-4-mini-instruct** | 3.8B | 10/10 agents pass |\n| Qwen3-1.7B | 1.7B | 9.5/10 |\n| Qwen2.5-7B-Instruct | 7B | 9/10 |\n| Llama-3.2-3B-Instruct | 3B | 8.5/10 |\n\n\u003e Full matrix with 11 models x 10 agents: [compatibility_matrix.md](examples/utils/compatibility_matrix.md)\n\n---\n\n## 🔒 Security\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"33%\"\u003e\n\n**🐳**\u003cbr/\u003e\nDocker Sandbox\u003cbr/\u003e\n\u003csub\u003eIsolated execution\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"33%\"\u003e\n\n**🛡️**\u003cbr/\u003e\nInput Validation\u003cbr/\u003e\n\u003csub\u003eAuto sanitization\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"33%\"\u003e\n\n**⚡**\u003cbr/\u003e\nRate Limiting\u003cbr/\u003e\n\u003csub\u003eConfigurable limits\u003c/sub\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n\u003e 📋 For security policies and vulnerability reporting, see [SECURITY.md](SECURITY.md)\n\n---\n\n## 🚀 Deployment\n\neffGen v0.2.10 ships production-ready deployment recipes for every major target:\n\n### 🐳 Docker\n\nMulti-stage build with a non-root user, read-only filesystem, and `/health` healthcheck. See [`docs/deploy/docker.md`](docs/deploy/docker.md).\n\n```bash\ndocker build -f deploy/docker/Dockerfile -t effgen:0.2.10 .\ndocker run -p 8000:8000 --env-file .env effgen:0.2.10\ncurl http://localhost:8000/health\n```\n\n### ⎈ Kubernetes / Helm\n\nFull Helm chart with Deployment, Service, Ingress, NetworkPolicy, PDB, and HPA (scales on CPU + `effgen_model_call_latency_seconds`). See [`docs/deploy/kubernetes.md`](docs/deploy/kubernetes.md).\n\n```bash\nhelm lint deploy/k8s/helm/effgen/\nhelm install effgen deploy/k8s/helm/effgen/ --set image.tag=0.2.10\n```\n\n### λ AWS Lambda\n\nMangum adapter wrapping the FastAPI app. Cold start \u003c 3 s; warm call \u003c 100 ms. SAM template included. See [`docs/deploy/lambda.md`](docs/deploy/lambda.md).\n\n```bash\ncd deploy/aws_lambda\nsam build \u0026\u0026 sam deploy --guided\n```\n\n### ☁ Cloudflare Worker\n\nThin edge proxy handling CORS, Bearer JWT auth, and KV-backed rate limiting before forwarding to your backend. See [`docs/deploy/cloudflare.md`](docs/deploy/cloudflare.md).\n\n```bash\ncd deploy/cloudflare\nwrangler deploy  # staging: wrangler deploy --env staging\n```\n\n---\n\n## 🔷 Developer Experience\n\n### VSCode Extension\n\nPrompt-template completion, inline \"Run\" code lens on `LibraryPrompt` definitions, and hover docs — all from the effGen registry. See [`docs/dx/vscode.md`](docs/dx/vscode.md).\n\n```bash\ncd tools/vscode-effgen\nnpm ci \u0026\u0026 npm run compile\n# Install: Extensions → ··· → Install from VSIX → vscode-effgen-*.vsix\n```\n\n### Jupyter Magics\n\n```python\n%load_ext effgen.jupyter\n%effgen_chat \"What is 17 * 23?\"\n%%effgen_agent general\nSummarise the top HackerNews stories today and rank them by interest.\n%effgen_metrics\n```\n\nSee [`docs/dx/jupyter.md`](docs/dx/jupyter.md).\n\n### Live Dashboard\n\nThe API server serves a real-time SPA at `/dashboard` (no auth required). Panels: span stream (SSE), Prometheus metrics, recent agent runs with token counts and cost, SLO burn rates. See [`docs/dx/dashboard.md`](docs/dx/dashboard.md).\n\n```bash\nEFFGEN_DEV_MODE=1 effgen serve --port 8000\nopen http://localhost:8000/dashboard\n```\n\n---\n\n## 🔒 Security\n\n### Secret Scanning\n\nGitleaks pre-commit hook + CI workflow (`secret-scan.yml`) catch secrets before they reach the repo. Install the hook once:\n\n```bash\npip install pre-commit \u0026\u0026 pre-commit install\n```\n\n### Sandboxed Code Execution\n\n`CodeExecutor` defaults to `SubprocessSandbox` (rootless user-namespace, network blocked, isolated `/tmp`) or `DockerSandbox` when Docker is available. To opt out (not recommended):\n\n```bash\nEFFGEN_SANDBOX_BACKEND=off effgen run ...   # loud warning emitted\n```\n\n### API Server Auth\n\nProtect your API server with OAuth2/OIDC (any OIDC provider — Auth0, Keycloak, Cognito):\n\n```bash\nexport EFFGEN_OIDC_ISSUER=https://your-tenant.auth0.com/\nexport EFFGEN_OIDC_CLIENT_ID=your-client-id\nexport EFFGEN_OIDC_JWKS_URI=https://your-tenant.auth0.com/.well-known/jwks.json\neffgen serve --port 8000\n```\n\nSee [`docs/server/auth.md`](docs/server/auth.md), [`docs/server/rbac.md`](docs/server/rbac.md), and [`docs/server/audit.md`](docs/server/audit.md).\n\n---\n\n## 📖 Citation\n\nIf you use **effGen** in your research, please cite our paper:\n\n```bibtex\n@software{srivastava2026effgen,\n      title={effGen: Enabling Small Language Models as Capable Autonomous Agents},\n      author={Gaurav Srivastava and Aafiya Hussain and Chi Wang and Yingyan Celine Lin and Xuan Wang},\n      year={2026},\n      eprint={2602.00887},\n      archivePrefix={arXiv},\n      primaryClass={cs.CL},\n      url={https://arxiv.org/abs/2602.00887},\n}\n```\n\n---\n\n## 🔗 Links\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://arxiv.org/abs/2602.00887\"\u003e\u003cimg src=\"https://img.shields.io/badge/📄_Paper-arXiv:2602.00887-b31b1b?style=for-the-badge\" alt=\"Paper\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://effgen.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/🌐_Website-effgen.org-4ECDC4?style=for-the-badge\" alt=\"Website\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://effgen.org/docs/\"\u003e\u003cimg src=\"https://img.shields.io/badge/📚_Docs-effgen.org/docs-45B7D1?style=for-the-badge\" alt=\"Docs\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/effgen/\"\u003e\u003cimg src=\"https://img.shields.io/badge/📦_PyPI-pypi.org/project/effgen-3775A9?style=for-the-badge\" alt=\"PyPI\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/ctrl-gaurav/effGen/issues\"\u003e\u003cimg src=\"https://img.shields.io/badge/🐛_Issues-GitHub-red?style=for-the-badge\" alt=\"Issues\"/\u003e\u003c/a\u003e\n\n\u003c/div\u003e\n\n---\n\n## 📄 License\n\nApache License 2.0 — see [LICENSE](LICENSE) for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://effgen.org/docs/\"\u003e\u003cimg src=\"https://img.shields.io/badge/🚀_Get_Started-FF6B6B?style=for-the-badge\" alt=\"Get Started\"/\u003e\u003c/a\u003e\n\u003ca href=\"examples/\"\u003e\u003cimg src=\"https://img.shields.io/badge/📚_Examples-4ECDC4?style=for-the-badge\" alt=\"Examples\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://arxiv.org/abs/2602.00887\"\u003e\u003cimg src=\"https://img.shields.io/badge/📄_Paper-45B7D1?style=for-the-badge\" alt=\"Paper\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/ctrl-gaurav/effGen\"\u003e\u003cimg src=\"https://img.shields.io/badge/⭐_Star_on_GitHub-yellow?style=for-the-badge\" alt=\"GitHub\"/\u003e\u003c/a\u003e\n\n**Made with ❤️ for the AI community**\n\n\u003c!-- Footer Wave --\u003e\n\u003cimg src=\"assets/footer.svg\" alt=\"effGen footer\" width=\"100%\"/\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fctrl-gaurav%2Feffgen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fctrl-gaurav%2Feffgen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fctrl-gaurav%2Feffgen/lists"}