|
import gradio as gr |
|
import requests |
|
import json |
|
|
|
def get_chat_response(api_key, user_input, history): |
|
""" |
|
Sends the user input to the Fireworks AI API using the provided API key |
|
and retrieves the assistant's response. |
|
|
|
Args: |
|
api_key (str): User-provided Fireworks AI API key. |
|
user_input (str): The message input by the user. |
|
history (list): The conversation history. |
|
|
|
Returns: |
|
tuple: Updated conversation history with the assistant's response. |
|
""" |
|
url = "https://api.fireworks.ai/inference/v1/chat/completions" |
|
|
|
payload = { |
|
"model": "accounts/fireworks/models/llama-v3p1-405b-instruct", |
|
"max_tokens": 16384, |
|
"top_p": 1, |
|
"top_k": 40, |
|
"presence_penalty": 0, |
|
"frequency_penalty": 0, |
|
"temperature": 0.6, |
|
"messages": [ |
|
{ |
|
"role": "user", |
|
"content": user_input |
|
} |
|
] |
|
} |
|
|
|
headers = { |
|
"Accept": "application/json", |
|
"Content-Type": "application/json", |
|
"Authorization": f"Bearer {api_key}" |
|
} |
|
|
|
try: |
|
response = requests.post(url, headers=headers, data=json.dumps(payload)) |
|
response.raise_for_status() |
|
response_data = response.json() |
|
|
|
|
|
if "choices" in response_data and len(response_data["choices"]) > 0: |
|
assistant_reply = response_data["choices"][0]["message"]["content"] |
|
else: |
|
assistant_reply = "No response from the assistant." |
|
|
|
except requests.exceptions.HTTPError as http_err: |
|
assistant_reply = f"HTTP error occurred: {http_err}" |
|
except Exception as err: |
|
assistant_reply = f"An error occurred: {err}" |
|
|
|
|
|
history = history + [[user_input, assistant_reply]] |
|
return history, history |
|
|
|
def set_api_key(api_key): |
|
""" |
|
Stores the user's API key. |
|
|
|
Args: |
|
api_key (str): User-provided Fireworks AI API key. |
|
|
|
Returns: |
|
tuple: Stored API key and confirmation message. |
|
""" |
|
if api_key: |
|
return api_key, "✅ API Key has been set." |
|
else: |
|
return "", "❌ Please enter a valid API key." |
|
|
|
def send_message(user_input, history, api_key): |
|
""" |
|
Handles sending messages to the chatbot. |
|
|
|
Args: |
|
user_input (str): The message input by the user. |
|
history (list): The conversation history. |
|
api_key (str): User-provided Fireworks AI API key. |
|
|
|
Returns: |
|
tuple: Updated conversation history with the assistant's response. |
|
""" |
|
if not api_key: |
|
assistant_reply = "❌ Please enter your Fireworks AI API key above." |
|
history = history + [[user_input, assistant_reply]] |
|
return history, history |
|
|
|
return get_chat_response(api_key, user_input, history) |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown( |
|
""" |
|
# 🪄 Fireworks AI Chatbot |
|
Interact with the Fireworks AI chatbot powered by the LLaMA model. |
|
Enter your **Fireworks AI API key** and your messages below to receive responses in real-time. |
|
""" |
|
) |
|
|
|
with gr.Row(): |
|
with gr.Column(scale=7): |
|
api_key_input = gr.Textbox( |
|
label="🔑 Fireworks AI API Key", |
|
placeholder="Enter your API key here...", |
|
type="password", |
|
lines=1 |
|
) |
|
with gr.Column(scale=3): |
|
set_key_button = gr.Button("Set API Key") |
|
|
|
|
|
api_key_status = gr.Textbox( |
|
label="API Key Status", |
|
interactive=False, |
|
lines=1, |
|
value="" |
|
) |
|
|
|
chatbot = gr.Chatbot(label="💬 Chatbot") |
|
|
|
with gr.Row(): |
|
with gr.Column(scale=8): |
|
user_input = gr.Textbox( |
|
placeholder="Type your message here...", |
|
label="📝 Your Message", |
|
lines=1 |
|
) |
|
with gr.Column(scale=2): |
|
send_button = gr.Button("Send") |
|
|
|
|
|
with gr.Accordion("💡 Examples", open=False): |
|
examples = gr.Examples( |
|
examples=[ |
|
"Tell me a joke.", |
|
"Explain the theory of relativity.", |
|
"How does photosynthesis work?", |
|
"What's the capital of France?" |
|
], |
|
inputs=user_input, |
|
label="Click an example to use it" |
|
) |
|
|
|
|
|
history = gr.State([]) |
|
stored_api_key = gr.State("") |
|
|
|
|
|
set_key_button.click( |
|
fn=set_api_key, |
|
inputs=api_key_input, |
|
outputs=[stored_api_key, api_key_status] |
|
) |
|
|
|
|
|
send_button.click( |
|
fn=send_message, |
|
inputs=[user_input, history, stored_api_key], |
|
outputs=[chatbot, history] |
|
) |
|
|
|
|
|
user_input.submit( |
|
fn=send_message, |
|
inputs=[user_input, history, stored_api_key], |
|
outputs=[chatbot, history] |
|
) |
|
|
|
gr.Markdown( |
|
""" |
|
--- |
|
**ℹ️ Note**: Ensure you have a valid Fireworks AI API key. You can obtain one from [Fireworks AI](https://fireworks.ai/). |
|
""" |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |