Skip to content
ALGOLOGIX

AI engineering

Conversational & voice AI

Voice and chat agents that answer, understand, act and hand over cleanly. Turn-taking latency is the whole product in voice — an agent that is right but a second late feels broken — so the budget is set before anything is built.

  • STT
  • TTS
  • Realtime turn-taking
  • Telephony & SIP
  • Multilingual
  • CRM sync

What we build

Inbound support agents
Answer, identify, resolve or route — with a warm handover to a person who has the context.
Outbound qualification agents
Structured conversations that write qualified records straight into your CRM.
IVR replacement
Natural language instead of a menu tree, with the same routing guarantees.
Multilingual triage
Detect the language, serve it, and keep the transcript in both.
Telephony integration
SIP or WebRTC into your existing numbers, carrier and contact-centre stack.
Call analytics and evals
Transcripts, scored outcomes and a regression suite built from real calls.

Problems this solves

  • Problem
    The agent is accurate but the pauses make it unbearable to talk to.
    Approach
    Set an end-to-end turn-taking budget, measure every hop, and optimise the one that is actually slow rather than the one that is easiest to change.
    Outcome
    A conversation that people finish instead of pressing zero.
  • Problem
    It talks over the caller, or freezes when the caller interrupts.
    Approach
    Barge-in handling and interruption recovery as first-class behaviour, tested against recorded calls.
    Outcome
    Interruptions are handled the way a person handles them, not as an error state.
  • Problem
    Nothing that happened on the call reaches the systems that need it.
    Approach
    Tool calls during the conversation write to the CRM and helpdesk as it happens, with the transcript attached.
    Outcome
    The call ends with the record already written, not with a task for someone to type it up.

How we approach it

  1. Discover

    The turn-taking budget is set in the first week and constrains everything after it. In voice an answer that is correct and a second late feels broken, so latency is a requirement rather than a metric.

  2. Design

    We design the conversation as flows, including the ones that go wrong: the caller interrupts, the line is bad, the agent has to hand over. Barge-in and handover are part of the design, not a later fix.

  3. Engineer

    Streaming end to end from the first slice — partial transcripts in, first audio out, measured on a real call. A pipeline assembled first and measured afterwards is almost always over budget.

  4. Evaluate & harden

    Tested against recorded calls with real accents, cross-talk and background noise, and held to the p95 budget agreed in Discover. Every escalation path is dialled rather than assumed.

  5. Launch & operate

    Calls are transcribed, scored and sampled by a person every week. The containment rate worth quoting is the one from month three, and it comes out of that loop.

What we build it with

One voice turn end to end, with the latency budget written into the code and barge-in handled at the transport rather than in the prompt.

voice/pipeline.py
"""A voice turn, with the latency budget in the code."""

from pipecat.pipeline.pipeline import Pipeline
from pipecat.services.anthropic import AnthropicLLMService
from pipecat.services.deepgram import DeepgramSTTService
from pipecat.services.elevenlabs import ElevenLabsTTSService

# Agreed in Discover, asserted in the call analytics: p95
# mouth-to-ear, measured from end of speech to first audio.
TURN_BUDGET_MS = 800

pipeline = Pipeline(
    [
        transport.input(),
        DeepgramSTTService(api_key=DEEPGRAM_KEY, interim_results=True),
        AnthropicLLMService(model="claude-haiku-4-5", context=context),
        ElevenLabsTTSService(voice_id=VOICE_ID, optimize_latency=3),
        transport.output(),
    ]
)


@transport.event_handler("on_user_started_speaking")
async def barge_in(_transport, _participant):
    """Stop talking the moment the caller starts."""
    await pipeline.interrupt()

Languages

  • Python

AI models & providers

  • Anthropic Claude

Speech & voice

  • Deepgram
  • ElevenLabs
  • OpenAI Realtime
  • LiveKit
  • Pipecat
  • Twilio
  • SIP / WebRTC
The full inventory

Related work

  • Logistics · 2026

    A voice agent that handles the overnight queue

    An inbound voice agent for a freight operator, handling status enquiries and booking amendments outside staffed hours, with a clean handover into the morning queue.

    Overnight calls handled without a person
    • conversational voice ai
    • agentic ai
    • backend apis
    Read a voice agent that handles the overnight queue

Questions we get asked

How fast does it respond?

We set a turn-taking budget with you in Discover and hold the build to it, measuring each hop — transcription, retrieval, model, speech synthesis and transport — separately. We publish the measured number to you rather than a vendor's marketing figure.

Can it use our existing phone numbers?

Yes. We integrate over SIP or WebRTC with your carrier or contact-centre platform, so numbers, routing and escalation to a human queue keep working. An embeddable web widget can run from the same agent definition.

What happens when it cannot help?

It hands over to a person with the transcript, the caller's identity and what has already been tried, so nobody has to start again. Defining that boundary well is most of what makes a voice agent tolerable.

How do you handle recording consent and personal data?

Consent is captured in the flow before recording, personal data is redacted before anything reaches a model provider, retention is configurable per deployment, and every call leaves an audit trail. Regional pinning where residency requires it.

How is this different from Relay?

Relay is our own platform for launching voice and web agents. This service is the engineering around one — the integrations, the data work and the systems it has to talk to. Some clients use Relay, some want it built directly into their own stack.

Tell us what you are trying to ship.

A first call is 30 minutes and costs nothing. Bring the problem rather than a spec — the useful part is usually working out whether this is the right shape of solution at all.