Skip to main content

No project description provided

Project description

image

Agently 4 🚀

Build production‑grade AI apps faster, with stable outputs and maintainable workflows.

English Introduction | 中文介绍

license PyPI version Downloads GitHub Stars Twitter Follow WeChat


🔥 Latest Docs | 🚀 5‑minute Quickstart | 💡 Core Features


📚 Quick Links

🤔 Why Agently?

Many GenAI POCs fail in production not because models are weak, but because engineering control is missing:

Common challenge How Agently helps
Output schema drifts, JSON parsing fails Contract‑first output control with output() + ensure_keys
Workflows get complex and hard to maintain TriggerFlow orchestration with to / if / match / batch / for_each
Multi‑turn state becomes unstable Session & Memo with memory, summaries, and persistence strategies
Tool calls are hard to audit Tool logs via extra.tool_logs
Switching models is expensive OpenAICompatible unified model settings

Agently turns LLM uncertainty into a stable, testable, maintainable engineering system.

✨ Core Features

1) 📝 Contract‑first Output Control

Define the structure with output(), enforce critical keys with ensure_keys.

result = (
    agent
    .input("Analyze user feedback")
    .output({
        "sentiment": (str, "positive/neutral/negative"),
        "key_issues": [(str, "issue summary")],
        "priority": (int, "1-5, 5 is highest")
    })
    .start(ensure_keys=["sentiment", "key_issues[*]"])
)

2) ⚡ Structured Streaming (Instant)

Consume structured fields as they are generated.

response = (
    agent
    .input("Explain recursion and give 2 tips")
    .output({"definition": (str, "one sentence"), "tips": [(str, "tip")]})
    .get_response()
)

for msg in response.get_generator(type="instant"):
    if msg.path == "definition" and msg.delta:
        ui.update_definition(msg.delta)
    if msg.wildcard_path == "tips[*]" and msg.delta:
        ui.add_tip(msg.delta)

3) 🧩 TriggerFlow Orchestration

Readable, testable workflows with branching and concurrency.

(
    flow.to(handle_request)
    .if_condition(lambda d: d.value["type"] == "query")
    .to(handle_query)
    .elif_condition(lambda d: d.value["type"] == "order")
    .to(check_inventory)
    .to(create_order)
    .end_condition()
)

4) 🧠 Session & Memo (Multi‑turn Memory)

Quick / Lite / Memo modes with summaries and persistence strategies.

from agently import Agently
from agently.core import Session

agent = Agently.create_agent()
session = Session(agent=agent).configure(
    mode="memo",
    limit={"chars": 6000, "messages": 12},
    every_n_turns=2,
)
agent.attach_session(session)

5) 🔧 Tool Calls + Logs

Tool selection and usage are logged in extra.tool_logs.

@agent.tool_func
def add(a: int, b: int) -> int:
    return a + b

response = agent.input("12+34=?").use_tool(add).get_response()
full = response.get_data(type="all")
print(full["extra"]["tool_logs"])

6) 🌐 Unified Model Settings (OpenAICompatible)

One config for multiple providers and local models.

from agently import Agently

Agently.set_settings(
    "OpenAICompatible",
    {
        "base_url": "https://api.deepseek.com/v1",
        "model": "deepseek-chat",
        "auth": "DEEPSEEK_API_KEY",
    },
)

🚀 Quickstart

Install

pip install -U agently

Requirements: Python >= 3.10, recommended Agently >= 4.0.7.2

5‑minute example

1. Structured output

from agently import Agently

agent = Agently.create_agent()

result = (
    agent.input("Introduce Python in one sentence and list 2 advantages")
    .output({
        "introduction": (str, "one sentence"),
        "advantages": [(str, "advantage")]
    })
    .start(ensure_keys=["introduction", "advantages[*]"])
)

print(result)

2. Workflow routing

from agently import TriggerFlow, TriggerFlowEventData

flow = TriggerFlow()

@flow.chunk
def classify_intent(data: TriggerFlowEventData):
    text = data.value
    if "price" in text:
        return "price_query"
    if "feature" in text:
        return "feature_query"
    if "buy" in text:
        return "purchase"
    return "other"

@flow.chunk
def handle_price(_: TriggerFlowEventData):
    return {"response": "Pricing depends on the plan..."}

@flow.chunk
def handle_feature(_: TriggerFlowEventData):
    return {"response": "Our product supports..."}

(
    flow.to(classify_intent)
    .match()
    .case("price_query")
    .to(handle_price)
    .case("feature_query")
    .to(handle_feature)
    .case_else()
    .to(lambda d: {"response": "What would you like to know?"})
    .end_match()
    .end()
)

print(flow.start("How much does it cost?"))

✅ Is Your App Production‑Ready? — Release Readiness Checklist

Based on teams shipping real projects with Agently, this production readiness checklist helps reduce common risks before release.

Area Check Recommended Practice
📝 Output Stability Are key interfaces stable? Define schemas with output() and lock critical fields with ensure_keys.
⚡ Real‑time UX Need updates while generating? Consume type="instant" structured streaming events.
🔍 Observability Tool calls auditable? Inspect extra.tool_logs for full arguments and results.
🧩 Workflow Robustness Complex flows fully tested? Unit test each TriggerFlow branch and concurrency limit with expected outputs.
🧠 Memory & Context Multi‑turn experience consistent? Define Session/Memo summary, trimming, and persistence policies.
📄 Prompt Management Can logic evolve safely? Version and configure prompts to keep changes traceable.
🌐 Model Strategy Can you switch or downgrade models? Centralize settings with OpenAICompatible for fast provider switching.
🚀 Performance & Scale Can it handle concurrency? Validate async performance in real web‑service scenarios.
🧪 Quality Assurance Regression tests complete? Create fixed inputs with expected outputs for core scenarios.

📈 Who Uses Agently to Solve Real Problems?

"Agently helped us turn evaluation rules into executable workflows and keep key scoring accuracy at 75%+, significantly improving bid‑evaluation efficiency." — Project lead at a large energy SOE

"Agently enabled a closed loop from clarification to query planning to rendering, reaching 90%+ first‑response accuracy and stable production performance." — Data lead at a large energy group

"Agently’s orchestration and session capabilities let us ship a teaching assistant for course management and Q&A quickly, with continuous iteration." — Project lead at a university teaching‑assistant initiative

Your project can be next.
📢 Share your case on GitHub Discussions →

❓ FAQ

Q: How is Agently different from LangChain or LlamaIndex?
A: Agently is built for production. It focuses on stable interfaces (contract‑first outputs), readable/testable orchestration (TriggerFlow), and observable tool calls (tool_logs). It’s a better fit for teams that need reliability and maintainability after launch.

Q: Which models are supported? Is switching expensive?
A: With OpenAICompatible, you can connect OpenAI, Claude, DeepSeek, Qwen and most OpenAI‑compatible endpoints, plus local models like Llama/Qwen. The same business code can switch models without rewrites, reducing vendor lock‑in.

Q: What’s the learning curve? Where should I start?
A: The core API is straightforward—you can run your first agent in minutes. Start with Quickstart, then dive into Output Control and TriggerFlow.

Q: How do I deploy an Agently‑based service?
A: Agently doesn’t lock you into a specific deployment path. It provides async APIs and FastAPI examples. The FastAPI integration example covers SSE, WebSocket, and standard POST.

Q: Do you offer enterprise support?
A: The core framework is open‑source under Apache 2.0. For enterprise support, training, or deep collaboration, contact us via the community.

🧭 Docs Guide (Key Paths)

🤝 Community

📄 License

Agently is licensed under Apache 2.0.


Start building your production‑ready AI apps →
pip install -U agently

Questions? Read the docs or join the community.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agently-4.0.7.4.tar.gz (101.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agently-4.0.7.4-py3-none-any.whl (156.6 kB view details)

Uploaded Python 3

File details

Details for the file agently-4.0.7.4.tar.gz.

File metadata

  • Download URL: agently-4.0.7.4.tar.gz
  • Upload date:
  • Size: 101.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.2 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for agently-4.0.7.4.tar.gz
Algorithm Hash digest
SHA256 714e0f1cd4ac6ab7c520c9dacfd7019f18617385d2e3756998ab271e763e096b
MD5 1da80b3ba453c56d2c5989e8d08a8c50
BLAKE2b-256 435a07aeb27e4599608d558d5e522d50d6714a81102d7a9ca7638e4e85fa58fb

See more details on using hashes here.

File details

Details for the file agently-4.0.7.4-py3-none-any.whl.

File metadata

  • Download URL: agently-4.0.7.4-py3-none-any.whl
  • Upload date:
  • Size: 156.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.2 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for agently-4.0.7.4-py3-none-any.whl
Algorithm Hash digest
SHA256 313672acca2f88da54fa5274d09035751928ec8b617b5fbb5ff16b694446ee60
MD5 8fac72b35d24194f226d258c126d0b5b
BLAKE2b-256 5a54efa1f21b1b506451de9b300f8460c1ed5a3aae018d981bb1a73d3418d697

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page