agentsclimarketplace

Adaline logs

Skill adaline/skills/skills/adaline-logs

Send traces and spans to Adaline for AI agent observability. Use when instrumenting LLM calls, tools, retrieval, embeddings, guardrails, or custom operations.From its SKILL.md

Install
npx -y skills add adaline/skills --skill adaline-logs

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.8 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it

Adaline Logs

Concepts

Adaline Logs captures AI application execution as traces and spans.

Key terms:

  • Trace — one end-to-end user request, agent run, job, or conversation turn
  • Span — one operation inside a trace, such as an LLM call or retrieval step
  • referenceId — caller-supplied ID for stitching traces/spans across services
  • sessionId — groups related traces, such as a chat thread
  • Content type — semantic span payload: Model, ModelStream, Tool, Retrieval, Embeddings, Function, Guardrail, or Other

Configuration

Set these environment variables when credentials are available:

  • ADALINE_API_KEY — workspace API key from Admin > API Keys
  • ADALINE_PROJECT_ID — project ID

Base URL: https://api.adaline.ai/v2

Quick Start

TypeScript SDK

import { Adaline } from '@adaline/client';
import type { LogSpanContent } from '@adaline/api';

const adaline = new Adaline();
const monitor = adaline.initMonitor({ projectId: process.env.ADALINE_PROJECT_ID! });

const trace = monitor.logTrace({ name: 'chat-request', sessionId: 'user_42' });

const span = trace.logSpan({
  name: 'llm-call',
  status: 'unknown',
});

// Run provider call here.

span.update({
  status: 'success',
  content: {
    type: 'Model',
    provider: 'openai',
    model: 'gpt-4o',
    input: JSON.stringify(openaiRequest),
    output: JSON.stringify(openaiResponse),
  } as LogSpanContent,
});
span.end();

trace.update({ status: 'success' });
trace.end();

await monitor.flush();
monitor.stop();

Python SDK

import json
from adaline import Adaline
from adaline_api.models.log_span_content import LogSpanContent
from adaline_api.models.log_span_model_content import LogSpanModelContent

adaline = Adaline()
monitor = adaline.init_monitor(project_id="project_abc123")

trace = monitor.log_trace(name="chat-request", session_id="user_42")
span = trace.log_span(name="llm-call", status="unknown")

# Run provider call here.

span.update({
    "status": "success",
    "content": LogSpanContent(LogSpanModelContent(
        type="Model",
        provider="openai",
        model="gpt-4o",
        input=json.dumps(openai_request),
        output=json.dumps(openai_response),
    )),
})
span.end()

trace.update({"status": "success"})
trace.end()

await monitor.flush()
monitor.stop()

REST API

curl -X POST "https://api.adaline.ai/v2/logs/trace" \
  -H "Authorization: Bearer $ADALINE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "projectId": "project_abc123",
    "trace": {
      "name": "chat-request",
      "status": "success",
      "referenceId": "request-123",
      "startedAt": 1713657600000,
      "endedAt": 1713657602500
    },
    "spans": [
      {
        "name": "llm-call",
        "status": "success",
        "referenceId": "span-123",
        "startedAt": 1713657600100,
        "endedAt": 1713657602400,
        "content": {
          "type": "Model",
          "provider": "openai",
          "model": "gpt-4o",
          "input": "{\"messages\":[]}",
          "output": "{\"choices\":[]}"
        }
      }
    ]
  }'

Integration Patterns

Single-service logging

Use the SDK monitor. Create a trace, create spans from that trace, call end(), then flush before process exit.

Nested spans

const parent = trace.logSpan({ name: 'agent-loop', referenceId: 'loop-1' });
const child = parent.logSpan({ name: 'tool-call' });
child.end();
parent.end();
parent = trace.log_span(name="agent-loop", reference_id="loop-1")
child = parent.log_span(name="tool-call")
child.end()
parent.end()

Distributed tracing

Use REST POST /logs/span or raw SDK logsApi/logs_api with traceReferenceId / trace_reference_id when a different process needs to attach a span to an existing trace.

User feedback and trace metadata

Use PATCH /logs/trace with logTrace.attributes and logTrace.tags operation arrays.

Best Practices

  1. Store provider request/response bodies as JSON strings in span input and output.
  2. Use referenceId on traces and spans so distributed systems can stitch work together.
  3. Use sessionId for multi-turn chats or long-running workflows.
  4. End spans before ending traces; trace end will also end child spans as a safety net.
  5. Await monitor.flush() in Python and TypeScript before shutdown/serverless return.
  6. In Python, pass generated LogSpanContent(...) wrapper objects, not raw dictionaries, for SDK span content.

References

See references/api.md for REST payloads. See references/typescript-sdk.md for TypeScript SDK usage. See references/python-sdk.md for Python SDK usage.

What ships with it: 3 files

8.2 KB alongside SKILL.md

references/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.