{"id":37742789,"url":"https://github.com/happyapplehorse/agere","last_synced_at":"2026-01-16T14:12:12.811Z","repository":{"id":208230399,"uuid":"719021887","full_name":"happyapplehorse/agere","owner":"happyapplehorse","description":"The tool is used for building and driving workflows specifically tailored for AI initiatives. It can be used to construct AI agents.","archived":false,"fork":false,"pushed_at":"2024-07-03T11:45:23.000Z","size":143,"stargazers_count":161,"open_issues_count":0,"forks_count":13,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-12-22T00:37:48.842Z","etag":null,"topics":["agent","ai","framwork","python"],"latest_commit_sha":null,"homepage":"https://happyapplehorse.github.io/agere/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/happyapplehorse.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":null},"created_at":"2023-11-15T09:31:52.000Z","updated_at":"2025-12-04T09:27:26.000Z","dependencies_parsed_at":"2024-05-05T13:37:35.044Z","dependency_job_id":"559bf14f-fd23-406f-84d2-65e67894c9bd","html_url":"https://github.com/happyapplehorse/agere","commit_stats":null,"previous_names":["happyapplehorse/agere"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/happyapplehorse/agere","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/happyapplehorse%2Fagere","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/happyapplehorse%2Fagere/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/happyapplehorse%2Fagere/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/happyapplehorse%2Fagere/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/happyapplehorse","download_url":"https://codeload.github.com/happyapplehorse/agere/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/happyapplehorse%2Fagere/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: 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":["agent","ai","framwork","python"],"created_at":"2026-01-16T14:12:08.955Z","updated_at":"2026-01-16T14:12:12.805Z","avatar_url":"https://github.com/happyapplehorse.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![GitHub License](https://img.shields.io/github/license/happyapplehorse/agere)\n![PyPI - Version](https://img.shields.io/pypi/v/agere)\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/happyapplehorse/agere/mkdocs.yml?logo=materialformkdocs\u0026label=docs)\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/happyapplehorse/agere/python-publish.yml?logo=pypi)\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/happyapplehorse/agere/codecov.yml?logo=pytest\u0026label=test)\n[![codecov](https://codecov.io/gh/happyapplehorse/agere/graph/badge.svg?token=01PNCN77SX)](https://codecov.io/gh/happyapplehorse/agere)\n![Static Badge](https://img.shields.io/badge/dependencies-zero-brightgreen)\n\n# Agere\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/happyapplehorse/happyapplehorse-assets/blob/main/imgs/agere_logo_transparent.png\" alt=\"Logo\"\u003e\n\u003c/p \u003e\n\nAgere is a lightweight framework for building agents, with no third-party dependencies. Its features are universality and complete customizability.\nIt simplifies the process of building agents with complex logic by breaking down a complicated workflow into a series of independent, small steps,\nwhich also facilitates future expansion or modification of its functionalities.\n\n\u003e Agere is the Latin etymology for \"agent\", frequently translated as \"to act\" or \"to do\", with the implication of \"driving\" and \"propelling something forward\".\n\n# About\nAgere utilizes a model of 'node-edge' to construct workflows. \nTasks are divided into 'node-edge'—nodes connected by edges, grouping each node with its subsequent actions.\nOne of the benefits of using edge nodes is that it makes the logic more coherent; when you define a node, you also specify the following edge.\nAnother advantage is that it allows for more direct and flexible parameter transmission between different nodes. You can pass any form of parameters as needed directly\nin the call without having to use a unified context variable. Additionally, implementing conditional edges becomes simpler and more straightforward.\n\nAgere employs Jobs and handlers as the basic types of task nodes. By defining Jobs (classes) and handlers (functions or methods), it breaks down the various parts of\nan agent. The nodes are reusable and also facilitate future expansions or modifications of functionalities.\nWithin a Job, you can submit new Jobs or call handlers.\nIn handlers, you can also call other handlers or submit Jobs. Both Jobs and handlers fall under the category of TaskNode, i.e., task nodes, forming a tree structure that\ntracks the relationships and running states of tasks. Within these nodes, you can add callbacks to execute at different times, such as at the start or end of a task,\nupon encountering errors, or when being terminated, among others.\n\nIn constructing workflows, Agere possesses the following features:\n- **Multitasking**: Agere enables multiple tasks to run in parallel. \n- **Strategic Timing**: Task states at different moments can be controlled through callbacks. \n- **Branching Out**: Different states of a node can be linked, for example, connecting edges to a node's start, end, or termination states. \n- **Tailor-made**: The passing of parameters between nodes is more flexible, with each node being able to customize parameter transmission.\n\nAgere emphasizes universality, operating independently of any tools, specific interfaces, or forms, and is not coupled with any tool. This allows it to invoke any\ntool easily, facilitating smooth collaboration and integration with other tools.\n\nThe structure of agere is as follows:\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/happyapplehorse/happyapplehorse-assets/main/agere/agere_hierarchical_structure.png\" width=\"600\" alt=\"Agere Hierarchical Structure\"\u003e\n\u003c/p\u003e\n\n```\nAgere  \n  ├─── Commander(core functionality)\n  ├─── Utils\n  │      ├─── llm_async_converters\n  │      ├─── dispacher\n  │      ├─── prompt_template\n  │      ├─── context\n  │      ├─── tool\n  │      └─── ...\n  └─── Addons\n         ├─── qdrant_vector\n         ├─── text_splitter\n         └─── ...\n```\n\n# Why agere\n- Lightweight, streamlined yet important features.\n- Full customizability, allowing flexible customization of underlying functionalities.\n- Universality, not dependent on any specific tool and can work in conjunction with any tool.\n- Minimal dependencies, with core functionalities free of third-party dependencies.\n  This reduces coupling with specific technologies in the context of rapid technological iterations.\n\n# Installation\nAgere has no third-party dependencies.\n```bash\npip install agere\n```\n\n# How to Use\nDefine Jobs and/or handlers **➔** Create a commander to run them\n\n[Getting started](https://happyapplehorse.github.io/agere/getting_started/)  \n[Guide](https://happyapplehorse.github.io/agere/guide/framework/)  \n🎬[Tutorial-zh](https://www.bilibili.com/video/BV1q6421c71z) \n\n## Agere Workflow Demonstration Example\n![Agere workflow demonstration animation](https://raw.githubusercontent.com/happyapplehorse/happyapplehorse-assets/main/agere/agere_getting_started_animation.gif)\n\nAbove is a simple demonstration animation of a conversational agent's workflow that can call upon tools,\nbriefly illustrating the principles of agere.\nIn this agent, we want to enable GPT to send messages to the user while also calling tools at the same time (currently, GPT can only choose to either send messages to\nthe user or call tools, but cannot do both simultaneously).\nWe have defined two Jobs: a ChatJob, which is used to initiate a new conversation, and a ResponseJob, which is used to receive the content of GPT's replies.\nAdditionally, we defined three handlers: a response_handler, for parsing GPT's reply messages; a user_handler, for displaying messages sent to the user; and a\ntool_call_handler, for executing function calls. Furthermore, we added a callback to the ResponseJob to initiate the next round of conversation upon its completion.\nLastly, a commander is utilized to execute it.\nFor a detailed tutorial on it, please see [Getting started](https://happyapplehorse.github.io/agere/getting_started/).\n\n## Architecture Overview\n![agere_architecture](https://raw.githubusercontent.com/happyapplehorse/happyapplehorse-assets/main/agere/agere_architecture.png)\n\n## Basic Concepts\n\n### [TaskNode](https://happyapplehorse.github.io/agere/guide/tasknode/)\nIncludes Commander, Job, and handler. Each TaskNode has one parent and 0-n children.\nThese nodes form a tree structure, where each node determines its own task completion\nbased on the status of all its child nodes.\n\n### [Commander](https://happyapplehorse.github.io/agere/guide/commander/)\nThe commander is a node used for automatically scheduling and executing tasks, typically serving as the root node for all other nodes. Once you have defined some\nJobs and handlers, by assigning the initial entry work to it, it can automatically organize and execute these tasks for you.\n\n### [Job](https://happyapplehorse.github.io/agere/guide/job/)\nA Job is an object that packages a specific task along with the resources required to execute that task. It's as if it's reporting to a higher authority,\nsaying: \"I have such and such task to do, involving these specific actions. Here are the materials you need, the task is yours now, the rest is not my concern.\"\nThat's the gist of it.\n\n### [handler](https://happyapplehorse.github.io/agere/guide/handler/)\nA handler is a function or method, similar to a coroutine function, that returns a handler object. This handler object can be called by other task nodes or can\nbe directly awaited. It's as if it's delegating to a subordinate, saying: \"I have this task, go and do it for me.\"\n\n### [Callback](https://happyapplehorse.github.io/agere/guide/callback/)\nCallbacks can be added at various stages of a task, such as: task start, task completion,\nencountering exceptions, task termination, Commander ending, etc.\n\n# License\nThis project is licensed under the [MIT License](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhappyapplehorse%2Fagere","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhappyapplehorse%2Fagere","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhappyapplehorse%2Fagere/lists"}