
- 为 model_id、base_url 和 api_key 添加空值检查,避免无效输入 - 添加异常处理,确保在出现错误时能够及时响应并提示用户 - 优化 add_provider 函数,提高代码可读性和健壮性
68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
import gradio as gr
|
|
from typing import List, Dict
|
|
from sqlmodel import Session, select
|
|
from db import get_engine
|
|
from schema import APIProvider
|
|
import os
|
|
|
|
# 获取数据库引擎
|
|
engine = get_engine(os.path.join(os.path.dirname(__file__), "..", "workdir"))
|
|
|
|
def setting_page():
|
|
def get_providers() -> List[List[str]]:
|
|
with Session(engine) as session:
|
|
providers = session.exec(select(APIProvider)).all()
|
|
return [
|
|
[p.id, p.model_id, p.base_url, p.api_key or ""]
|
|
for p in providers
|
|
]
|
|
|
|
def add_provider(model_id, base_url, api_key):
|
|
try:
|
|
with Session(engine) as session:
|
|
new_provider = APIProvider(
|
|
model_id=model_id if model_id else None,
|
|
base_url=base_url if base_url else None,
|
|
api_key=api_key if api_key else None
|
|
)
|
|
session.add(new_provider)
|
|
session.commit()
|
|
session.refresh(new_provider)
|
|
return get_providers()
|
|
except Exception as e:
|
|
# 抛出错误提示
|
|
raise gr.Error(f"添加失败: {str(e)}")
|
|
|
|
with gr.Blocks() as demo:
|
|
gr.Markdown("## API Provider 管理")
|
|
|
|
with gr.Row():
|
|
with gr.Column(scale=1):
|
|
|
|
model_id_input = gr.Textbox(label="Model ID")
|
|
base_url_input = gr.Textbox(label="Base URL")
|
|
api_key_input = gr.Textbox(label="API Key")
|
|
add_button = gr.Button("添加新API")
|
|
|
|
# API Provider列表
|
|
with gr.Column(scale=3):
|
|
provider_table = gr.DataFrame(
|
|
headers=["id" , "model id", "base URL", "API Key"],
|
|
datatype=["number","str", "str", "str"],
|
|
interactive=True,
|
|
value=get_providers(),
|
|
wrap=True,
|
|
col_count=(4, "auto")
|
|
)
|
|
with gr.Row():
|
|
edit_button = gr.Button("编辑选中行")
|
|
delete_button = gr.Button("删除选中行")
|
|
|
|
|
|
add_button.click(
|
|
fn=add_provider,
|
|
inputs=[model_id_input, base_url_input, api_key_input],
|
|
outputs=[provider_table]
|
|
)
|
|
|
|
return demo |