शुरुआत करें
यदि आप पहली बार कोई एजेंट सेट अप कर रहे हैं, तो पहले Youka CLI इंस्टॉल करें, फिर Youka karaoke skill इंस्टॉल करें:अपने एजेंट को प्रॉम्प्ट करें
CLI और skill इंस्टॉल करने के बाद, आप अपने एजेंट को इस तरह सीधा कार्य दे सकते हैं:ऑपरेटिंग नियम
हमेशा --json इस्तेमाल करें
CLI पर हमेशा
--json पास करें। API में हमेशा Accept: application/json सेट करें। कभी भी human output को parse न करें।हमेशा idempotency key भेजें
हर write के साथ एक स्थिर idempotency key होनी चाहिए, ताकि timeout के बाद retries मूल परिणाम लौटाएं और काम डुप्लिकेट न हो।
टिकाऊ state को फिर से पढ़ें
stale mutation responses पर भरोसा न करें। किसी terminal task के बाद, final state पाने के लिए project या export को फिर से read करें।
backoff के साथ poll करें
2–3 सेकंड के interval से शुरू करें। लंबी jobs के लिए exponentially back off करें।
429 responses का सम्मान करें।
Output contract
--json मोड में हर CLI कमांड stdout पर ठीक एक envelope लिखता है।
Success:
| Code | अर्थ | Retry? |
|---|---|---|
0 | Success. | N/A |
1 | Runtime error (network, API, rendering). | error.retryable जाँचें। |
2 | Invalid input (bad flags, unreadable payload). | नहीं — input ठीक करें। |
एंड-टू-एंड वर्कफ़्लो
कैनॉनिकल एजेंट वर्कफ़्लो है: एक प्रोजेक्ट बनाएं, प्रतीक्षा करें, एक्सपोर्ट करें, परिणाम डाउनलोड करें। यहाँ CLI और SDK दोनों implementations के साथ पूरा पैटर्न है।Polling मार्गदर्शन
SDK में अधिकांश writes operation handles लौटाते हैं।client.projects.wait(...) और client.exports.wait(...) को प्राथमिकता दें, और client.tasks.* पर तभी जाएँ जब आपको स्पष्ट रूप से low-level task access की ज़रूरत हो।
| Job type | Recommended initial interval | Max wait |
|---|---|---|
| Project create (stems + lyrics sync) | 3 s | 15 min |
| Stem separation only | 3 s | 10 min |
| Lyrics sync only | 2 s | 5 min |
| Export render | 3 s | 30 min |
--wait आपके लिए polling संभालता है। SDK पर, wait helpers डिफ़ॉल्ट रूप से 2 s interval उपयोग करते हैं और pollIntervalMs स्वीकार करते हैं।
Idempotency keys
हर create और update operation एक idempotency key सपोर्ट करता है। नियम:- हर logical mutation के लिए stable, unique, deterministic key इस्तेमाल करें। अच्छा:
create-song-${sourceHash}। खराब: हर retry पर नया UUID। - retries के दौरान उसी key का पुन: उपयोग करें। सर्वर replay पहचानकर मूल परिणाम लौटाता है।
- keys per-account scoped होती हैं और 24 घंटे बाद expire हो जाती हैं।
- यदि सर्वर
IDEMPOTENT_REPLAY_IN_PROGRESS(HTTP 202) लौटाए, तो original request अभी भी चल रही है। प्रतीक्षा करें और उसी key के साथ retry करें।
Error recovery
error.code और error.retryable के आधार पर branch करें। सामान्य केस:
| Code | कारण | Action |
|---|---|---|
INVALID_REQUEST | Request body schema validation में fail हुआ। | payload ठीक करें। retry नहीं। |
UNAUTHORIZED | API key missing या invalid। | caller तक surface करें। retry नहीं। |
NOT_FOUND | resource मौजूद नहीं है या आपके पास access नहीं है। | retry नहीं। |
CONFLICT (409) | version conflict या idempotency collision। | उसी idempotency key के साथ retry करें। |
TOO_MANY_REQUESTS (429) | rate limit। | Retry-After या 30 s के अनुसार back off करें। |
INTERNAL_SERVER_ERROR (500) | transient server failure। | backoff के साथ 3 बार तक retry करें। |
IDEMPOTENT_REPLAY_IN_PROGRESS (202) | prior request अभी भी चल रही है। | प्रतीक्षा करें और उसी key के साथ retry करें। |
TASK_FAILED | async task failure में समाप्त हुई। | error.task.error को caller तक surface करें। retry नहीं। |
TASK_TIMED_OUT | async task ने अपना budget पार कर लिया। | एक बार retry करना सुरक्षित है। |
Mutable fields की खोज
presets को mutate करने से पहले, preset schema fetch करें ताकि मॉडल valid fields और value types जान सके:youka project settings <id> --body ... के जरिए minimal update body सबमिट करें।
प्रति agent session एक बार fetch करें और परिणाम cache करें।
Parallel agents
जब एक ही account के खिलाफ कई agents concurrently चल रहे हों:- idempotency keys को agent identity और logical mutation — दोनों के अनुसार scope करें:
agent-${agentId}-create-${sourceHash}। इससे एक agent का retry किसी दूसरे agent की fresh request से collide नहीं करेगा। - reads को unbounded रखें —
GETrequests सस्ते होते हैं और उनके कोई side effects नहीं होते। - यदि आपको ordered export history चाहिए, तो प्रति project
POST /projects/{projectId}/exportsके लिए single queue इस्तेमाल करें। अन्यथा exports out of order आ सकते हैं।
आगे क्या
- CLI global options — agents के लिए उपलब्ध हर flag
- SDK errors — error classes का पूरा reference
- API async jobs — polling contract
- API idempotency — idempotency contract
