xbt / app.py
aidevhund's picture
Update app.py
c7bc262 verified
raw
history blame
3.84 kB
import gradio as gr
from openai import OpenAI
import os
from crewai import Agent, Task, Crew, Process
from langchain_community.tools.tavily_search import TavilySearchResults
# Environment Variables
ACCESS_TOKEN = os.getenv("HF_TOKEN")
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY")
# OpenAI Client Initialization
client = OpenAI(
base_url="https://api-inference.huggingface.co/v1/",
api_key=ACCESS_TOKEN,
)
# Search Tool Initialization
search_tool = TavilySearchResults(tavily_api_key=TAVILY_API_KEY)
# 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.
"""
# CrewAI Integration
llm = client # Using the OpenAI client for CrewAI agents
def run_crypto_crew(topic):
researcher = Agent(
role='Market Researcher',
goal=f'Uncover emerging trends and investment opportunities in the cryptocurrency market. Focus on the topic: {topic}.',
backstory='Identify groundbreaking trends and actionable insights.',
verbose=True,
tools=[search_tool],
allow_delegation=False,
llm=llm,
max_iter=3,
max_rpm=10,
)
analyst = Agent(
role='Investment Analyst',
goal=f'Analyze cryptocurrency market data to extract actionable insights. Focus on the topic: {topic}.',
backstory='Draw meaningful conclusions from cryptocurrency market data.',
verbose=True,
allow_delegation=False,
llm=llm,
)
research_task = Task(
description=f'Explore the internet to identify trends and investment opportunities. Topic: {topic}.',
agent=researcher,
expected_output='Detailed summary of research results.'
)
analyst_task = Task(
description=f'Analyze the market data to compile a concise report. Topic: {topic}.',
agent=analyst,
expected_output='Finalized version of the analysis report.'
)
crypto_crew = Crew(
agents=[researcher, analyst],
tasks=[research_task, analyst_task],
process=Process.sequential
)
result = crypto_crew.kickoff()
return result.raw
# Chatbot Response Function
def respond(message, history):
max_tokens = 512
temperature = 0.3
top_p = 0.95
frequency_penalty = 0.0
seed = None
if "analyze" in message.lower() or "trend" in message.lower():
response = run_crypto_crew(message)
yield response
else:
messages = [{"role": "system", "content": SYSTEM_PROMPT}]
for user_part, assistant_part in history:
if user_part:
messages.append({"role": "user", "content": user_part})
if assistant_part:
messages.append({"role": "assistant", "content": assistant_part})
messages.append({"role": "user", "content": message})
response = ""
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
# Gradio UI
chatbot = gr.Chatbot(height=600, show_copy_button=True, placeholder="Ask about crypto trading or analysis.")
demo = gr.ChatInterface(
fn=respond,
fill_height=True,
chatbot=chatbot,
)
if __name__ == "__main__":
demo.launch()