CYNE
𝕏 AppGitHubDiscord
  • CYNE
    • Welcome to CYNE
    • Purpose & Goals
    • Roadmap
    • Tokenomics
  • GETTING STARTED
    • Quickstart Guide
    • FAQ
  • CORE CONCEPT
    • Character Files
    • Agent
    • Data Connectors
    • Dynamic Tasks
  • GUIDES
    • Setup Handbook
    • Expert Features Manual
    • Credential Security
    • Development Environment
Powered by GitBook
LogoLogo

© 2025 CYNE AI. All Rights Reserved.

On this page
Export as PDF
  1. CORE CONCEPT

Data Connectors

Providers are essential components within the CYNE AI framework, enabling agents to access real-time blockchain data, contextual information, and other external data sources.

Overview

In CYNE AI, Providers are designed to:

  • Supply real-time data and contextual insights.

  • Integrate seamlessly with the AgentRuntime framework.

  • Format information for conversational templates, actions, and evaluations.

  • Ensure consistent access to Solana blockchain and other decentralized data.


Core Structure

A Provider in CYNE AI adheres to the following interface structure:

interface Provider {
    get: (
        runtime: IAgentRuntime,
        message: Memory,
        state?: State
    ) => Promise<string>;
}

Providers interact with the agent runtime, message memory, and optional agent state to fetch and process relevant data for users.


Built-in Providers in CYNE AI

1. Time Provider

The Time Provider adds temporal context to interactions, ensuring time-sensitive blockchain operations and market trends are accurately conveyed.

const timeProvider: Provider = {
    get: async (_runtime: IAgentRuntime, _message: Memory) => {
        const currentDate = new Date();
        const currentTime = currentDate.toLocaleTimeString("en-US");
        const currentDateString = currentDate.toDateString();
        return `Current date and time: ${currentDateString}, ${currentTime}`;
    },
};

2. Market Data Provider

The Market Data Provider retrieves real-time token prices, trading volumes, and liquidity statistics from decentralized exchanges.

const marketDataProvider: Provider = {
    get: async (runtime: IAgentRuntime, message: Memory) => {
        const token = message.content.text; // Extract token name or symbol
        const marketData = await runtime.getMarketData(token); // Custom runtime function
        return `The current price of ${token} is ${marketData.price} SOL with a trading volume of ${marketData.volume}.`;
    },
};

3. Wallet Insights Provider

The Wallet Insights Provider allows users to monitor their wallet balances and transaction histories.

const walletInsightsProvider: Provider = {
    get: async (runtime: IAgentRuntime, message: Memory, state?: State) => {
        const walletAddress = state?.userWalletAddress || message.content.text;
        const walletData = await runtime.getWalletData(walletAddress);
        return `Wallet ${walletAddress} has a balance of ${walletData.balance} SOL and holds ${walletData.tokenHoldings.length} tokens.`;
    },
};

4. Risk Analysis Provider

The Risk Analysis Provider evaluates potential risks in smart contracts, liquidity pools, or token investments.

const riskAnalysisProvider: Provider = {
    get: async (runtime: IAgentRuntime, message: Memory) => {
        const contractAddress = message.content.text;
        const riskScore = await runtime.analyzeRisk(contractAddress);
        return `The contract at ${contractAddress} has a risk score of ${riskScore}, indicating ${riskScore > 70 ? "high risk" : "low risk"}.`;
    },
};

5. Whale Tracking Provider

The Whale Tracking Provider monitors large transactions or whale activities on the Solana blockchain, alerting users to significant market movements.

runtime.registerContextProvider(marketDataProvider);

Accessing Providers in Runtime

Providers can be utilized during state composition:

const state = await runtime.composeState(message);

Comprehensive Provider Example

This example demonstrates integrating multiple data sources into a single provider for a holistic response:

const comprehensiveProvider: Provider = {
    get: async (runtime: IAgentRuntime, message: Memory, state?: State) => {
        try {
            const messages = await runtime.messageManager.getMemories({
                roomId: message.roomId,
                count: 5,
            });

            const walletData = await runtime.getWalletData(state?.userWalletAddress);

            const facts = await runtime.messageManager.getMemories({
                roomId: message.roomId,
                tableName: "facts",
                count: 3,
            });

            return `
# Recent Messages
${messages.map((m) => `- ${m.content.text}`).join("\n")}

# Wallet Information
Balance: ${walletData.balance} SOL
Tokens: ${walletData.tokenHoldings.length}

# Relevant Facts
${facts.map((f) => `- ${f.content.text}`).join("\n")}
            `.trim();
        } catch (error) {
            console.error("Provider error:", error);
            return "Unable to fetch context at the moment.";
        }
    },
};

Troubleshooting

Stale Data

  • Implement cache invalidation for outdated data:

const invalidateCache = async (pattern: string) => {
    const keys = await cache.keys(pattern);
    await Promise.all(keys.map((key) => cache.del(key)));
};

Rate Limiting

  • Use exponential backoff for retries:

const backoff = async (attempt: number) => {
    const delay = Math.min(1000 * Math.pow(2, attempt), 10000);
    await new Promise((resolve) => setTimeout(resolve, delay));
};

API Failures

  • Fallback to secondary data sources when primary APIs fail.


Further Reading

  • Agent Runtime Documentation

  • Memory System Documentation

  • Custom Actions Documentation

With CYNE AI, providers bring the power of real-time data and blockchain insights to intelligent, autonomous agents. Start creating your own providers today!

PreviousAgentNextDynamic Tasks

Last updated 3 months ago