Skip to main content

FluxLoop SDK for agent instrumentation and tracing

Project description

FluxLoop SDK

FluxLoop SDK for agent instrumentation and tracing.

Installation

pip install fluxloop

Quick Start

from fluxloop import trace, FluxLoopClient

# Initialize the client
client = FluxLoopClient()

# Use the trace decorator
@trace()
def my_agent_function(prompt: str):
    # Your agent logic here
    return result

Features

  • 🔍 Automatic Tracing: Instrument your agent code with simple decorators
  • 📊 Rich Context: Capture inputs, outputs, and metadata
  • 🔄 Async Support: Works with both sync and async functions
  • 🎯 Framework Integration: Built-in support for LangChain and LangGraph

Documentation

For detailed documentation, visit https://docs.fluxloop.dev

License

Apache License 2.0 - see LICENSE file for details

Framework Integration: Decorator Ordering and Safe Instrumentation

When integrating FluxLoop with external agent frameworks (e.g., ChatKit, LangChain), follow these rules to avoid type conflicts and ensure observations are captured reliably.

  • Outermost framework wrapper: If a framework provides its own decorator/wrapper that transforms a plain function into a framework-specific object (e.g., a Tool), that decorator MUST be the outermost (top) decorator. This preserves the type the framework expects.
  • FluxLoop instrumentation inside: Place FluxLoop decorators inside (below) the framework decorator, or instrument from within the function body using the SDK context APIs.

Two safe patterns:

  • Pattern A (safest, framework-agnostic): instrument inside the function body

    • Use get_current_context() and push/pop an ObservationData manually around your logic. This keeps signatures and framework typing unchanged.

    • Example (tool function):

      from fluxloop import get_current_context
      from fluxloop.models import ObservationData, ObservationType
      
      async def my_tool(param: str) -> dict:
          fl_ctx = get_current_context()
          obs = None
          if fl_ctx and fl_ctx.is_enabled():
              obs = ObservationData(
                  type=ObservationType.TOOL,
                  name="tool.my_tool",
                  input={"args": {"param": param}},
              )
              fl_ctx.push_observation(obs)
      
          try:
              result = {"result": do_work(param)}
              if obs:
                  obs.output = result
              return result
          except Exception as e:
              if obs:
                  obs.error = str(e)
              raise
          finally:
              if fl_ctx and obs:
                  fl_ctx.pop_observation()
      
  • Pattern B (stacking decorators): framework outermost, FluxLoop inside

    • Example with a framework tool decorator:

      @framework_tool_decorator(...)
      @fluxloop.tool(name="tool.my_tool")
      async def my_tool(...):
          ...
      
    • Important: If you reverse the order (FluxLoop outside), the framework may see a plain function instead of its expected type and raise errors like "Unknown tool type".

LLM/streaming calls:

  • For LLM calls (including async generators/streams), either:
    • Wrap the call site in a small helper decorated with @fluxloop.prompt(...), or
    • Use with fluxloop.instrument("prompt.name"): around the portion that produces model output, ensuring it runs inside the current FluxLoop context.

These patterns guarantee observations are captured (tool, generation) while keeping the external framework’s type system intact.

Project details


Download files

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

Source Distribution

fluxloop-0.1.3.tar.gz (26.3 kB view details)

Uploaded Source

Built Distribution

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

fluxloop-0.1.3-py3-none-any.whl (24.0 kB view details)

Uploaded Python 3

File details

Details for the file fluxloop-0.1.3.tar.gz.

File metadata

  • Download URL: fluxloop-0.1.3.tar.gz
  • Upload date:
  • Size: 26.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for fluxloop-0.1.3.tar.gz
Algorithm Hash digest
SHA256 8dc2c3a700852baf01135670b10956f7cd4f774a85bbd848530f1233e76ddeba
MD5 910f05620b85e93463e7f3203857571e
BLAKE2b-256 ccd7adea6ed041beefd7c4bbaeafdbd2f4b57db6047aeb80f400735efb93e3e4

See more details on using hashes here.

File details

Details for the file fluxloop-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: fluxloop-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 24.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for fluxloop-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f3559a2edd058586c1e6ca5e6b45734b011b171d7fc285a3fffa8b11031be09c
MD5 fdacd2122f569f93b3a615032e0cec9a
BLAKE2b-256 2b61f24b5402fb8ad0187f4aa35b62910db944dd63c3ca5558ffb9e707187043

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