{ "_ten": { "predefined_graphs": [ { "name": "voice_assistant", "auto_start": true, "nodes": [ { "type": "extension", "name": "agora_rtc", "addon": "agora_rtc", "extension_group": "default", "property": { "app_id": "${env:AGORA_APP_ID}", "token": "", "channel": "ten_agent_test", "stream_id": 1234, "remote_stream_id": "123", "subscribe_audio": true, "publish_audio": true, "publish_data": true, "enable_agora_asr": false, "agora_asr_vendor_name": "microsoft", "agora_asr_language": "ru-RU", "agora_asr_vendor_key": "${env:AZURE_STT_KEY|}", "agora_asr_vendor_region": "${env:AZURE_STT_REGION|}", "agora_asr_session_control_file_path": "session_control.conf" } }, { "type": "extension", "name": "stt", "addon": "deepgram_asr_python", "extension_group": "stt", "property": { "api_key": "${env:DEEPGRAM_API_KEY}", "language": "ru-RU", "model": "nova-2", "sample_rate": 16000 } }, { "type": "extension", "name": "llm", "addon": "openai_chatgpt_python", "extension_group": "chatgpt", "property": { "api_key": "${env:OPENAI_API_KEY}", "base_url": "https://nitrox-fastflowwrapper.hf.space/v1", "frequency_penalty": 0.9, "greeting": "Я подключилась, о чем сегодня?", "max_memory_length": 150, "max_tokens": 512, "model": "${env:OPENAI_MODEL}", "prompt": "Your role is Friend. You provide emotional support, actively listen and reflect on the user's feelings, validate their emotions, and ask open-ended questions to deepen the conversation in a safe and non-judgmental space. Engage informally and share personal experiences while respecting boundaries and encouraging the user. Maintain clarity and conciseness by replying in no more than five sentences per answer using friendly English language. Your responses must always include answers to the user's inquiries while offering insights, comfort, and encouragement without using any special symbols. Your language is Russian.", "proxy_url": "${env:OPENAI_PROXY_URL}" } }, { "type": "extension", "name": "tts", "addon": "fish_audio_tts", "extension_group": "tts", "property": { "api_key": "${env:FISH_AUDIO_TTS_KEY}", "base_url": "https://api.fish.audio", "model_id": "d61694f4ee5042aba2ffe11a9635d97e", "optimize_streaming_latency": true, "request_timeout_seconds": 30 } }, { "type": "extension", "name": "interrupt_detector", "addon": "interrupt_detector_python", "extension_group": "default", "property": {} }, { "type": "extension", "name": "message_collector", "addon": "message_collector", "extension_group": "transcriber", "property": {} } ], "connections": [ { "extension": "agora_rtc", "cmd": [ { "name": "on_user_joined", "dest": [ { "extension": "llm" } ] }, { "name": "on_user_left", "dest": [ { "extension": "llm" } ] }, { "name": "on_connection_failure", "dest": [ { "extension": "llm" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "stt" } ] } ] }, { "extension": "stt", "data": [ { "name": "text_data", "dest": [ { "extension": "interrupt_detector" }, { "extension": "message_collector" } ] } ] }, { "extension": "llm", "cmd": [ { "name": "flush", "dest": [ { "extension": "tts" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "tts" }, { "extension": "message_collector" } ] }, { "name": "content_data", "dest": [ { "extension": "message_collector" } ] } ] }, { "extension": "message_collector", "data": [ { "name": "data", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "tts", "cmd": [ { "name": "flush", "dest": [ { "extension": "agora_rtc" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "interrupt_detector", "cmd": [ { "name": "flush", "dest": [ { "extension": "llm" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "llm" } ] } ] } ] }, { "name": "voice_assistant_integrated_stt", "auto_start": true, "nodes": [ { "type": "extension", "name": "agora_rtc", "addon": "agora_rtc", "extension_group": "default", "property": { "app_id": "${env:AGORA_APP_ID}", "token": "", "channel": "ten_agent_test", "stream_id": 1234, "remote_stream_id": 123, "subscribe_audio": true, "publish_audio": true, "publish_data": true, "enable_agora_asr": true, "agora_asr_vendor_name": "microsoft", "agora_asr_language": "en-US", "agora_asr_vendor_key": "${env:AZURE_STT_KEY|}", "agora_asr_vendor_region": "${env:AZURE_STT_REGION|}", "agora_asr_session_control_file_path": "session_control.conf" } }, { "type": "extension", "name": "llm", "addon": "openai_chatgpt_python", "extension_group": "chatgpt", "property": { "api_key": "${env:OPENAI_API_KEY}", "base_url": "", "frequency_penalty": 0.9, "greeting": "TEN Agent connected. How can I help you today?", "max_memory_length": 10, "max_tokens": 512, "model": "${env:OPENAI_MODEL}", "prompt": "", "proxy_url": "${env:OPENAI_PROXY_URL}" } }, { "type": "extension", "name": "tts", "addon": "fish_audio_tts", "extension_group": "tts", "property": { "api_key": "${env:FISH_AUDIO_TTS_KEY}", "model_id": "d8639b5cc95548f5afbcfe22d3ba5ce5", "optimize_streaming_latency": true, "request_timeout_seconds": 30, "base_url": "https://api.fish.audio" } }, { "type": "extension", "name": "interrupt_detector", "addon": "interrupt_detector_python", "extension_group": "default", "property": {} }, { "type": "extension", "name": "message_collector", "addon": "message_collector", "extension_group": "transcriber", "property": {} }, { "type": "extension", "name": "weatherapi_tool_python", "addon": "weatherapi_tool_python", "extension_group": "default", "property": { "api_key": "${env:WEATHERAPI_API_KEY|}" } } ], "connections": [ { "extension": "agora_rtc", "cmd": [ { "name": "on_user_joined", "dest": [ { "extension": "llm" } ] }, { "name": "on_user_left", "dest": [ { "extension": "llm" } ] }, { "name": "on_connection_failure", "dest": [ { "extension": "llm" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "interrupt_detector" }, { "extension": "message_collector" } ] } ] }, { "extension": "llm", "cmd": [ { "name": "flush", "dest": [ { "extension": "tts" } ] }, { "name": "tool_call", "dest": [ { "extension": "weatherapi_tool_python" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "tts" }, { "extension": "message_collector" } ] }, { "name": "content_data", "dest": [ { "extension": "message_collector" } ] } ] }, { "extension": "message_collector", "data": [ { "name": "data", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "tts", "cmd": [ { "name": "flush", "dest": [ { "extension": "agora_rtc" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "interrupt_detector", "cmd": [ { "name": "flush", "dest": [ { "extension": "llm" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "llm" } ] } ] }, { "extension": "weatherapi_tool_python", "cmd": [ { "name": "tool_register", "dest": [ { "extension": "llm" } ] } ] } ] }, { "name": "voice_assistant_realtime", "auto_start": true, "nodes": [ { "type": "extension", "name": "agora_rtc", "addon": "agora_rtc", "extension_group": "rtc", "property": { "app_id": "${env:AGORA_APP_ID}", "token": "", "channel": "ten_agent_test", "stream_id": 1234, "remote_stream_id": 123, "subscribe_audio": true, "publish_audio": true, "publish_data": true, "subscribe_audio_sample_rate": 24000 } }, { "type": "extension", "name": "v2v", "addon": "openai_v2v_python", "extension_group": "llm", "property": { "api_key": "${env:OPENAI_REALTIME_API_KEY}", "enable_storage": false, "history": 10, "language": "en-US", "max_tokens": 2048, "model": "gpt-4o-realtime-preview", "server_vad": true, "temperature": 0.9, "voice": "alloy" } }, { "type": "extension", "name": "message_collector", "addon": "message_collector", "extension_group": "transcriber", "property": {} }, { "type": "extension", "name": "weatherapi_tool_python", "addon": "weatherapi_tool_python", "extension_group": "default", "property": { "api_key": "${env:WEATHERAPI_API_KEY|}" } } ], "connections": [ { "extension": "agora_rtc", "cmd": [ { "name": "on_user_joined", "dest": [ { "extension": "v2v" } ] }, { "name": "on_user_left", "dest": [ { "extension": "v2v" } ] }, { "name": "on_connection_failure", "dest": [ { "extension": "v2v" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "v2v" } ] } ], "video_frame": [ { "name": "video_frame", "dest": [ { "extension": "v2v" } ] } ] }, { "extension": "v2v", "cmd": [ { "name": "flush", "dest": [ { "extension": "agora_rtc" } ] }, { "name": "tool_call", "dest": [ { "extension": "weatherapi_tool_python" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "message_collector" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "message_collector", "data": [ { "name": "data", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "weatherapi_tool_python", "cmd": [ { "name": "tool_register", "dest": [ { "extension": "v2v" } ] } ] } ] }, { "name": "story_teller", "auto_start": true, "nodes": [ { "type": "extension", "name": "agora_rtc", "addon": "agora_rtc", "extension_group": "default", "property": { "app_id": "${env:AGORA_APP_ID}", "token": "", "channel": "ten_agent_test", "stream_id": 1234, "remote_stream_id": 123, "subscribe_audio": true, "publish_audio": true, "publish_data": true, "enable_agora_asr": false } }, { "type": "extension", "name": "stt", "addon": "deepgram_asr_python", "extension_group": "stt", "property": { "api_key": "${env:DEEPGRAM_API_KEY}", "language": "en-US", "model": "nova-2", "sample_rate": 16000 } }, { "type": "extension", "name": "llm", "addon": "openai_chatgpt_python", "extension_group": "chatgpt", "property": { "api_key": "${env:OPENAI_API_KEY}", "base_url": "", "frequency_penalty": 0.9, "greeting": "TEN Agent connected. How can I help you today?", "max_memory_length": 10, "max_tokens": 512, "model": "${env:OPENAI_MODEL}", "prompt": "You are an ai agent bot producing child picture books. Each response should be short and no more than 50 words as it's for child. \nFor every response relevant to the story-telling, you will use the 'image_generate' tool to create an image based on the description or key moment in that part of the story. \n The story should be set in a fantasy world. Try asking questions relevant to the story to decide how the story should proceed. Every response should include rich, vivid descriptions that will guide the 'image_generate' tool to produce an image that aligns with the scene or mood.\n Whether it’s the setting, a character’s expression, or a dramatic moment, the paragraph should give enough detail for a meaningful visual representation.", "proxy_url": "${env:OPENAI_PROXY_URL}" } }, { "type": "extension", "name": "tts", "addon": "fish_audio_tts", "extension_group": "tts", "property": { "api_key": "${env:FISH_AUDIO_TTS_KEY}", "model_id": "d8639b5cc95548f5afbcfe22d3ba5ce5", "optimize_streaming_latency": true, "request_timeout_seconds": 30, "base_url": "https://api.fish.audio" } }, { "type": "extension", "name": "interrupt_detector", "addon": "interrupt_detector_python", "extension_group": "default", "property": {} }, { "type": "extension", "name": "message_collector", "addon": "message_collector", "extension_group": "transcriber", "property": {} }, { "type": "extension", "name": "openai_image_generate_tool", "addon": "openai_image_generate_tool", "extension_group": "default", "property": { "api_key": "${env:OPENAI_API_KEY}" } } ], "connections": [ { "extension": "agora_rtc", "cmd": [ { "name": "on_user_joined", "dest": [ { "extension": "llm" } ] }, { "name": "on_user_left", "dest": [ { "extension": "llm" } ] }, { "name": "on_connection_failure", "dest": [ { "extension": "llm" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "stt" } ] } ] }, { "extension": "stt", "data": [ { "name": "text_data", "dest": [ { "extension": "interrupt_detector" }, { "extension": "message_collector" } ] } ] }, { "extension": "llm", "cmd": [ { "name": "flush", "dest": [ { "extension": "tts" } ] }, { "name": "tool_call", "dest": [ { "extension": "openai_image_generate_tool" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "tts" }, { "extension": "message_collector" } ] } ] }, { "extension": "message_collector", "data": [ { "name": "data", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "tts", "cmd": [ { "name": "flush", "dest": [ { "extension": "agora_rtc" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "interrupt_detector", "cmd": [ { "name": "flush", "dest": [ { "extension": "llm" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "llm" } ] } ] }, { "extension": "openai_image_generate_tool", "cmd": [ { "name": "tool_register", "dest": [ { "extension": "llm" } ] } ], "data": [ { "name": "content_data", "dest": [ { "extension": "message_collector" } ] } ] } ] }, { "name": "story_teller_stt_integrated", "auto_start": true, "nodes": [ { "type": "extension", "name": "agora_rtc", "addon": "agora_rtc", "extension_group": "default", "property": { "app_id": "${env:AGORA_APP_ID}", "token": "", "channel": "ten_agent_test", "stream_id": 1234, "remote_stream_id": 123, "subscribe_audio": true, "publish_audio": true, "publish_data": true, "enable_agora_asr": true, "agora_asr_vendor_name": "microsoft", "agora_asr_language": "en-US", "agora_asr_vendor_key": "${env:AZURE_STT_KEY|}", "agora_asr_vendor_region": "${env:AZURE_STT_REGION|}", "agora_asr_session_control_file_path": "session_control.conf" } }, { "type": "extension", "name": "llm", "addon": "openai_chatgpt_python", "extension_group": "chatgpt", "property": { "api_key": "${env:OPENAI_API_KEY}", "base_url": "", "frequency_penalty": 0.9, "greeting": "TEN Agent connected. How can I help you today?", "max_memory_length": 10, "max_tokens": 512, "model": "${env:OPENAI_MODEL}", "prompt": "You are an ai agent bot producing child picture books. Each response should be short and no more than 50 words as it's for child. \nFor every response relevant to the story-telling, you will use the 'image_generate' tool to create an image based on the description or key moment in that part of the story. \n The story should be set in a fantasy world. Try asking questions relevant to the story to decide how the story should proceed. Every response should include rich, vivid descriptions that will guide the 'image_generate' tool to produce an image that aligns with the scene or mood.\n Whether it’s the setting, a character’s expression, or a dramatic moment, the paragraph should give enough detail for a meaningful visual representation.", "proxy_url": "${env:OPENAI_PROXY_URL}" } }, { "type": "extension", "name": "tts", "addon": "fish_audio_tts", "extension_group": "tts", "property": { "api_key": "${env:FISH_AUDIO_TTS_KEY}", "model_id": "d8639b5cc95548f5afbcfe22d3ba5ce5", "optimize_streaming_latency": true, "request_timeout_seconds": 30, "base_url": "https://api.fish.audio" } }, { "type": "extension", "name": "interrupt_detector", "addon": "interrupt_detector_python", "extension_group": "default", "property": {} }, { "type": "extension", "name": "message_collector", "addon": "message_collector", "extension_group": "transcriber", "property": {} }, { "type": "extension", "name": "openai_image_generate_tool", "addon": "openai_image_generate_tool", "extension_group": "default", "property": { "api_key": "${env:OPENAI_API_KEY}" } } ], "connections": [ { "extension": "agora_rtc", "cmd": [ { "name": "on_user_joined", "dest": [ { "extension": "llm" } ] }, { "name": "on_user_left", "dest": [ { "extension": "llm" } ] }, { "name": "on_connection_failure", "dest": [ { "extension": "llm" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "interrupt_detector" }, { "extension": "message_collector" } ] } ] }, { "extension": "llm", "cmd": [ { "name": "flush", "dest": [ { "extension": "tts" } ] }, { "name": "tool_call", "dest": [ { "extension": "openai_image_generate_tool" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "tts" }, { "extension": "message_collector" } ] } ] }, { "extension": "message_collector", "data": [ { "name": "data", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "tts", "cmd": [ { "name": "flush", "dest": [ { "extension": "agora_rtc" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "interrupt_detector", "cmd": [ { "name": "flush", "dest": [ { "extension": "llm" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "llm" } ] } ] }, { "extension": "openai_image_generate_tool", "cmd": [ { "name": "tool_register", "dest": [ { "extension": "llm" } ] } ], "data": [ { "name": "content_data", "dest": [ { "extension": "message_collector" } ] } ] } ] }, { "name": "story_teller_realtime", "auto_start": true, "nodes": [ { "type": "extension", "name": "agora_rtc", "addon": "agora_rtc", "extension_group": "rtc", "property": { "app_id": "${env:AGORA_APP_ID}", "token": "", "channel": "ten_agent_test", "stream_id": 1234, "remote_stream_id": 123, "subscribe_audio": true, "publish_audio": true, "publish_data": true, "subscribe_audio_sample_rate": 24000 } }, { "type": "extension", "name": "v2v", "addon": "openai_v2v_python", "extension_group": "llm", "property": { "api_key": "${env:OPENAI_REALTIME_API_KEY}", "temperature": 0.9, "model": "gpt-4o-realtime-preview-2024-12-17", "max_tokens": 2048, "voice": "alloy", "language": "en-US", "server_vad": true, "prompt": "You are an ai agent bot producing child picture books. Each response should be short and no more than 50 words as it's for child. \nFor every response relevant to the story-telling, you will use the 'image_generate' tool to create an image based on the description or key moment in that part of the story. \n The story should be set in a fantasy world. Try asking questions relevant to the story to decide how the story should proceed. Every response should include rich, vivid descriptions that will guide the 'image_generate' tool to produce an image that aligns with the scene or mood.\n Whether it’s the setting, a character’s expression, or a dramatic moment, the paragraph should give enough detail for a meaningful visual representation.", "dump": false, "max_history": 10 } }, { "type": "extension", "name": "message_collector", "addon": "message_collector", "extension_group": "transcriber", "property": {} }, { "type": "extension", "name": "openai_image_generate_tool", "addon": "openai_image_generate_tool", "extension_group": "default", "property": { "api_key": "${env:OPENAI_API_KEY}" } } ], "connections": [ { "extension": "agora_rtc", "cmd": [ { "name": "on_user_joined", "dest": [ { "extension": "v2v" } ] }, { "name": "on_user_left", "dest": [ { "extension": "v2v" } ] }, { "name": "on_connection_failure", "dest": [ { "extension": "v2v" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "v2v" } ] } ] }, { "extension": "v2v", "cmd": [ { "name": "flush", "dest": [ { "extension": "agora_rtc" } ] }, { "name": "tool_call", "dest": [ { "extension": "openai_image_generate_tool" } ] } ], "data": [ { "name": "text_data", "dest": [ { "extension": "message_collector" } ] } ], "audio_frame": [ { "name": "pcm_frame", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "message_collector", "data": [ { "name": "data", "dest": [ { "extension": "agora_rtc" } ] } ] }, { "extension": "openai_image_generate_tool", "cmd": [ { "name": "tool_register", "dest": [ { "extension": "v2v" } ] } ], "data": [ { "name": "content_data", "dest": [ { "extension": "message_collector" } ] } ] } ] } ], "log_level": 3 } }