ThunderPhone 2.0 ਹੁਣ ਲਾਈਵ ਹੈ।ਖੁਦ ਸੈਟਅੱਪ ਕਰੋ—2¢/ਮਿੰਟ ਤੋਂ।ਐਲਾਨ ਪੜ੍ਹੋ

Connect tools & data

LiveKit Agents ਤੋਂ ThunderPhone ਵਰਤੋ

ThunderPhone ਵੌਇਸ ਏਜੰਟ ਨੂੰ LiveKit Agents ਸੈਸ਼ਨ ਦੇ ਰੀਅਲਟਾਈਮ (ਸਪੀਚ-ਤੋਂ-ਸਪੀਚ) ਮਾਡਲ ਵਜੋਂ ਚਲਾਓ, ਜਿਸ ਦੇ ਆਲੇ-ਦੁਆਲੇ LiveKit ਰੂਮ, SIP ਅਤੇ ਟੈਲੀਫੋਨੀ ਹੋਣ।

LiveKit Agents LiveKit ਰੂਮਾਂ ਉੱਤੇ ਰੀਅਲਟਾਈਮ ਵੌਇਸ ਏਜੰਟਾਂ ਲਈ ਇੱਕ ਓਪਨ-ਸੋਰਸ ਫ੍ਰੇਮਵਰਕ ਹੈ। ThunderPhone ਰੀਅਲਟਾਈਮ ਮਾਡਲ ਵਜੋਂ ਪਲੱਗ ਇਨ ਹੁੰਦਾ ਹੈ: ਫ੍ਰੇਮਵਰਕ ਭਾਗੀਦਾਰ ਦਾ ਆਡੀਓ ਭੇਜਦਾ ਹੈ, ThunderPhone ਏਜੰਟ ਦੀ ਆਵਾਜ਼, ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਅਤੇ ਫੰਕਸ਼ਨ ਕਾਲਾਂ ਵਾਪਸ ਕਰਦਾ ਹੈ, ਅਤੇ LiveKit ਦਾ ਰੂਮ, SIP ਟਰੰਕ ਅਤੇ ਟੈਲੀਫੋਨੀ ਆਡੀਓ ਨੂੰ ਲੈ ਕੇ ਚਲਦੇ ਹਨ। ਸਪੀਚ ਰਿਕਗਨੀਸ਼ਨ, ਲੈਂਗਵੇਜ ਮਾਡਲ, ਆਵਾਜ਼, ਵਾਰੀ ਲੈਣਾ, 47 ਭਾਸ਼ਾਵਾਂ ਅਤੇ ਟੂਲ ਸਾਰੇ ThunderPhone ਉੱਤੇ ਚੱਲਦੇ ਹਨ।

ਇਸ ਤਰੀਕੇ ਨਾਲ ਕੀਤੀਆਂ ਕਾਲਾਂ ਕਾਲ ਹਿਸਟਰੀ ਵਿੱਚ ਦਿਖਾਈ ਦਿੰਦੀਆਂ ਹਨ ਅਤੇ ਕਿਸੇ ਹੋਰ ਰੀਅਲਟਾਈਮ ਕਾਲ ਵਾਂਗ ਤੁਹਾਡੇ ਪ੍ਰੋਡਕਟ ਦੀ ਪ੍ਰਤੀ-ਮਿੰਟ ਦਰ ਅਨੁਸਾਰ ਬਿਲ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਇਸ ਵਿੱਚ ਕੋਈ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਜਾਂ ThunderPhone ਫੋਨ ਨੰਬਰ ਸ਼ਾਮਲ ਨਹੀਂ ਹੁੰਦਾ।

ਇੰਸਟਾਲ ਕਰੋ

pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_...   # a secret API key

ਪਲੱਗਇਨ LiveKit ਦੇ OpenAI Realtime ਮਾਡਲ ਨੂੰ ਰੈਪ ਕਰਦਾ ਹੈ, ਕਿਉਂਕਿ ThunderPhone ਦਾ Realtime WebSocket ਉਹੀ ਪ੍ਰੋਟੋਕੋਲ ਬੋਲਦਾ ਹੈ। ਇਸ ਲਈ livekit-agents 1.8 ਜਾਂ ਇਸ ਤੋਂ ਨਵਾਂ ਵਰਜਨ ਚਾਹੀਦਾ ਹੈ।

ਸੇਵ ਕੀਤਾ ਏਜੰਟ ਚਲਾਓ

ਏਜੰਟ ਜੋ ਕੁਝ ਵੀ ਕਰਦਾ ਹੈ (prompt, ਆਵਾਜ਼, ਇੰਜਣ, ਭਾਸ਼ਾਵਾਂ, ਟੂਲ, ਸਵਾਗਤ, ਚੁੱਪ ਦੌਰਾਨ ਚੈੱਕ-ਇਨ) ਉਹ ThunderPhone ਉੱਤੇ ਕੌਂਫਿਗਰ ਹੁੰਦਾ ਹੈ। ਸੈਸ਼ਨ ਸਿਰਫ਼ ਆਡੀਓ ਨੂੰ ਅੱਗੇ ਭੇਜਦਾ ਹੈ।

from livekit.agents import Agent, AgentSession, JobContext, WorkerOptions, cli
from livekit.plugins import thunderphone
 
 
async def entrypoint(ctx: JobContext):
    session = AgentSession(llm=thunderphone.RealtimeModel(agent_id=12))
    await session.start(agent=Agent(instructions=""), room=ctx.room)
 
 
if __name__ == "__main__":
    cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))

ਸੇਵ ਕੀਤਾ ਏਜੰਟ ThunderPhone ਉੱਤੇ ਸਵਾਗਤ ਕਰਦਾ ਹੈ ਅਤੇ ਆਪਣੇ ਟੂਲ ਚਲਾਉਂਦਾ ਹੈ; LiveKit ਦੇ Agent ਦੀਆਂ ਹਿਦਾਇਤਾਂ ਅਤੇ ਟੂਲ ਨਹੀਂ ਭੇਜੇ ਜਾਂਦੇ। ਜਦੋਂ ThunderPhone ਏਜੰਟ ਕਾਲ ਬੰਦ ਕਰਦਾ ਹੈ ਤਾਂ ਕਾਲ ਖਤਮ ਹੋ ਜਾਂਦੀ ਹੈ, ਅਤੇ ਸੈਸ਼ਨ ਵੀ ਉਸਦੇ ਨਾਲ ਬੰਦ ਹੋ ਜਾਂਦਾ ਹੈ।

ਸੈਸ਼ਨ ਨੂੰ ਇਨਲਾਈਨ ਕੌਂਫਿਗਰ ਕਰੋ

agent_id ਤੋਂ ਬਿਨਾਂ, ਹਿਦਾਇਤਾਂ ਅਤੇ ਟੂਲ LiveKit ਦੇ Agent ਤੋਂ ਆਉਂਦੇ ਹਨ, ਬਿਲਕੁਲ ਉਸੇ ਤਰ੍ਹਾਂ ਜਿਵੇਂ ਉਹ OpenAI ਲਈ ਆਉਂਦੇ ਹਨ। product ਇੰਜਣ ਚੁਣਦਾ ਹੈ ਅਤੇ voice ThunderPhone ਦੀ ਆਵਾਜ਼ ਚੁਣਦਾ ਹੈ।

from livekit.agents import Agent, AgentSession, RunContext, function_tool
from livekit.plugins import thunderphone
 
 
class Receptionist(Agent):
    def __init__(self):
        super().__init__(instructions="You are Acme Dental's receptionist. Be brief.")
 
    @function_tool
    async def check_availability(self, context: RunContext, date: str) -> dict:
        """Free appointment slots on a date."""
        return {"slots": await calendar.free_slots(date)}
 
 
async def entrypoint(ctx: JobContext):
    session = AgentSession(
        llm=thunderphone.RealtimeModel(product="bolt", voice="olivia", language="es"),
    )
    await session.start(agent=Receptionist(), room=ctx.room)
    await session.generate_reply()   # the agent speaks first

ThunderPhone ਕਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵੇਲੇ ਹਿਦਾਇਤਾਂ ਅਤੇ ਟੂਲ ਫ੍ਰੀਜ਼ ਕਰ ਦਿੰਦਾ ਹੈ, ਇਸ ਲਈ ਕਾਲ ਦੌਰਾਨ update_instructions, update_tools ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਬਦਲਣ ਵਾਲੇ ਏਜੰਟ ਹੈਂਡ-ਆਫ਼ ਸਮਰਥਿਤ ਨਹੀਂ ਹਨ। ਇਨਲਾਈਨ ਸੈਸ਼ਨ ਕਲਾਇੰਟ-ਨਿਯੰਤਰਿਤ ਹੁੰਦੇ ਹਨ: ਏਜੰਟ ਉਦੋਂ ਬੋਲਦਾ ਹੈ ਜਦੋਂ ਤੁਸੀਂ generate_reply() ਕਾਲ ਕਰਦੇ ਹੋ ਜਾਂ ਜਦੋਂ ਭਾਗੀਦਾਰ ਆਪਣੀ ਵਾਰੀ ਪੂਰੀ ਕਰਦਾ ਹੈ।

ਚੋਣਾਂ

ਆਰਗੂਮੈਂਟਅਰਥ
api_keyਗੁਪਤ ਕੁੰਜੀ (sk_live_...)। ਡਿਫਾਲਟ THUNDERPHONE_API_KEY ਹੈ।
agent_idਸੁਰੱਖਿਅਤ ਏਜੰਟ ਚਲਾਓ। product ਅਤੇ voice ਨਾਲ ਆਪਸੀ ਤੌਰ 'ਤੇ ਅਸੰਗਤ ਹੈ।
productਇਨਲਾਈਨ ਸੈਸ਼ਨਾਂ ਲਈ ਇੰਜਣ: spark, bolt ਜਾਂ storm
voiceਇਨਲਾਈਨ ਸੈਸ਼ਨਾਂ ਲਈ ThunderPhone ਵੌਇਸ ਨਾਮ।
languageਇਨਲਾਈਨ ਸੈਸ਼ਨਾਂ ਲਈ ਮੁੱਖ ਭਾਸ਼ਾ ਸੰਕੇਤ, ਉਦਾਹਰਨ ਲਈ es
from_number, to_numberਜਦੋਂ ਰੂਮ ਫੋਨ ਲਾਈਨ ਸੰਭਾਲਦਾ ਹੈ, ਕਾਲ ਵਿੱਚ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਨੰਬਰ।
live_transcriptsਉਚਾਰਣ ਦੌਰਾਨ ਕਾਲਰ ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਦੇ ਹਿੱਸੇ ਸਟ੍ਰੀਮ ਕਰੋ (ਵਾਧੂ ਬਿਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ)।
base_urlਐਂਡਪੌਇੰਟ ਓਵਰਰਾਈਡ, ਡਿਫਾਲਟ wss://api.thunderphone.com/v1/realtime ਹੈ।

ਇਵੈਂਟ

ThunderPhone ਰੀਅਲਟਾਈਮ ਪ੍ਰੋਟੋਕੋਲ ਦੇ ਉੱਪਰ ਪਲੇਟਫਾਰਮ ਇਵੈਂਟ ਜੋੜਦਾ ਹੈ। ਸੈਸ਼ਨ ਇਨ੍ਹਾਂ ਨੂੰ ਐਮਿਟ ਕਰਦਾ ਹੈ:

@session.llm.session.on("thunderphone_call_ended")  # or on the RealtimeSession you hold
def on_call_ended(event):
    print("call ended:", event["reason"])

ਸੈਸ਼ਨ ਲਾਈਵ ਹੋਣ 'ਤੇ RealtimeSession call_id ਐਕਸਪੋਜ਼ ਕਰਦਾ ਹੈ। ਕਾਲ ਤੋਂ ਬਾਅਦ ਰਿਕਾਰਡਿੰਗ, ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਅਤੇ ਗ੍ਰੇਡ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਇਸਨੂੰ GET /v1/calls/{call_id} ਨਾਲ ਵਰਤੋ। ਹਰ ਹੋਰ call.* ਇਵੈਂਟ (ਟ੍ਰਾਂਸਫਰ, ਕੀਪੈਡ, ਅਣਡਿੱਠੀ ਕੀਤੀ ਸਪੀਚ) thunderphone_call_event ਵਜੋਂ ਆਉਂਦਾ ਹੈ।

ਸੀਮਾਵਾਂ

  • ਟਰਨ ਡਿਟੈਕਸ਼ਨ ਸਰਵਰ-ਸਾਈਡ ਹੈ ਅਤੇ ਹਮੇਸ਼ਾ ਚਾਲੂ ਰਹਿੰਦਾ ਹੈ; ਫਰੇਮਵਰਕ-ਸਾਈਡ ਟਰਨ ਡਿਟੈਕਸ਼ਨ (AgentSession ਉੱਤੇ turn_detection) ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
  • ਕਾਲ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਬਾਅਦ ਹਦਾਇਤਾਂ ਅਤੇ ਟੂਲ ਨਹੀਂ ਬਦਲੇ ਜਾ ਸਕਦੇ।
  • ਆਡੀਓ ਦੋਵੇਂ ਦਿਸ਼ਾਵਾਂ ਵਿੱਚ 24 kHz 'ਤੇ 16-ਬਿੱਟ ਮੋਨੋ PCM ਹੈ।
  • ਵੀਡੀਓ ਫ੍ਰੇਮਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।