Skip to content

Instantly share code, notes, and snippets.

View kwindla's full-sized avatar

Kwindla Hultman Kramer kwindla

View GitHub Profile
@kwindla
kwindla / gemini-talk-transcript.py
Created May 6, 2025 15:43
Cleaned up talk transcript matched to onscreen slides
from google import genai
import os
client = genai.Client(api_key=os.getenv("GOOGLE_API_KEY"))
# filename_for_upload = "/Users/khkramer/Downloads/maven-lightning-trimmed.mp4"
# myfile = client.files.upload(file=filename_for_upload)
#
# print("My files:")
@kwindla
kwindla / daily-transport-double-transcription.py
Created April 28, 2025 01:36
Double transcription events test
# double transcription events
# pip install 'pipecat-ai[daily,silero,openai,cartesia]'==0.0.59 dotenv
#
# transcription events as expected
# pip install 'pipecat-ai[daily,silero,openai,cartesia]'==0.0.58 dotenv
import asyncio
import sys
import os
@kwindla
kwindla / gladia-tagalog-mixed.py
Created April 26, 2025 02:16
DailyTransport, Gladia, Tagalog / English mixed
#
# Copyright (c) 2024–2025, Daily
#
# SPDX-License-Identifier: BSD 2-Clause License
#
import argparse
import asyncio
import os
@kwindla
kwindla / openai-daily-transport-test.py
Created April 26, 2025 01:52
OpenAI STT -> LLM -> TTS
#
# Copyright (c) 2024–2025, Daily
#
# SPDX-License-Identifier: BSD 2-Clause License
#
import argparse
import asyncio
import os
@kwindla
kwindla / detective-story.py
Created April 23, 2025 22:48
OpenAI voice model detective story
import asyncio
from openai import AsyncOpenAI
from openai.helpers import LocalAudioPlayer
import wave
import numpy as np
openai = AsyncOpenAI()
@kwindla
kwindla / logs.txt
Created April 22, 2025 19:30
Startup logs for 07-interruptible
2025-04-22 12:27:57.538 | INFO | 07-interruptible:run_bot:28 - Starting bot
2025-04-22 12:27:57.538 | DEBUG | pipecat.audio.vad.silero:__init__:111 - Loading Silero VAD model...
2025-04-22 12:27:57.564 | DEBUG | pipecat.audio.vad.silero:__init__:133 - Loaded Silero VAD
2025-04-22 12:27:57.583 | DEBUG | pipecat.processors.frame_processor:link:177 - Linking PipelineSource#0 -> SmallWebRTCInputTransport#0
2025-04-22 12:27:57.583 | DEBUG | pipecat.processors.frame_processor:link:177 - Linking SmallWebRTCInputTransport#0 -> DeepgramSTTService#0
2025-04-22 12:27:57.583 | DEBUG | pipecat.processors.frame_processor:link:177 - Linking DeepgramSTTService#0 -> OpenAIUserContextAggregator#0
2025-04-22 12:27:57.583 | DEBUG | pipecat.processors.frame_processor:link:177 - Linking OpenAIUserContextAggregator#0 -> OpenAILLMService#0
2025-04-22 12:27:57.583 | DEBUG | pipecat.processors.frame_processor:link:177 - Linking OpenAILLMService#0 -> CartesiaTTSService#0
2025-04-22 12:27:57.583 | DEBUG | pip
@kwindla
kwindla / bot.py
Created March 13, 2025 21:18
Gemini Multimodal Live French tutor
import asyncio
import os
import sys
from dataclasses import dataclass
import aiohttp
from dotenv import load_dotenv
from loguru import logger
from pipecat.audio.vad.silero import SileroVADAnalyzer
@kwindla
kwindla / bot.py
Created March 11, 2025 19:45
Cartesia Sonic-2 Language Teacher
import asyncio
import os
import sys
from dataclasses import dataclass
import aiohttp
import google.ai.generativelanguage as glm
from dotenv import load_dotenv
from loguru import logger
from runner import configure
@kwindla
kwindla / 19b-azure-realtime-beta.py
Created March 1, 2025 23:15
Wrap Pipecat OpenAI Realtime API service to work with Azure WebSocket connection format
#
# Copyright (c) 2024–2025, Daily
#
# SPDX-License-Identifier: BSD 2-Clause License
#
import asyncio
import os
import sys
from datetime import datetime
@kwindla
kwindla / voice-agent-example.py
Last active February 11, 2025 18:47
Pipeline with lookup example
async def start_query_knowledge_base(function_name, llm, context):
"""Push a frame to the TTS service; this is handy when the LLM response might take a while."""
await llm.push_frame(TTSSpeakFrame("Please hold on while I look that order up for you."))
async def query_knowledge_base(function_name, tool_call_id, args, llm, context, result_callback):
query_result = knowledge_base.get(args["query"])
await result_callback({
"info": json.dumps({
"lookup_success": True,
"order_status": query_result["order_status"],