xbt / app.py
aidevhund's picture
Update app.py
c181c4d verified
raw
history blame
3.34 kB
import gradio as gr
from openai import OpenAI
import os
ACCESS_TOKEN = os.getenv("HF_TOKEN")
print("Access token loaded.")
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY")
client = OpenAI(
base_url="https://api-inference.huggingface.co/v1/",
api_key=ACCESS_TOKEN,
)
print("OpenAI client initialized.")
# Search Tool
from langchain_community.tools.tavily_search import TavilySearchResults
search_tool = TavilySearchResults(tavily_api_key=TAVILY_API_KEY)
# Define a comprehensive system prompt
SYSTEM_PROMPT = """
You are a highly knowledgeable and reliable Crypto Trading Advisor and Analyzer.
Your goal is to assist users in understanding, analyzing, and making informed decisions about cryptocurrency trading.
You provide accurate, concise, and actionable advice based on real-time data, historical trends, and established best practices.
"""
# Function to handle chatbot responses
def respond(
message,
history: list[tuple[str, str]],
max_tokens,
temperature,
top_p,
frequency_penalty,
seed
):
print(f"Received message: {message}")
print(f"History: {history}")
# Convert seed to None if -1 (meaning random)
if seed == -1:
seed = None
messages = [{"role": "system", "content": SYSTEM_PROMPT}]
print("System prompt added to messages.")
# Add conversation history to the context
for val in history:
user_part = val[0]
assistant_part = val[1]
if user_part:
messages.append({"role": "user", "content": user_part})
if assistant_part:
messages.append({"role": "assistant", "content": assistant_part})
# Append the latest user message
messages.append({"role": "user", "content": message})
# Start response generation
response = ""
print("Sending request to OpenAI API.")
for message_chunk in client.chat.completions.create(
model="meta-llama/Llama-3.3-70B-Instruct",
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
frequency_penalty=frequency_penalty,
seed=seed,
messages=messages,
):
token_text = message_chunk.choices[0].delta.content
response += token_text
yield response
print("Completed response generation.")
# Gradio UI
chatbot = gr.Chatbot(height=600, show_copy_button=True, placeholder="Ask about crypto trading or analysis.", likeable=True)
max_tokens_slider = gr.Slider(
minimum=1,
maximum=4096,
value=512,
step=1,
label="Max new tokens"
)
temperature_slider = gr.Slider(
minimum=0.1,
maximum=4.0,
value=0.7,
step=0.1,
label="Temperature"
)
top_p_slider = gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-P"
)
frequency_penalty_slider = gr.Slider(
minimum=-2.0,
maximum=2.0,
value=0.0,
step=0.1,
label="Frequency Penalty"
)
seed_slider = gr.Slider(
minimum=-1,
maximum=65535,
value=-1,
step=1,
label="Seed (-1 for random)"
)
demo = gr.ChatInterface(
fn=respond,
additional_inputs=[
max_tokens_slider,
temperature_slider,
top_p_slider,
frequency_penalty_slider,
seed_slider,
],
fill_height=True,
chatbot=chatbot,
)
if __name__ == "__main__":
demo.launch()