| | import time |
| | from typing import Optional |
| |
|
| | from open_webui.apps.webui.internal.db import Base, get_db |
| | from pydantic import BaseModel, ConfigDict |
| | from sqlalchemy import BigInteger, Column, String, Text |
| |
|
| | |
| | |
| | |
| |
|
| |
|
| | class Prompt(Base): |
| | __tablename__ = "prompt" |
| |
|
| | command = Column(String, primary_key=True) |
| | user_id = Column(String) |
| | title = Column(Text) |
| | content = Column(Text) |
| | timestamp = Column(BigInteger) |
| |
|
| |
|
| | class PromptModel(BaseModel): |
| | command: str |
| | user_id: str |
| | title: str |
| | content: str |
| | timestamp: int |
| |
|
| | model_config = ConfigDict(from_attributes=True) |
| |
|
| |
|
| | |
| | |
| | |
| |
|
| |
|
| | class PromptForm(BaseModel): |
| | command: str |
| | title: str |
| | content: str |
| |
|
| |
|
| | class PromptsTable: |
| | def insert_new_prompt( |
| | self, user_id: str, form_data: PromptForm |
| | ) -> Optional[PromptModel]: |
| | prompt = PromptModel( |
| | **{ |
| | "user_id": user_id, |
| | "command": form_data.command, |
| | "title": form_data.title, |
| | "content": form_data.content, |
| | "timestamp": int(time.time()), |
| | } |
| | ) |
| |
|
| | try: |
| | with get_db() as db: |
| | result = Prompt(**prompt.dict()) |
| | db.add(result) |
| | db.commit() |
| | db.refresh(result) |
| | if result: |
| | return PromptModel.model_validate(result) |
| | else: |
| | return None |
| | except Exception: |
| | return None |
| |
|
| | def get_prompt_by_command(self, command: str) -> Optional[PromptModel]: |
| | try: |
| | with get_db() as db: |
| | prompt = db.query(Prompt).filter_by(command=command).first() |
| | return PromptModel.model_validate(prompt) |
| | except Exception: |
| | return None |
| |
|
| | def get_prompts(self) -> list[PromptModel]: |
| | with get_db() as db: |
| | return [ |
| | PromptModel.model_validate(prompt) for prompt in db.query(Prompt).all() |
| | ] |
| |
|
| | def update_prompt_by_command( |
| | self, command: str, form_data: PromptForm |
| | ) -> Optional[PromptModel]: |
| | try: |
| | with get_db() as db: |
| | prompt = db.query(Prompt).filter_by(command=command).first() |
| | prompt.title = form_data.title |
| | prompt.content = form_data.content |
| | prompt.timestamp = int(time.time()) |
| | db.commit() |
| | return PromptModel.model_validate(prompt) |
| | except Exception: |
| | return None |
| |
|
| | def delete_prompt_by_command(self, command: str) -> bool: |
| | try: |
| | with get_db() as db: |
| | db.query(Prompt).filter_by(command=command).delete() |
| | db.commit() |
| |
|
| | return True |
| | except Exception: |
| | return False |
| |
|
| |
|
| | Prompts = PromptsTable() |
| |
|