ThunderPhone 2.0 ഇപ്പോൾ ലൈവാണ്.സ്വയം സജ്ജമാക്കാം — മിനിറ്റിന് 2¢ മുതൽ.പ്രഖ്യാപനം വായിക്കുക

Connect tools & data

LiveKit Agents-ൽ നിന്ന് ThunderPhone ഉപയോഗിക്കുക

LiveKit റൂമുകൾ, SIP, ടെലിഫോണി എന്നിവ ചുറ്റുമായി, LiveKit Agents സെഷന്റെ റിയൽടൈം (സ്പീച്ച്-ടു-സ്പീച്ച്) മോഡലായി ഒരു ThunderPhone വോയ്സ് ഏജന്റ് പ്രവർത്തിപ്പിക്കുക.

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

ThunderPhone-ന്റെ Realtime WebSocket അതേ പ്രോട്ടോക്കോൾ ഉപയോഗിക്കുന്നതിനാൽ പ്ലഗിൻ LiveKit-ന്റെ OpenAI Realtime മോഡലിനെ റാപ് ചെയ്യുന്നു. ഇതിന് 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 ഇല്ലാതെ, OpenAI-യ്ക്കുള്ളതുപോലെ നിർദ്ദേശങ്ങളും ടൂളുകളും LiveKit Agent-ൽനിന്ന് ലഭിക്കുന്നു. 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.

ഇവന്റുകൾ

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 ആണ്.
  • വീഡിയോ ഫ്രെയിമുകൾ അവഗണിക്കപ്പെടുന്നു.