मुख्य सामग्री पर जाएं
स्ट्रीमिंग पूरे उत्तर के तैयार होने का इंतज़ार करने के बजाय आउटपुट को टोकन‑दर‑टोकन दिखाती है। उपयोगकर्ता तुरंत प्रगति देख सकते हैं, जो लंबे आउटपुट या इंटरैक्टिव एप्लिकेशन के लिए महत्वपूर्ण होता है।

एक पंक्ति में स्ट्रीम करें

stream=True सेट करें ताकि उपयोगकर्ता एजेंट के काम करते समय प्रगति देख सकें।
import asyncio
from dedalus_labs import AsyncDedalus, DedalusRunner
from dedalus_labs.utils.stream import stream_async
from dotenv import load_dotenv

load_dotenv()

async def main():
    client = AsyncDedalus()
    runner = DedalusRunner(client)

    stream = runner.run(
        input="Find me the nearest basketball games in January in San Francisco (stream your work).",
        model="anthropic/claude-opus-4-5",
        mcp_servers=["windsor/ticketmaster-mcp"],  # Ticketmaster के माध्यम से ईवेंट खोजें
        stream=True,
    )

    await stream_async(stream)

if __name__ == "__main__":
    asyncio.run(main())

टूल्स के साथ स्ट्रीमिंग

स्ट्रीमिंग tool-calling वर्कफ़्लोज़ के साथ भी काम करती है। जब एजेंट local tools, MCPs, या दोनों को कॉल कर रहा हो, तब आप स्ट्रीम कर सकते हैं।
import asyncio

from dedalus_labs import AsyncDedalus, DedalusRunner
from dedalus_labs.utils.stream import stream_async
from dotenv import load_dotenv

load_dotenv()

def summarize_headlines(headlines: list[str]) -> str:
    """Format headlines as a short bullet list."""
    return "\n".join(f"• {h}" for h in headlines[:3])

async def main():
    client = AsyncDedalus()
    runner = DedalusRunner(client)

    stream = runner.run(
        input=(
            "Search for AI news. Extract 3 headlines. "
            "Then call summarize_headlines(headlines) and stream your final answer."
        ),
        model="openai/gpt-5.2",
        mcp_servers=["windsor/brave-search-mcp"],  # Brave Search MCP के माध्यम से वेब खोज
        tools=[summarize_headlines],
        stream=True,
    )

    await stream_async(stream)

if __name__ == "__main__":
    asyncio.run(main())

तुलना: नॉन‑स्ट्रीमिंग बनाम स्ट्रीमिंग (एक ही परिदृश्य)

नीचे दिया गया परिदृश्य दोनों स्निपेट्स में समान है। अंतर केवल इतना है कि क्या आप stream=True सेट करते हैं और स्ट्रीम पर इटेरेट करते हैं
Python में, नॉन‑स्ट्रीमिंग का अर्थ stream=False होता है, “sync” नहीं। यदि आप AsyncDedalus का उपयोग करते हैं, तो आप फिर भी async कोड ही लिखेंगे और asyncio.run(...) का उपयोग करेंगे। यदि आप पूरी तरह से synchronous (सिंक्रोनस) कोड पसंद करते हैं, तो Dedalus Client का उपयोग करें (उदाहरण नीचे दिया गया है)।

Python

import asyncio
from dedalus_labs import AsyncDedalus, DedalusRunner
from dotenv import load_dotenv

load_dotenv()

async def main():
    client = AsyncDedalus()
    runner = DedalusRunner(client)

    result = await runner.run(
        input="Find me the nearest basketball games in January in San Francisco.",
        model="anthropic/claude-opus-4-5",
        mcp_servers=["windsor/ticketmaster-mcp"],  # Ticketmaster के ज़रिए इवेंट्स खोजें
    )

    # आपको आउटपुट केवल तब दिखेगा जब पूरा रन समाप्त हो जाएगा।
    print(result.final_output)

if __name__ == "__main__":
    asyncio.run(main())

Python (सिंक Client)

from dedalus_labs import Dedalus, DedalusRunner
from dotenv import load_dotenv

load_dotenv()

def main():
    client = Dedalus()
    runner = DedalusRunner(client)

    result = runner.run(
        input="जनवरी में सैन फ़्रांसिस्को में मेरे लिए सबसे नज़दीकी बास्केटबॉल मैच ढूंढें।",
        model="anthropic/claude-opus-4-5",
        mcp_servers=["windsor/ticketmaster-mcp"],  # Ticketmaster के माध्यम से इवेंट खोजें
    )

    print(result.final_output)

if __name__ == "__main__":
    main()

TypeScript

import Dedalus from 'dedalus-labs';
import { DedalusRunner } from 'dedalus-labs';

const client = new Dedalus();
const runner = new DedalusRunner(client, true);

async function main() {
  const result = await runner.run({
    input: 'Find me the nearest basketball games in January in San Francisco.',
    model: 'anthropic/claude-opus-4-5',
    mcpServers: ['windsor/ticketmaster-mcp'], // Ticketmaster के ज़रिए इवेंट्स खोजें
  });

  console.log((result as any).finalOutput);
}

main();

उपयोगकर्ता अनुभव कैसे अलग होता है

  • प्रगतिशील रेंडरिंग: आप पूरे उत्तर का इंतज़ार करने के बजाय, पाठ को आते ही (“टाइपिंग”) दिखा सकते हैं।
  • दृश्यमान प्रगति: tool/मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) वर्कफ़्लो में, आप एजेंट के टूल्स कॉल करते समय स्थिति अपडेट दिखा सकते हैं (जैसे, “Ticketmaster पर खोज कर रहा है…”).
  • बीच में रोकने की सुविधा: अगर उपयोगकर्ता को पहले ही उनकी ज़रूरत की चीज़ मिल गई है, तो आप क्लाइंट‑साइड पर ही जल्दी रोक सकते हैं, बजाय पूरे completion के लिए भुगतान करने के।

कब स्ट्रीम करें

इन स्थितियों में स्ट्रीम करें:
  • जब आप ऐसे चैट इंटरफ़ेस बना रहे हों जहाँ महसूस होने वाली लेटेंसी मायने रखती हो
  • जब लंबे‑फॉर्म की सामग्री (लेख, कोड, विश्लेषण) जनरेट करनी हो
  • जब आप टर्मिनल या लॉग में चला रहे हों और प्रोग्रेस फ़ीडबैक मददगार हो
इन स्थितियों में स्ट्रीम न करें:
  • जब आपको दिखाने से पहले पूरे रिस्पॉन्स को पार्स करना ज़रूरी हो
  • जब आप .parse() के साथ संरचित आउटपुट का उपयोग कर रहे हों
  • जब रिस्पॉन्स समय पहले से ही पर्याप्त तेज़ हो

अगले चरण

  • कई models के बीच रूट करें: Handoffs — हर चरण के लिए तेज़/शक्तिशाली models का उपयोग करें
  • अंत में images जोड़ें: Images & Vision — जब आपका टेक्स्ट वर्कफ़्लो मज़बूत हो जाए, तब मल्टीमोडैलिटी जोड़ें
  • उपयोग के मामले — और स्ट्रीमिंग एजेंट उदाहरण
इन डॉक्यूमेंट्स को प्रोग्रामेटिक रूप से कनेक्ट करें যাতে आप मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) के ज़रिये Claude, VSCode और अन्य टूल्स में रियल‑टाइम उत्तर प्राप्त कर सकें।