Skip to main content

This project provides adaptors and methods to integrate with the Quraite platform

Project description

Quraite Python SDK

Python 3.10+ License

The Quraite Python SDK provides adapters and methods to integrate AI agent frameworks with the Quraite platform. It offers a unified interface for different agent frameworks, automatic tracing and observability, and easy local server setup with tunneling capabilities.

Features

  • 🔌 Framework Adapters: Support for multiple AI agent frameworks (LangGraph, Pydantic AI, Agno, Google ADK, OpenAI Agents, Smolagents, AWS Bedrock, Flowise, Langflow, N8n, and more)
  • 📊 Automatic Tracing: Built-in OpenTelemetry-based tracing for agent execution, tool calls, and performance metrics
  • 🚀 Local Server: Easy-to-use local server with optional tunneling (Cloudflare/ngrok) for public access
  • 📦 Standardized Schema: Unified message and response formats across all frameworks
  • 🔍 Observability: Track token usage, costs, latency, and model information for each agent invocation

Installation

Basic Installation

pip install quraite

Framework-Specific Installation

Install with optional dependencies for specific frameworks:

# LangGraph
pip install 'quraite[langgraph]'

# Pydantic AI
pip install 'quraite[pydantic-ai]'

# Agno
pip install 'quraite[agno]'

# Google ADK
pip install 'quraite[google-adk]'

# OpenAI Agents
pip install 'quraite[openai-agents]'

# Smolagents
pip install 'quraite[smolagents]'

# AWS Bedrock
pip install 'quraite[bedrock]'

# Multiple frameworks
pip install 'quraite[langgraph,pydantic-ai,agno]'

Quick Start

Example: LangGraph Agent with Local Server

Pass your compiled LangGraph agent to the adapter and expose it as an HTTP API:

import uvicorn
from dotenv import load_dotenv
from openinference.instrumentation import TracerProvider
from openinference.instrumentation.langchain import LangChainInstrumentor

from quraite.adapters import LanggraphAdapter
from quraite.serve.local_agent import LocalAgentServer
from quraite.tracing.span_exporter import QuraiteInMemorySpanExporter
from quraite.tracing.span_processor import QuraiteSimpleSpanProcessor

load_dotenv()

# Set up tracing (optional)
tracer_provider = TracerProvider()
quraite_span_exporter = QuraiteInMemorySpanExporter()
quraite_span_processor = QuraiteSimpleSpanProcessor(quraite_span_exporter)
tracer_provider.add_span_processor(quraite_span_processor)
LangChainInstrumentor().instrument(tracer_provider=tracer_provider)

# Your compiled LangGraph agent (created elsewhere)
# agent = create_agent(...)

# Wrap with Quraite adapter
adapter = LanggraphAdapter(
    agent_graph=agent,  # Pass your compiled LangGraph agent here
    tracer_provider=tracer_provider,  # Optional: for tracing
)

# Create and start server with Cloudflare tunnel
server = LocalAgentServer(
    wrapped_agent=adapter,
    agent_id="your-agent-id",  # Optional: for Quraite platform integration
)

app = server.create_app(
    port=8080,
    host="0.0.0.0",
    tunnel="cloudflare",  # Options: "cloudflare", "ngrok", or "none"
)

if __name__ == "__main__":
    uvicorn.run("local_server:app", host="0.0.0.0", port=8080)

The server exposes:

  • GET / - Health check endpoint
  • POST /v1/agents/completions - Agent invocation endpoint

When using tunnel="cloudflare" or tunnel="ngrok", your agent will be publicly accessible via the generated URL.

Supported Frameworks

Framework Adapter Installation
LangGraph LanggraphAdapter pip install 'quraite[langgraph]'
Pydantic AI PydanticAIAdapter pip install 'quraite[pydantic-ai]'
Agno AgnoAdapter pip install 'quraite[agno]'
Google ADK GoogleADKAdapter pip install 'quraite[google-adk]'
OpenAI Agents OpenaiAgentsAdapter pip install 'quraite[openai-agents]'
Smolagents SmolagentsAdapter pip install 'quraite[smolagents]'
AWS Bedrock BedrockAgentsAdapter pip install 'quraite[bedrock]'
Flowise FlowiseAdapter Included in base package
Langflow LangflowAdapter Included in base package
N8n N8nAdapter Included in base package
HTTP HttpAdapter Included in base package
LangGraph Server LanggraphServerAdapter pip install 'quraite[langgraph]'

Core Concepts

Adapters

Adapters provide a unified interface (BaseAdapter) for different agent frameworks. Each adapter:

  • Converts framework-specific agents to a standard interface
  • Handles message format conversion
  • Supports optional tracing integration
  • Provides async invocation via ainvoke()

Tracing

The SDK includes built-in OpenTelemetry-based tracing that captures:

  • Agent Trajectory: Complete conversation flow with all messages
  • Tool Calls: Tool invocations with inputs and outputs
  • Performance Metrics: Token usage, costs, latency
  • Model Information: Model name and provider details

To enable tracing:

from openinference.instrumentation import TracerProvider
from quraite.tracing.span_exporter import QuraiteInMemorySpanExporter
from quraite.tracing.span_processor import QuraiteSimpleSpanProcessor

tracer_provider = TracerProvider()
quraite_span_exporter = QuraiteInMemorySpanExporter()
quraite_span_processor = QuraiteSimpleSpanProcessor(quraite_span_exporter)
tracer_provider.add_span_processor(quraite_span_processor)

# Instrument your framework (example for LangChain)
from openinference.instrumentation.langchain import LangChainInstrumentor
LangChainInstrumentor().instrument(tracer_provider=tracer_provider)

Message Schema

The SDK uses a standardized message format:

from quraite.schema.message import (
    UserMessage,
    AssistantMessage,
    ToolMessage,
    SystemMessage,
    MessageContentText,
    ToolCall,
)

# User message
user_msg = UserMessage(
    content=[MessageContentText(text="Hello, world!")]
)

# Assistant message with tool calls
assistant_msg = AssistantMessage(
    content=[MessageContentText(text="I'll calculate that for you.")],
    tool_calls=[
        ToolCall(
            id="call_123",
            name="add",
            arguments={"a": 10, "b": 5}
        )
    ]
)

# Tool message
tool_msg = ToolMessage(
    tool_call_id="call_123",
    content=[MessageContentText(text="15")]
)

Response Format

Agent invocations return an AgentInvocationResponse:

from quraite.schema.response import AgentInvocationResponse

response: AgentInvocationResponse = await adapter.ainvoke(
    input=[user_msg],
    session_id="session-123"
)

# Access trajectory (list of messages)
trajectory = response.agent_trajectory

# Access trace (if tracing enabled)
trace = response.agent_trace

# Access final response text
final_response = response.agent_final_response

Examples

The repository includes comprehensive examples for each supported framework:

Each example includes:

  • Agent implementation
  • Adapter setup
  • Local server configuration
  • Environment variable examples

API Reference

BaseAdapter

All adapters inherit from BaseAdapter:

from quraite.adapters.base import BaseAdapter

class MyAdapter(BaseAdapter):
    async def ainvoke(
        self,
        input: List[AgentMessage],
        session_id: str | None,
    ) -> AgentInvocationResponse:
        # Implementation
        pass

LocalAgentServer

Create a local HTTP server for your agent:

from quraite.serve.local_agent import LocalAgentServer

server = LocalAgentServer(
    wrapped_agent=adapter,
    agent_id="optional-agent-id",
)

app = server.create_app(
    port=8080,
    host="0.0.0.0",
    tunnel="cloudflare",  # or "ngrok" or "none"
)

Development

Setup

# Clone the repository
git clone https://github.com/innowhyte/quraite-python.git
cd quraite-python

# Install dependencies
pip install -e ".[dev,test]"

Running Tests

pytest

Building

make build

Publishing

# Update version
make update-version v=0.4.0

# Build
make build

# Publish to Test PyPI
make publish
# Enter username as "__token__" and then enter your API key

Requirements

  • Python 3.10+
  • See pyproject.toml for full dependency list

License

See LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

For issues, questions, or contributions, please visit the Quraite platform or open an issue on GitHub.

Changelog

See the repository's commit history for detailed changes.

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

quraite-0.1.1.tar.gz (129.2 kB view details)

Uploaded Source

Built Distribution

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

quraite-0.1.1-py3-none-any.whl (165.0 kB view details)

Uploaded Python 3

File details

Details for the file quraite-0.1.1.tar.gz.

File metadata

  • Download URL: quraite-0.1.1.tar.gz
  • Upload date:
  • Size: 129.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.7

File hashes

Hashes for quraite-0.1.1.tar.gz
Algorithm Hash digest
SHA256 83dfa268b1d0fb5521d0eee09a7dae9ca09ffd9fd25743669ac739cf665a8efa
MD5 f0ff35b562eea50168e226281067f5d1
BLAKE2b-256 a9f364a91fa6cf487dfd91a9f950951cce1201eaa79cfcd41f01d5d8d0da1584

See more details on using hashes here.

File details

Details for the file quraite-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: quraite-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 165.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.7

File hashes

Hashes for quraite-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e8c208f8d32b864698c75bf37978495e60fcc669523de2cb44ee0f43e13e1434
MD5 d30cabf9762fea5263bbb041f8bcf673
BLAKE2b-256 0f3b6bcd001fb2bf34cd90cd4fdcb1ece3f4d74651852afea14f1ba7de0f47c2

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