Skip to main content

AI agent observability and self-healing for Python — trace LLM calls, detect errors, get AI-generated fixes

Project description

risicare

AI agent observability and self-healing for Python.

PyPI version Downloads Python License: MIT

Monitor your AI agents in production. Trace every LLM call, detect errors automatically, and get AI-generated fixes — with a single init().

Quickstart

pip install risicare
import risicare
from openai import OpenAI

# Initialize — auto-instruments all detected LLM providers
risicare.init(
    api_key="rsk-...",
    endpoint="https://app.risicare.ai",
)

client = OpenAI()  # Automatically traced by risicare

@risicare.agent(name="research-agent")
def research(query: str) -> str:
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": query}],
    )
    return response.choices[0].message.content

result = research("What is quantum computing?")
risicare.shutdown()

That's it. Your agent's LLM calls, latency, token usage, and costs now appear in the Risicare dashboard.

Features

  • Auto-instrumentation — Detects and patches LLM providers on init(), zero code changes
  • 12 LLM providers — OpenAI, Anthropic, Google, Mistral, Groq, Cohere, Together, Ollama, HuggingFace, Cerebras, Bedrock, Vertex AI
  • 8 host-detected — DeepSeek, xAI, Fireworks, Baseten, Novita, BytePlus, vLLM, and any OpenAI-compatible API via base_url
  • 10 framework integrations — LangChain, LangGraph, CrewAI, AutoGen, Instructor, LlamaIndex, LiteLLM, DSPy, Pydantic AI, OpenAI Agents
  • Self-healing — Automatic error diagnosis and AI-generated fix suggestions
  • 13 built-in scorers — Faithfulness, relevance, toxicity, hallucination, and more
  • Streaming support — Full streaming trace enrichment with token counts
  • OpenTelemetry bridge — Compatible with existing OTel pipelines
  • Non-blocking — All telemetry is async, never slows your app

LLM Providers

# Auto-patching (default) — detects installed providers automatically
risicare.init(api_key="rsk-...", endpoint="https://app.risicare.ai")

# Disable auto-patching if needed
risicare.init(api_key="rsk-...", endpoint="https://app.risicare.ai", auto_patch=False)

All 12 native providers:

Provider Package Provider Package
OpenAI openai Anthropic anthropic
Google Gemini google-generativeai Mistral mistralai
Cohere cohere Groq groq
Together AI together Ollama ollama
AWS Bedrock boto3 Google Vertex AI google-cloud-aiplatform
Cerebras cerebras-cloud-sdk HuggingFace huggingface-hub

Plus 8 auto-detected via OpenAI base_url: DeepSeek, xAI, Fireworks, Baseten, Novita, BytePlus, vLLM, and any OpenAI-compatible API.

Framework Integrations

pip install risicare[langchain]    # LangChain + LangGraph
pip install risicare[crewai]       # CrewAI
pip install risicare[autogen]      # AutoGen
pip install risicare[instructor]   # Instructor
pip install risicare[litellm]      # LiteLLM
pip install risicare[dspy]         # DSPy
pip install risicare[pydantic-ai]  # Pydantic AI
pip install risicare[llamaindex]   # LlamaIndex
pip install risicare[all]          # Everything

Core API

import risicare

risicare.init(api_key, endpoint)            # Initialize (auto-patches providers)
risicare.shutdown(timeout_ms=5000)          # Flush pending spans and close

@risicare.agent(name="my-agent")            # Trace a function with agent identity
@risicare.trace                             # Trace any function (decorator or CM)
@risicare.session(session_id="sess-1")      # Group traces into user sessions

risicare.report_error(exception)            # Report caught errors for diagnosis
risicare.score(trace_id, "quality", 0.92)   # Record evaluation score [0.0-1.0]

risicare.enable() / risicare.disable()      # Runtime tracing control
risicare.is_enabled()                       # Check tracing status

Decision Phases

Structure your traces to see how your agent thinks, decides, and acts:

@risicare.agent(name="planner")
def plan(query: str):
    @risicare.trace_think
    def analyze():
        return llm.chat("Analyze this query...")

    @risicare.trace_decide
    def choose_action(analysis):
        return llm.chat("Pick the best action...")

    @risicare.trace_act
    def execute(action):
        return run_tool(action)

    analysis = analyze()
    action = choose_action(analysis)
    return execute(action)

Self-Healing

When your agent fails, Risicare automatically:

  1. Classifies the error (154 codes across TOOL, MEMORY, REASONING, OUTPUT, etc.)
  2. Diagnoses the root cause using AI analysis
  3. Generates a fix you can review and apply
try:
    result = my_agent(user_input)
except Exception as e:
    risicare.report_error(e)  # Triggers automatic diagnosis pipeline

Scoring & Evaluation

# Custom scores
risicare.score(trace_id="tr-123", name="quality", value=0.92)

# 13 built-in scorers available in the dashboard:
# faithfulness, answer_relevance, context_precision, context_recall,
# hallucination, toxicity, bias, coherence, conciseness,
# fluency, g_eval, goal_accuracy, summarization

OpenTelemetry

pip install risicare[otel]
risicare.init(api_key="rsk-...", otel_bridge=True)
# Compatible with any OTel-instrumented application

Requirements

  • Python 3.10+

Documentation

License

MIT

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

risicare-0.1.11.tar.gz (135.6 kB view details)

Uploaded Source

Built Distribution

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

risicare-0.1.11-py3-none-any.whl (154.0 kB view details)

Uploaded Python 3

File details

Details for the file risicare-0.1.11.tar.gz.

File metadata

  • Download URL: risicare-0.1.11.tar.gz
  • Upload date:
  • Size: 135.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for risicare-0.1.11.tar.gz
Algorithm Hash digest
SHA256 2432e37cc32f880ffc867e39a3d1600e420db44cf17a3ca1a104759813dca1c8
MD5 e158999cd8142d0b314b273dfe59d307
BLAKE2b-256 b44d531de71d58018f3df054439448e7f63d3030b43f5d52d639a24caefb41fe

See more details on using hashes here.

File details

Details for the file risicare-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: risicare-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 154.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for risicare-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 e194a6eb7bee050e28a0db31a57c1b22561074055837438c87b171219592eab6
MD5 c8e8be9ebbee76e03ef7cf1fe895df96
BLAKE2b-256 4dc161139d895615b0e8eeed7d40bd1531053a8d2c02108e22edbe5d09f5c77d

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