lionagi 0.17.6__tar.gz → 0.17.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lionagi-0.17.6 → lionagi-0.17.8}/PKG-INFO +1 -1
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/README.md +15 -5
- lionagi-0.17.8/benchmarks/comparisons/README.md +224 -0
- lionagi-0.17.8/benchmarks/comparisons/benchmark_detailed_20250922_182217.csv +901 -0
- lionagi-0.17.8/benchmarks/comparisons/benchmark_professional.py +1109 -0
- lionagi-0.17.8/benchmarks/comparisons/benchmark_results_20250922_182217.json +18965 -0
- lionagi-0.17.8/benchmarks/comparisons/benchmark_summary_20250922_182217.csv +46 -0
- lionagi-0.17.8/benchmarks/comparisons/generate_benchmark_report.py +571 -0
- lionagi-0.17.8/benchmarks/comparisons/report.md +200 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/__init__.py +5 -2
- lionagi-0.17.8/lionagi/service/__init__.py +99 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/hooks/_types.py +4 -4
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/hooks/_utils.py +4 -4
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/hooks/hook_event.py +17 -4
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/hooks/hook_registry.py +43 -24
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/hooks/hooked_event.py +2 -2
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/imodel.py +9 -4
- lionagi-0.17.8/lionagi/version.py +1 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/pyproject.toml +7 -1
- {lionagi-0.17.6 → lionagi-0.17.8}/uv.lock +1 -1
- lionagi-0.17.6/lionagi/service/__init__.py +0 -40
- lionagi-0.17.6/lionagi/version.py +0 -1
- {lionagi-0.17.6 → lionagi-0.17.8}/.coveragerc +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.env.example +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.github/FUNDING.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.github/dependabot.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.github/workflows/benchmarks.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.github/workflows/ci.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.github/workflows/codeql.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.github/workflows/docs-deploy.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.github/workflows/refresh-bench-baselines.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.github/workflows/release.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.gitignore +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.pre-commit-config.yaml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/.python-version +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/CODE_OF_CONDUCT.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/CONTRIBUTING.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/LICENSE +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/README.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/assets/operation_builder.gif +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/baselines/.gitkeep +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/baselines/concurrency-asyncio.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/baselines/concurrency-trio.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/baselines/fuzzy.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/baselines/ln-asyncio.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/baselines/ln-trio.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/ci_compare.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/concurrency_bench.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/fuzzy_bench.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/benchmarks/ln_bench.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/001_branch_converse.ipynb +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/002_branch_interact.ipynb +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/003_branch_info.ipynb +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/004_conversation_patterns.ipynb +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/005_react_basics.ipynb +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/007_fan_out_in.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/data/002_comedian.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/data/002_critic.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/data/006_lion_proof_ch2.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_claude_code/claude_proxy/README.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_claude_code/claude_proxy/claude_code_proxy.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_claude_code/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_claude_code/using_claude_code.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_mcp/.mcp.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_mcp/README.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_mcp/react_mcp_with_schema.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_mcp/search_group.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/cookbooks/using_mcp/search_group_config.json +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/DOCUMENTATION_STANDARDS.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/advanced/custom-operations.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/advanced/error-handling.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/advanced/flow-composition.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/advanced/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/advanced/observability.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/advanced/performance.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/code-of-conduct.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/comparisons/langgraph.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/contributing.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/cookbook/brainstorming.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/cookbook/claim-extraction.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/cookbook/code-review-crew.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/cookbook/data-persistence.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/cookbook/hr-automation.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/cookbook/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/cookbook/research-synthesis.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/core-concepts/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/core-concepts/lionagi-philosophy.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/core-concepts/messages-and-memory.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/core-concepts/models-and-providers.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/core-concepts/operations.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/core-concepts/sessions-and-branches.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/core-concepts/tools-and-functions.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/for-ai-agents/claude-code-usage.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/for-ai-agents/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/for-ai-agents/orchestration-guide.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/for-ai-agents/pattern-selection.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/for-ai-agents/self-improvement.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/includes/abbreviations.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/integrations/databases.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/integrations/dspy-optimization.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/integrations/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/integrations/llamaindex-rag.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/integrations/llm-providers.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/integrations/mcp-servers.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/integrations/tools.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/integrations/vector-stores.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/marketing/language-interoperability-manifesto.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/migration/from-autogen.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/migration/from-crewai.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/migration/from-langchain.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/migration/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/patterns/conditional-flows.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/patterns/fan-out-in.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/patterns/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/patterns/react-with-rag.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/patterns/sequential-analysis.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/patterns/tournament-validation.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/problem-statement.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/quickstart/claude-code-integration.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/quickstart/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/quickstart/installation.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/quickstart/orchestration-first.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/quickstart/your-first-flow.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/reference/api/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/reference/changelog.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/reference/troubleshooting.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/stylesheets/extra.css +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/thinking-in-lionagi/branches-as-agents.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/thinking-in-lionagi/builder-pattern.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/thinking-in-lionagi/graphs-over-chains.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/thinking-in-lionagi/index.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/docs/thinking-in-lionagi/why-lionagi.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/_class_registry.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/_errors.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/_types.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/adapters/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/adapters/_utils.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/adapters/async_postgres_adapter.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/config.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/fields/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/fields/action.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/fields/base.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/fields/code.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/fields/file.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/fields/instruct.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/fields/reason.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/fields/research.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/file/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/file/chunk.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/file/process.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/schema/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/schema/as_readable.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/schema/breakdown_pydantic_annotation.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/schema/extract_code_block.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/schema/extract_docstring.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/schema/function_to_schema.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/validate/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/validate/common_field_validators.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/validate/to_num.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/libs/validate/validate_boolean.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/_async_call.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/_hash.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/_json_dump.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/_list_call.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/_to_list.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/_utils.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/_compat.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/cancel.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/errors.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/patterns.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/primitives.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/resource_tracker.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/task.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/concurrency/utils.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/fuzzy/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/fuzzy/_extract_json.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/fuzzy/_fuzzy_json.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/fuzzy/_fuzzy_match.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/fuzzy/_fuzzy_validate.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/fuzzy/_string_similarity.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/fuzzy/_to_dict.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/ln/types.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/models/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/models/field_model.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/models/hashable_model.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/models/model_params.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/models/operable_model.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/models/schema_model.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/ReAct/ReAct.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/ReAct/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/ReAct/utils.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/_act/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/_act/act.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/_visualize_graph.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/brainstorm/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/brainstorm/brainstorm.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/brainstorm/prompt.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/builder.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/chat/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/chat/chat.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/communicate/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/communicate/communicate.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/flow.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/instruct/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/instruct/instruct.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/interpret/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/interpret/interpret.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/manager.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/node.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/operate/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/operate/operate.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/parse/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/parse/parse.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/plan/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/plan/plan.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/plan/prompt.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/select/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/select/select.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/select/utils.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/types.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/operations/utils.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/_concepts.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/action/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/action/function_calling.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/action/manager.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/action/tool.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/contracts.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/forms/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/forms/base.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/forms/flow.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/forms/form.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/forms/report.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/generic/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/generic/element.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/generic/event.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/generic/log.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/generic/pile.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/generic/processor.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/generic/progression.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/graph/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/graph/edge.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/graph/graph.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/graph/node.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/ids.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/mail/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/mail/exchange.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/mail/mail.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/mail/mailbox.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/mail/manager.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/mail/package.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/action_request.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/action_response.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/assistant_response.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/base.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/instruction.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/manager.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/message.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/system.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/templates/README.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/operatives/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/operatives/operative.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/operatives/step.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/protocols/types.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/py.typed +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/broadcaster.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/api_calling.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/endpoint.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/endpoint_config.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/header_factory.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/match_endpoint.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/mcp/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/mcp/wrapper.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/anthropic_.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/claude_code_cli.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/exa_.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/nvidia_nim_.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/oai_.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/ollama_.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/perplexity_.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/connections/providers/types.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/hooks/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/manager.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/rate_limited_processor.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/resilience.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/third_party/README.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/third_party/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/third_party/anthropic_models.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/third_party/claude_code.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/third_party/exa_models.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/third_party/openai_model_names.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/third_party/pplx_models.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/token_calculator.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/service/types.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/session/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/session/branch.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/session/prompts.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/session/session.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/tools/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/tools/base.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/tools/file/__init__.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/tools/file/reader.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/tools/types.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/lionagi/utils.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/main.py +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/mkdocs.yml +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/scripts/README.md +0 -0
- {lionagi-0.17.6 → lionagi-0.17.8}/scripts/update_openai_models.py +0 -0
@@ -4,12 +4,14 @@ This folder contains a lightweight benchmark runner for lionagi.ln.concurrency.
|
|
4
4
|
It establishes a baseline for core patterns to help catch regressions.
|
5
5
|
|
6
6
|
How to run (concurrency)
|
7
|
+
|
7
8
|
- Asyncio backend (default):
|
8
9
|
- `python -m benchmarks.concurrency_bench`
|
9
10
|
- Trio backend:
|
10
11
|
- `python -m benchmarks.concurrency_bench --backend trio`
|
11
12
|
|
12
13
|
Options
|
14
|
+
|
13
15
|
- `--backend {asyncio,trio}`: Select async backend (default: asyncio)
|
14
16
|
- `--repeat N`: Repeat each scenario N times and report aggregates (default: 3)
|
15
17
|
- `--json`: Also print JSON to stdout (besides saving to file)
|
@@ -17,6 +19,7 @@ Options
|
|
17
19
|
- `--compare BASELINE.json`: Compare against a previous run and show deltas
|
18
20
|
|
19
21
|
How to run (ln functions)
|
22
|
+
|
20
23
|
- Asyncio backend (default):
|
21
24
|
- `python -m benchmarks.ln_bench`
|
22
25
|
- Trio backend:
|
@@ -25,11 +28,15 @@ How to run (ln functions)
|
|
25
28
|
Options are the same as the concurrency runner.
|
26
29
|
|
27
30
|
Results
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
+
|
32
|
+
- Results are saved under `benchmarks/results/<timestamp>-<backend>.json`
|
33
|
+
(concurrency) and `benchmarks/results/ln-<timestamp>-<backend>.json` (ln
|
34
|
+
functions) by default.
|
35
|
+
- Each scenario reports min/mean/median/max (seconds) over the configured
|
36
|
+
repeats.
|
31
37
|
|
32
38
|
Scenarios (initial set)
|
39
|
+
|
33
40
|
- gather_100_yield: 100 tasks, each yields once (sleep 0)
|
34
41
|
- bounded_map_2000_limit_100: 2000 items, async no-op mapper, limit=100
|
35
42
|
- completion_stream_1000_limit_100: 1000 awaitables streamed with limit=100
|
@@ -38,8 +45,11 @@ Scenarios (initial set)
|
|
38
45
|
- taskgroup_start_1000_noop: start 1000 short-lived tasks
|
39
46
|
|
40
47
|
Notes
|
48
|
+
|
41
49
|
- Fuzzy utilities benches are available:
|
42
50
|
- `python -m benchmarks.fuzzy_bench` (JSON parsing, extraction, key matching)
|
43
51
|
- Outputs to `benchmarks/results/fuzzy-<timestamp>.json`
|
44
|
-
- These are micro-benchmarks intended to detect relative changes, not absolute
|
45
|
-
|
52
|
+
- These are micro-benchmarks intended to detect relative changes, not absolute
|
53
|
+
throughput.
|
54
|
+
- Run on a quiet machine for less noisy results. Prefer CI runners for
|
55
|
+
consistency.
|
@@ -0,0 +1,224 @@
|
|
1
|
+
# Agentic AI Framework Performance Benchmarks
|
2
|
+
|
3
|
+
Rigorous apples-to-apples performance comparison of major Python agentic AI
|
4
|
+
frameworks, focusing on real-world cold-start performance and memory efficiency.
|
5
|
+
|
6
|
+
## Executive Summary
|
7
|
+
|
8
|
+
- LionAGI delivers 25-45% faster cold-start performance than the next-best
|
9
|
+
framework (LangGraph) across composites, up to ~4.9× faster on a realistic
|
10
|
+
data-processing workload, and ~36% lower memory (RSS).
|
11
|
+
|
12
|
+
### Key Results (20 runs per test • Python 3.10.15)
|
13
|
+
|
14
|
+
- **Cold Composite Performance** (geomean of medians; excludes imports): LionAGI
|
15
|
+
**233 ms** vs LangGraph **421 ms** → **LangGraph is 81% slower** (**LionAGI is
|
16
|
+
45% faster**)
|
17
|
+
- **Memory Efficiency**: LionAGI 40.5MB RSS vs LangGraph 63.3MB (36% lower)
|
18
|
+
- **Consistency**: First-place performance in 4/4 cold-start categories
|
19
|
+
- **Orchestrator Setup**: LionAGI 299ms vs LangGraph 410ms (37% faster)
|
20
|
+
- **Operational impact**: ~**188 ms saved per cold start** vs LangGraph (≈ **3.1
|
21
|
+
min saved per 1k cold starts**)
|
22
|
+
|
23
|
+
## Headline Performance Metrics
|
24
|
+
|
25
|
+
### Cold Composite Performance (Geometric Mean of medians, excludes imports)
|
26
|
+
|
27
|
+
| Rank | Framework | Composite (ms) | RSS (MB) | USS (MB) | vs Best |
|
28
|
+
| ---- | -------------- | -------------- | -------- | -------- | ------------------ |
|
29
|
+
| 1 | **LionAGI** | 233.0 | 40.5 | 36.0 | — |
|
30
|
+
| 2 | LangGraph | 420.8 | 63.3 | 54.0 | **+80.6% slower** |
|
31
|
+
| 3 | LlamaIndex | 803.0 | 130.1 | 113.8 | **+244.6% slower** |
|
32
|
+
| 4 | AutoGen | 1243.7 | 142.6 | 120.4 | **+433.6% slower** |
|
33
|
+
| 5 | LangChain Core | 2260.4 | 248.8 | 188.4 | **+870.1% slower** |
|
34
|
+
|
35
|
+
**Notes** • Composite excludes `imports` because sub-millisecond baselines
|
36
|
+
(e.g., lazy imports) are dominated by timer granularity. • Conservative
|
37
|
+
composite (excluding `data_processing`): LionAGI **322.5 ms** vs LangGraph
|
38
|
+
**417.2 ms** → **LangGraph is 29% slower** (**LionAGI is 23% faster**).
|
39
|
+
|
40
|
+
## Detailed Benchmark Results
|
41
|
+
|
42
|
+
_Process isolation per run • Module cache cleared • CPU pinning enabled_
|
43
|
+
|
44
|
+
### Orchestrators (Cold) - Production-Ready State
|
45
|
+
|
46
|
+
| Framework | Median (ms) | P95 (ms) | Range | RSS (MB) | vs Best |
|
47
|
+
| -------------- | ----------- | -------- | --------- | -------- | ------- |
|
48
|
+
| **LionAGI** | 299.4 | 347.1 | 284-412 | 45.7 | — |
|
49
|
+
| LangGraph | 410.1 | 447.0 | 370-509 | 62.9 | +37.0% |
|
50
|
+
| LlamaIndex | 838.3 | 932.2 | 781-972 | 143.0 | +180.0% |
|
51
|
+
| AutoGen | 1257.0 | 1347.8 | 1217-1502 | 142.8 | +319.8% |
|
52
|
+
| LangChain Core | 2302.8 | 2846.5 | 2123-2978 | 248.0 | +669.1% |
|
53
|
+
|
54
|
+
### Basic Primitives (Cold) - Core Building Blocks
|
55
|
+
|
56
|
+
| Framework | Median (ms) | P95 (ms) | Range | RSS (MB) | vs Best |
|
57
|
+
| -------------- | ----------- | -------- | --------- | -------- | ------- |
|
58
|
+
| **LionAGI** | 326.6 | 377.6 | 304-391 | 47.6 | — |
|
59
|
+
| LangGraph | 409.0 | 540.0 | 376-649 | 63.8 | +25.2% |
|
60
|
+
| LlamaIndex | 752.8 | 855.2 | 681-935 | 95.7 | +130.5% |
|
61
|
+
| AutoGen | 1228.9 | 1448.3 | 1156-1577 | 144.1 | +276.3% |
|
62
|
+
| LangChain Core | 2267.0 | 2658.1 | 2070-3209 | 248.4 | +594.1% |
|
63
|
+
|
64
|
+
### Workflow Setup (Cold) - Multi-Component Coordination
|
65
|
+
|
66
|
+
| Framework | Median (ms) | P95 (ms) | Range | RSS (MB) | vs Best |
|
67
|
+
| -------------- | ----------- | -------- | --------- | -------- | ------- |
|
68
|
+
| **LionAGI** | 343.0 | 421.5 | 307-576 | 48.4 | — |
|
69
|
+
| LangGraph | 432.8 | 510.2 | 408-696 | 64.1 | +26.2% |
|
70
|
+
| LlamaIndex | 814.3 | 890.7 | 786-996 | 141.0 | +137.4% |
|
71
|
+
| AutoGen | 1248.5 | 1340.9 | 1213-1558 | 141.4 | +264.0% |
|
72
|
+
| LangChain Core | 2203.8 | 2579.5 | 2083-2720 | 251.4 | +542.5% |
|
73
|
+
|
74
|
+
### Data Processing (Cold) - Realistic Workload
|
75
|
+
|
76
|
+
| Framework | Median (ms) | P95 (ms) | Range | RSS (MB) | vs Best |
|
77
|
+
| -------------- | ----------- | -------- | --------- | -------- | -------- |
|
78
|
+
| **LionAGI** | 87.8 | 116.5 | 83-131 | 20.2 | — |
|
79
|
+
| LangGraph | 432.0 | 509.8 | 403-541 | 62.4 | +392.0% |
|
80
|
+
| LlamaIndex | 808.9 | 894.8 | 779-902 | 140.7 | +821.3% |
|
81
|
+
| AutoGen | 1240.5 | 1391.1 | 1162-1541 | 142.1 | +1312.9% |
|
82
|
+
| LangChain Core | 2269.0 | 2600.5 | 2084-2841 | 247.4 | +2484.3% |
|
83
|
+
|
84
|
+
## Performance Analysis
|
85
|
+
|
86
|
+
### Memory Efficiency
|
87
|
+
|
88
|
+
- **LionAGI**: 40.5 MB average RSS (36.0 MB USS) — most memory efficient
|
89
|
+
- **LangGraph**: 63.3 MB average RSS (**+56% vs LionAGI**)
|
90
|
+
- **LlamaIndex**: 130.1 MB average RSS (**+221%**)
|
91
|
+
- **AutoGen**: 142.6 MB average RSS (**+252%**)
|
92
|
+
- **LangChain Core**: 248.8 MB average RSS (**+514%**)
|
93
|
+
|
94
|
+
### Consistency & Reliability
|
95
|
+
|
96
|
+
- **Low variability**: See CSV for MAD/stdev; LionAGI shows tight ranges in
|
97
|
+
cold-path categories.
|
98
|
+
- **P95 performance**: Sub-400 ms P95 in most cold categories (orchestrators &
|
99
|
+
primitives).
|
100
|
+
- **Range stability**: Small min-max spans across cold categories indicate
|
101
|
+
predictable cold behavior.
|
102
|
+
|
103
|
+
## Feature Parity Matrix
|
104
|
+
|
105
|
+
All frameworks tested with equivalent, normalized workloads:
|
106
|
+
|
107
|
+
| Framework | Object Built | Core-Only | LLM Used | Network | Notes |
|
108
|
+
| -------------- | ---------------------- | --------- | -------- | ------- | ------------------------- |
|
109
|
+
| LionAGI | Session() | Yes | None | No | Minimal runtime container |
|
110
|
+
| LangGraph | StateGraph.compile() | Yes | None | No | One-node identity graph |
|
111
|
+
| LangChain Core | PromptTemplate\|Lambda | Yes | None | No | LCEL chain, no community |
|
112
|
+
| LlamaIndex | SimpleChatEngine | Yes | MockLLM | No | Built-in mock, no network |
|
113
|
+
| AutoGen | ConversableAgent | Yes | None | No | LLM disabled |
|
114
|
+
|
115
|
+
## Methodology
|
116
|
+
|
117
|
+
### Measurement Approach
|
118
|
+
|
119
|
+
- **Cold Mode**: Full import + object construction (serverless scenario)
|
120
|
+
- **Process Isolation**: Fresh Python interpreter per measurement
|
121
|
+
- **Statistical Rigor**: Median, P95, MAD, trimmed mean for outlier resistance
|
122
|
+
- **Memory Tracking**: RSS (Resident Set Size) and USS (Unique Set Size)
|
123
|
+
|
124
|
+
### Environmental Controls
|
125
|
+
|
126
|
+
- CPU pinning for reduced scheduler noise
|
127
|
+
- Deterministic hashing (PYTHONHASHSEED=0)
|
128
|
+
- Module cache clearing between runs
|
129
|
+
- API keys blanked to prevent network calls
|
130
|
+
- 30-second timeout to prevent hangs
|
131
|
+
|
132
|
+
### Excluded from Headlines
|
133
|
+
|
134
|
+
- **Import-only tests**: Dominated by lazy loading and timer granularity
|
135
|
+
- **Sub-millisecond measurements**: Below meaningful timer resolution
|
136
|
+
|
137
|
+
## Reproducing Results
|
138
|
+
|
139
|
+
```bash
|
140
|
+
# Clone repository
|
141
|
+
git clone https://github.com/lion-agi/lionagi.git
|
142
|
+
cd lionagi/benchmarks/comparisons
|
143
|
+
|
144
|
+
# Install dependencies
|
145
|
+
uv add --dev langgraph langchain-core llama-index-core pyautogen psutil
|
146
|
+
# (Recommended) Pin exact versions for reproducibility
|
147
|
+
uv lock
|
148
|
+
# Or export a frozen requirements file:
|
149
|
+
uv export --frozen --format requirements.txt > bench.requirements.txt
|
150
|
+
|
151
|
+
# Run full benchmark (20 runs, ~15 minutes)
|
152
|
+
uv run python benchmark_professional.py --runs 20 --report
|
153
|
+
|
154
|
+
# Generate report
|
155
|
+
uv run python generate_benchmark_report.py
|
156
|
+
|
157
|
+
# Quick test (3 runs)
|
158
|
+
uv run python benchmark_professional.py --runs 3
|
159
|
+
```
|
160
|
+
|
161
|
+
### Environment & Versions
|
162
|
+
|
163
|
+
Test environment and package versions used for benchmarks:
|
164
|
+
|
165
|
+
```
|
166
|
+
Hardware: Apple M2 Max, 32GB RAM
|
167
|
+
OS: macOS (Darwin 24.6.0)
|
168
|
+
Python: 3.10.15
|
169
|
+
LionAGI: v0.17.7
|
170
|
+
langgraph: 0.6.7
|
171
|
+
langchain-core: 0.3.76
|
172
|
+
llama-index-core: 0.14.2
|
173
|
+
pyautogen: 0.10.0
|
174
|
+
psutil: 7.1.0
|
175
|
+
```
|
176
|
+
|
177
|
+
## Use Case Recommendations
|
178
|
+
|
179
|
+
### When to Choose LionAGI
|
180
|
+
|
181
|
+
- **Serverless/Lambda Functions**: 233ms cold start vs 421ms+ for alternatives
|
182
|
+
- **Memory-Constrained Environments**: 36% lower memory footprint
|
183
|
+
- **High-Frequency Operations**: Consistent sub-100ms data processing
|
184
|
+
- **Cost-Sensitive Deployments**: Lower memory = more concurrent executions
|
185
|
+
|
186
|
+
### Framework Selection Guide
|
187
|
+
|
188
|
+
| Use Case | Recommended | Reasoning |
|
189
|
+
| --------------------- | ----------- | ------------------------------------ |
|
190
|
+
| Serverless/Lambda | LionAGI | Fastest cold start (233ms composite) |
|
191
|
+
| Memory-Limited | LionAGI | Lowest footprint (40.5MB) |
|
192
|
+
| State Machines | LangGraph | Purpose-built for graph workflows |
|
193
|
+
| Document RAG | LlamaIndex | Specialized document processing |
|
194
|
+
| Multi-Agent Chat | AutoGen | Conversation-focused patterns |
|
195
|
+
| Ecosystem Integration | LangChain | Extensive tool library |
|
196
|
+
|
197
|
+
## Summary
|
198
|
+
|
199
|
+
The benchmarks show LionAGI's performance characteristics in cold-start
|
200
|
+
scenarios:
|
201
|
+
|
202
|
+
- **25-45% faster** cold-start performance vs next-best across composites
|
203
|
+
- Up to **~4.9× faster** on the data-processing workload
|
204
|
+
- **36% lower memory usage** (40.5MB vs 63.3MB for LangGraph)
|
205
|
+
- **Consistent performance** with tight P95 bounds and low variance
|
206
|
+
- **Fast orchestrator initialization** at 299ms median
|
207
|
+
|
208
|
+
These characteristics are relevant for:
|
209
|
+
|
210
|
+
- Serverless and edge deployments where cold-start performance impacts costs
|
211
|
+
- Applications with memory constraints or high concurrency requirements
|
212
|
+
- Use cases requiring predictable performance characteristics
|
213
|
+
|
214
|
+
---
|
215
|
+
|
216
|
+
### Data Files
|
217
|
+
|
218
|
+
- **Summary**: `benchmark_summary_*.csv` - Statistical aggregates
|
219
|
+
- **Detailed**: `benchmark_detailed_*.csv` - Individual run data
|
220
|
+
- **Full Export**: `benchmark_results_*.json` - Complete metadata
|
221
|
+
|
222
|
+
_Last updated: September 2025 • LionAGI v0.17.7 • Python 3.10.15_ _Benchmark
|
223
|
+
version: Apples-to-Apples Framework Benchmark v2.0_ _(composite excludes
|
224
|
+
imports; see Methodology)_
|