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 anObservationDatamanually 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.
- Wrap the call site in a small helper decorated with
These patterns guarantee observations are captured (tool, generation) while keeping the external framework’s type system intact.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fluxloop-0.1.4.tar.gz.
File metadata
- Download URL: fluxloop-0.1.4.tar.gz
- Upload date:
- Size: 26.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ceb85bb70b044e479c564eb1323423c8791b564be63b01de0ded84ba8140df17
|
|
| MD5 |
00151606d49fa1fb129fef904caceeda
|
|
| BLAKE2b-256 |
a892f155b166edbb7118072df97b0773bed74a84fe1c7c5f242f16ac69ecce6a
|
File details
Details for the file fluxloop-0.1.4-py3-none-any.whl.
File metadata
- Download URL: fluxloop-0.1.4-py3-none-any.whl
- Upload date:
- Size: 24.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a71e303f8479a60593627280a6a3fc79f6734a4e2b3ac394bcaec98bb9b2cd8
|
|
| MD5 |
c475f582278d8463bcb9691029e61d34
|
|
| BLAKE2b-256 |
180fe63739bd19be433020638c7ce656b433ce5a8798f560ebbd2bcc6b3241ee
|