GitHubSentinel / src /gradio_server.py
DjangoPeng's picture
add GitHubSentinel v0.8.2
3851ff8
import gradio as gr # 导入gradio库用于创建GUI
from config import Config # 导入配置管理模块
from github_client import GitHubClient # 导入用于GitHub API操作的客户端
from hacker_news_client import HackerNewsClient
from report_generator import ReportGenerator # 导入报告生成器模块
from llm import LLM # 导入可能用于处理语言模型的LLM类
from subscription_manager import SubscriptionManager # 导入订阅管理器
from logger import LOG # 导入日志记录器
# 创建各个组件的实例
config = Config()
github_client = GitHubClient(config.github_token)
hacker_news_client = HackerNewsClient() # 创建 Hacker News 客户端实例
subscription_manager = SubscriptionManager(config.subscriptions_file)
def generate_github_report(model_type, model_name, repo, days):
config.llm_model_type = model_type
if model_type == "openai":
config.openai_model_name = model_name
else:
config.ollama_model_name = model_name
llm = LLM(config) # 创建语言模型实例
report_generator = ReportGenerator(llm, config.report_types) # 创建报告生成器实例
# 定义一个函数,用于导出和生成指定时间范围内项目的进展报告
raw_file_path = github_client.export_progress_by_date_range(repo, days) # 导出原始数据文件路径
report, report_file_path = report_generator.generate_github_report(raw_file_path) # 生成并获取报告内容及文件路径
return report, report_file_path # 返回报告内容和报告文件路径
def generate_hn_hour_topic(model_type, model_name):
config.llm_model_type = model_type
if model_type == "openai":
config.openai_model_name = model_name
else:
config.ollama_model_name = model_name
llm = LLM(config) # 创建语言模型实例
report_generator = ReportGenerator(llm, config.report_types) # 创建报告生成器实例
markdown_file_path = hacker_news_client.export_top_stories()
report, report_file_path = report_generator.generate_hn_topic_report(markdown_file_path)
return report, report_file_path # 返回报告内容和报告文件路径
# 定义一个回调函数,用于根据 Radio 组件的选择返回不同的 Dropdown 选项
def update_model_list(model_type):
if model_type == "openai":
return gr.Dropdown(choices=["gpt-4o", "gpt-4o-mini", "gpt-3.5-turbo"], label="选择模型")
elif model_type == "ollama":
return gr.Dropdown(choices=["llama3.1", "gemma2:2b", "qwen2:7b"], label="选择模型")
# 创建 Gradio 界面
with gr.Blocks(title="GitHubSentinel") as demo:
# 创建 GitHub 项目进展 Tab
with gr.Tab("GitHub 项目进展"):
gr.Markdown("## GitHub 项目进展") # 添加小标题
# 创建 Radio 组件
model_type = gr.Radio(["openai", "ollama"], label="模型类型", info="使用 OpenAI GPT API 或 Ollama 私有化模型服务")
# 创建 Dropdown 组件
model_name = gr.Dropdown(choices=["gpt-4o", "gpt-4o-mini", "gpt-3.5-turbo"], label="选择模型")
# 创建订阅列表的 Dropdown 组件
subscription_list = gr.Dropdown(subscription_manager.list_subscriptions(), label="订阅列表", info="已订阅GitHub项目")
# 创建 Slider 组件
days = gr.Slider(value=2, minimum=1, maximum=7, step=1, label="报告周期", info="生成项目过去一段时间进展,单位:天")
# 使用 radio 组件的值来更新 dropdown 组件的选项
model_type.change(fn=update_model_list, inputs=model_type, outputs=model_name)
# 创建按钮来生成报告
button = gr.Button("生成报告")
# 设置输出组件
markdown_output = gr.Markdown()
file_output = gr.File(label="下载报告")
# 将按钮点击事件与导出函数绑定
button.click(generate_github_report, inputs=[model_type, model_name, subscription_list, days], outputs=[markdown_output, file_output])
# 创建 Hacker News 热点话题 Tab
with gr.Tab("Hacker News 热点话题"):
gr.Markdown("## Hacker News 热点话题") # 添加小标题
# 创建 Radio 组件
model_type = gr.Radio(["openai", "ollama"], label="模型类型", info="使用 OpenAI GPT API 或 Ollama 私有化模型服务")
# 创建 Dropdown 组件
model_name = gr.Dropdown(choices=["gpt-4o", "gpt-4o-mini", "gpt-3.5-turbo"], label="选择模型")
# 使用 radio 组件的值来更新 dropdown 组件的选项
model_type.change(fn=update_model_list, inputs=model_type, outputs=model_name)
# 创建按钮来生成报告
button = gr.Button("生成最新热点话题")
# 设置输出组件
markdown_output = gr.Markdown()
file_output = gr.File(label="下载报告")
# 将按钮点击事件与导出函数绑定
button.click(generate_hn_hour_topic, inputs=[model_type, model_name,], outputs=[markdown_output, file_output])
if __name__ == "__main__":
demo.launch(share=True, server_name="0.0.0.0") # 启动界面并设置为公共可访问
# 可选带有用户认证的启动方式
# demo.launch(share=True, server_name="0.0.0.0", auth=("django", "1234"))