File size: 3,267 Bytes
ad5e7c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import os
from groq import Groq
import streamlit as st
from dotenv import load_dotenv

# Load API key from .env file
load_dotenv()
api_key = os.getenv("GROQ_API_KEY")

# Initialize the Groq client
client = Groq(api_key=api_key)

# Define the programming development topics for the chatbot
developer_topics = [
    "best programming languages", "web development frameworks", "version control with Git", 
    "debugging tips", "data structures and algorithms", "object-oriented programming", 
    "functional programming", "software design patterns", "API design and development", 
    "devops practices", "cloud computing", "front-end development", "back-end development", 
    "machine learning", "deep learning", "software testing and QA", "agile methodologies", 
    "CI/CD pipelines", "database design", "programming best practices", "security in development", 
    "mobile app development", "project management for developers", "open source contribution", 
    "developer tools and IDEs", "documentation and code commenting", "coding interview preparation"
]

# Function to fetch chatbot completion from Groq API
def get_response(query):
    completion = client.chat.completions.create(
        model="llama-3.3-70b-versatile",
        messages=[{"role": "user", "content": query}],
        temperature=0.7,
        max_completion_tokens=1024,
        top_p=1,
    )
    response = completion.choices[0].message.content
    return response

# Function to transcribe audio using Whisper model
def transcribe_audio(file):
    transcription = client.audio.transcriptions.create(
        file=(file.name, file.read()),
        model="whisper-large-v3-turbo",
        response_format="verbose_json"
    )
    return transcription.text

def main():
    st.title("Programming Developer Advisor Chatbot")

    # Let the user choose a developer-related topic or type a custom query
    topic = st.selectbox("Choose a programming topic", developer_topics)
    user_input = st.text_area("Or ask a programming-related question:", "")

    # Audio file uploader
    uploaded_file = st.file_uploader("Upload an audio file for transcription", type=["m4a", "mp3", "wav"])

    # If an audio file is uploaded, transcribe it and use the transcription for querying
    if uploaded_file is not None:
        st.write("Transcribing the audio...")
        transcription = transcribe_audio(uploaded_file)
        st.write("Transcribed text:")
        st.write(transcription)

        # Use the transcribed text as the query for the chatbot if no custom query was provided
        query = transcription if not user_input else user_input

        # Get response from the chatbot based on the query
        if query:
            response = get_response(query)
            st.write("### Response:")
            st.write(response)
    
    # If the user provides a query (not from audio), use that directly
    elif user_input:
        query = user_input
        response = get_response(query)
        st.write("### Response:")
        st.write(response)

    # Handle unrelated queries
    if user_input and not any(topic in user_input.lower() for topic in developer_topics):
        st.write("Sorry, I can only answer programming-related questions.")

if __name__ == "__main__":
    main()