Spaces:
Sleeping
Sleeping
import streamlit as st | |
from openai import OpenAI | |
from dotenv import load_dotenv | |
import os | |
import requests | |
import hashlib | |
from git import Repo, exc | |
from crewai import Agent, Task, Crew | |
from langchain.tools import tool | |
# Load the OpenAI API key from the .env file | |
load_dotenv() | |
os.environ["OPENAI_API_KEY"] = userdata.get('OPENAI_API_KEY') | |
GITHUB_ACCESS_TOKEN = userdata.get('GITHUB_ACCESS_TOKEN') | |
# Initialize the OpenAI client | |
openai_client = OpenAI(api_key=os.getenv('OPENAI_API_KEY')) | |
def check_for_updates(repo_path, remote_name='origin', branch='main'): | |
""" | |
Check for updates in the specified Git repository using GitPython. | |
Input: repo_path - Path to the local git repository. | |
Output: A string indicating if updates are available or not. | |
""" | |
try: | |
# Open the existing repository | |
repo = Repo(repo_path) | |
if repo.bare: | |
raise Exception("Repository is bare.") | |
# Fetch updates from the remote repository | |
remote = repo.remotes[remote_name] | |
fetch_info = remote.fetch() | |
# Compare local and remote branches | |
local_commit = repo.heads[branch].commit | |
remote_commit = repo.refs[f'refs/remotes/{remote_name}/{branch}'].commit | |
if local_commit.hexsha != remote_commit.hexsha: | |
return "Updates are available." | |
else: | |
return "No updates available." | |
except exc.InvalidGitRepositoryError: | |
return "Invalid Git repository." | |
except Exception as e: | |
return f"Error: {str(e)}" | |
# Example usage | |
# repo_path = "/path/to/your/streamlit-repo" | |
# print(check_for_updates(repo_path)) | |
# Define the custom tool for GitHub interaction | |
def github_streamlit_expert() -> str: | |
""" | |
Interacts with the GitHub API to check for updates in the Streamlit repository. | |
Output: Summary of recent changes or a message indicating no updates. | |
""" | |
# Here, you'll implement the logic to interact with the GitHub API | |
# and summarize the latest changes in the Streamlit repository. | |
# This is a placeholder implementation. | |
return "Checked GitHub. No new updates." # Replace with actual implementation. | |
# Define the custom tool for checking Streamlit documentation updates | |
def check_streamlit_updates(previous_hash: str) -> str: | |
""" | |
Checks for updates in the Streamlit documentation. | |
Input: previous_hash - The hash of the previously known state of the documentation. | |
Output: A tuple containing a message indicating update status and the new hash. | |
""" | |
doc_url = 'https://docs.streamlit.io/' | |
response = requests.get(doc_url) | |
content = response.text | |
current_hash = hashlib.md5(content.encode()).hexdigest() | |
if current_hash != previous_hash: | |
return f'Updates found in Streamlit documentation. New Hash: {current_hash}', current_hash | |
else: | |
return 'No updates in Streamlit documentation.', current_hash | |
# Define the Streamlit Documentation and GitHub Expert agent | |
streamlit_expert = Agent( | |
role='Streamlit Documentation and GitHub Expert', | |
goal='Stay updated with the latest Streamlit documentation and GitHub repository changes', | |
backstory='An AI agent specialized in monitoring and reporting the latest changes in Streamlit documentation and repository.', | |
tools=[check_streamlit_updates, github_streamlit_expert], | |
verbose=True | |
) | |
# Define a task for checking updates | |
update_task = Task( | |
description='Check for updates in the Streamlit documentation.', | |
agent=streamlit_expert | |
) | |
# Define a crew with the Streamlit Documentation Expert | |
crew = Crew( | |
agents=[streamlit_expert], | |
tasks=[update_task], | |
verbose=True | |
) | |
# Streamlit app setup | |
# Initialize a list to store chat history | |
chat_history = [] | |
# Streamlit app setup | |
st.title('CrewAI Streamlit Expert - Chat Interface') | |
# Chat input | |
user_query = st.text_input("Your question:", key="user_input") | |
if st.button("Ask"): | |
# Create a task for the streamlit_expert | |
user_task = Task(description=user_query, agent=streamlit_expert) | |
# Add the task to crew and kickoff | |
crew.tasks.append(user_task) | |
response = crew.kickoff() | |
# Update chat history | |
chat_history.append(f"You: {user_query}") | |
chat_history.append(f"Streamlit Expert: {response}") | |
# Display chat history | |
for chat in chat_history: | |
st.text(chat) | |
# Button to check for updates in the Streamlit GitHub repository | |
if st.button('Check for Streamlit GitHub Updates'): | |
repo_path = "/path/to/your/streamlit-repo" # Path to your local Streamlit repository | |
update_status = check_for_updates(repo_path) | |
st.write(update_status) | |
if "Updates are available" in update_status: | |
pass | |
# Optionally, trigger further actions like updating the local repo or analyzing changes | |
# For example: | |
# response = analyze_new_changes(repo_path) | |
# st.write(response) | |