voiceCal / integration_example.py
Peter Michael Gits
feat: Deploy complete VoiceCal application with all files v0.5.6
5e8a657
"""
Integration example showing how to use both fallback solutions
"""
# In calendar_service.py - OAuth integration
from oauth_persistence import save_oauth_token_after_auth, load_oauth_token_on_startup
async def handle_oauth_callback(self, user_email: str, auth_code: str):
"""Handle OAuth callback and store refresh token"""
# Existing OAuth flow
credentials = self.flow.fetch_token(authorization_response=auth_code)
# NEW: Store refresh token persistently
await save_oauth_token_after_auth(user_email, credentials)
return credentials
async def startup_restore_tokens(self):
"""Restore tokens on app startup"""
user_email = config.my_email_address
refresh_token = await load_oauth_token_on_startup(user_email)
if refresh_token:
# Restore credentials from refresh token
self.credentials = self._create_credentials_from_refresh_token(refresh_token)
# In chat_agent.py - LlamaIndex replacement
from fallback_llm import direct_llm
class ChatCalAgent:
def __init__(self):
# OLD: self.llm = get_llm() # LlamaIndex version
# NEW: Use direct LLM provider
self.llm_provider = direct_llm
self.calendar_service = CalendarService()
async def _handle_general_conversation(self, message: str, session: SessionData) -> str:
"""Handle general conversation with direct LLM"""
messages = [
{"role": "system", "content": SYSTEM_PROMPT.format(...)},
*[{"role": msg["role"], "content": msg["content"]}
for msg in session.conversation_history[-10:]]
]
# NEW: Direct LLM call (no LlamaIndex)
response = await self.llm_provider.chat(messages)
session.add_message("assistant", response)
return response
# In requirements.txt - Simplified dependencies
"""
# Remove these LlamaIndex dependencies:
# llama-index==0.11.0
# llama-index-llms-groq==0.2.0
# llama-index-llms-anthropic==0.3.0
# llama-index-tools-google==0.2.0
# Keep only direct API clients:
groq==0.9.0
anthropic==0.34.0
google-generativeai==0.5.2
google-cloud-secret-manager==2.20.0
# Remove problematic pydantic constraint:
# pydantic==2.8.2 # No longer needed!
"""