File size: 5,672 Bytes
6f050d2
2f22113
 
550f98e
ac1d1c0
 
6f050d2
b64c343
 
663780e
b64c343
663780e
b64c343
ac1d1c0
 
 
d1c5d37
 
862323b
663780e
d1c5d37
550f98e
 
d1c5d37
862323b
2f22113
550f98e
663780e
550f98e
 
 
ac1d1c0
 
 
 
 
 
 
 
1c6ad60
ac1d1c0
 
1c6ad60
d6cad0d
ac1d1c0
 
1c6ad60
 
ac1d1c0
 
550f98e
 
ac1d1c0
550f98e
 
 
b64c343
1c6ad60
b64c343
550f98e
 
1c6ad60
ac1d1c0
 
 
 
 
 
 
d1c5d37
1c6ad60
 
550f98e
2f22113
1c6ad60
7103644
ac1d1c0
 
 
d1c5d37
ac1d1c0
d1c5d37
1c6ad60
ac1d1c0
 
 
1c6ad60
 
 
 
 
ac1d1c0
663780e
1c6ad60
663780e
1c6ad60
 
663780e
51d2e5a
1c6ad60
 
6f050d2
1c6ad60
 
 
 
 
 
 
 
e480a63
1c6ad60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac1d1c0
 
1c6ad60
 
 
 
 
 
 
 
2f22113
1c6ad60
550f98e
1c6ad60
 
 
550f98e
1c6ad60
 
 
 
7108e4b
4a5989e
550f98e
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import gradio as gr
import requests
import os
import json
from typing import List, Dict
from datetime import datetime

# Groq API Configuration
API_URL = "https://api.groq.com/openai/v1/chat/completions"
API_KEY = os.getenv("GROQ_API_KEY")

print(f"πŸ”‘ API Key Found: {'Yes' if API_KEY else 'No'}")

# In-memory chat history storage
chat_history: List[Dict[str, str]] = []

def groq_with_memory(message: str, topic: str = "general", summarize: bool = False, max_history: int = 10) -> str:
    """Groq API call with chat history and optional summarization"""
    
    if not API_KEY:
        return "❌ No API Key found"
    
    if not message.strip():
        return "❌ Empty message"
    
    try:
        headers = {
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        }
        
        # Add current message to history with timestamp and topic
        chat_history.append({
            "role": "user",
            "content": message.strip(),
            "topic": topic,
            "timestamp": datetime.now().isoformat()
        })
        
        # Limit history to max_history messages
        recent_history = chat_history[-max_history:]
        
        # Prepare messages for API call
        messages = [{"role": msg["role"], "content": msg["content"]} for msg in recent_history]
        
        if summarize:
            summary_prompt = f"Summarize this conversation about '{topic}':\n\n"
            summary_prompt += "\n".join([f"{msg['role']}: {msg['content']}" for msg in recent_history])
            messages.append({"role": "user", "content": summary_prompt})
        
        payload = {
            "model": "llama3-8b-8192",
            "messages": messages,
            "max_tokens": 512,
            "temperature": 0.7
        }
        
        response = requests.post(API_URL, headers=headers, json=payload, timeout=30)
        
        if response.status_code == 200:
            result = response.json()
            if "choices" in result and result["choices"]:
                response_content = result["choices"][0]["message"]["content"]
                chat_history.append({
                    "role": "assistant",
                    "content": response_content,
                    "topic": topic,
                    "timestamp": datetime.now().isoformat()
                })
                return response_content
            return f"❌ No choices in response: {result}"
        return f"❌ HTTP {response.status_code}: {response.text}"
            
    except Exception as e:
        return f"❌ Error: {str(e)}"

def clear_history():
    """Clear the chat history"""
    chat_history.clear()
    return "βœ… Chat history cleared"

def view_history(topic: str = None):
    """View chat history with optional topic filter"""
    if not chat_history:
        return "❌ No chat history available"
    
    filtered = [msg for msg in chat_history if topic is None or msg["topic"] == topic]
    return "\n".join(
        f"[{msg['timestamp']}] {msg['role'].capitalize()}: {msg['content']}"
        for msg in filtered
    )

def manual_curl_example():
    """Generate example curl command"""
    if not API_KEY:
        return "❌ No API key available"
    return f"""curl -X POST "{API_URL}" \\
  -H "Authorization: Bearer {API_KEY}" \\
  -H "Content-Type: application/json" \\
  -d '{{"model": "llama3-8b-8192", "messages": [{{"role": "user", "content": "Hello"}}]}}'
"""

def process_message(message: str, topic: str, summarize: bool):
    """Process message and clear input"""
    response = groq_with_memory(message, topic, summarize)
    return response, ""

# Gradio Interface
with gr.Blocks(title="Groq Chat Debugger") as demo:
    gr.Markdown("## πŸ’¬ Groq API Chat Interface")
    
    with gr.Tab("Chat"):
        with gr.Row():
            with gr.Column():
                msg_input = gr.Textbox(
                    label="Your Message", 
                    value="Hello, how can you help me today?"
                )
                topic_input = gr.Textbox(
                    label="Topic", 
                    value="general"
                )
                summarize_cb = gr.Checkbox(label="Summarize conversation")
                send_btn = gr.Button("Send", variant="primary")
                
            with gr.Column():
                response_output = gr.Textbox(
                    label="Response", 
                    lines=10,
                    interactive=False
                )
        
        send_btn.click(
            process_message,
            inputs=[msg_input, topic_input, summarize_cb],
            outputs=[response_output, msg_input]
        )
    
    with gr.Tab("History"):
        history_topic = gr.Textbox(label="Filter by Topic")
        view_btn = gr.Button("View History")
        clear_btn = gr.Button("Clear History", variant="stop")
        history_output = gr.Textbox(label="Chat History", lines=10)
        
        view_btn.click(view_history, inputs=[history_topic], outputs=[history_output])
        clear_btn.click(clear_history, outputs=[history_output])
    
    with gr.Tab("API Tools"):
        gr.Markdown(f"""
        **API Status:** {'βœ… Ready' if API_KEY else '❌ No API Key'}
        **Endpoint:** `{API_URL}`
        **Models:** `llama3-8b-8192`, `llama3-70b-8192`, `mixtral-8x7b-32768`
        """)
        
        curl_btn = gr.Button("Generate cURL Example")
        curl_output = gr.Code(label="cURL Command", language="bash")
        curl_btn.click(manual_curl_example, outputs=[curl_output])

if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=7860)