Spaces:
Sleeping
Sleeping
import streamlit as st | |
import json | |
from openai import OpenAI | |
from pathlib import Path | |
import tempfile | |
import os | |
# Initialize OpenAI client with hardcoded API key | |
# WARNING: This is not secure and should only be used for testing | |
API_KEY = os.getenv("openai") | |
client = OpenAI(api_key=API_KEY) | |
# System prompt for GPT-4 | |
SYSTEM_PROMPT = """ | |
You are an AI assistant that converts user commands into structured JSON data. Your task is to interpret the user's intent and create a JSON object with relevant fields. Always include a 'response' field in the JSON with a friendly, conversational reply to the user's command. | |
For example: | |
User: "Play Taylor Swift on Spotify" | |
JSON: { | |
"action": "play music", | |
"application": "Spotify", | |
"artist": "Taylor Swift", | |
"response": "Sure, I'm playing Taylor Swift on Spotify for you now. Enjoy the music!" | |
} | |
User: "What's the weather like in New York?" | |
JSON: { | |
"action": "check weather", | |
"location": "New York", | |
"response": "I'm checking the weather in New York for you. One moment please." | |
} | |
Adapt the JSON structure to fit the context of the command, but always include the 'response' field. | |
""" | |
def process_command(command): | |
text=command | |
response = client.chat.completions.create( | |
model="gpt-4o", | |
messages=[ | |
{"role": "system", "content": SYSTEM_PROMPT}, | |
{"role": "user", "content": text} | |
] | |
) | |
print("Raw API Response:", response) | |
return json.loads(response.choices[0].message.content) | |
def text_to_speech(text): | |
speech_file_path = Path(tempfile.gettempdir()) / "speech.mp3" | |
response = client.audio.speech.create( | |
model="tts-1", | |
voice="nova", | |
input=text | |
) | |
response.stream_to_file(speech_file_path) | |
return speech_file_path | |
st.title("Text Command Assistant") | |
# Text input for user command | |
command = st.text_input("Enter your command:") | |
if st.button("Process Command"): | |
if command: | |
# Process the text command | |
with st.spinner("Processing command..."): | |
result = process_command(command) | |
# Display JSON result | |
st.json(result) | |
# Extract response and convert to speech | |
response_text = result["response"] | |
with st.spinner("Generating speech..."): | |
speech_file = text_to_speech(response_text) | |
# Play the generated speech | |
st.audio(str(speech_file)) | |
else: | |
st.warning("Please enter a command.") | |
st.markdown("---") | |
st.write("Created by Shrestha Singh") | |