diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e3e331ba..76939def1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.19] - 2024-09-05 + +### Added + +- **🌐 Translation Update**: Improved Chinese translations. + +### Fixed + +- **📂 DATA_DIR Overriding**: Fixed an issue to avoid overriding DATA_DIR, preventing errors when directories are set identically, ensuring smoother operation and data management. +- **🛠️ Frontmatter Extraction**: Fixed the extraction process for frontmatter in tools and functions. + +### Changed + +- **🎨 UI Styling**: Refined the user interface styling for enhanced visual coherence and user experience. + ## [0.3.18] - 2024-09-04 ### Added diff --git a/backend/open_webui/apps/webui/main.py b/backend/open_webui/apps/webui/main.py index 074b3144c..45fe3cad9 100644 --- a/backend/open_webui/apps/webui/main.py +++ b/backend/open_webui/apps/webui/main.py @@ -152,29 +152,33 @@ async def get_pipe_models(): # Check if function is a manifold if hasattr(function_module, "pipes"): - manifold_pipes = [] + sub_pipes = [] # Check if pipes is a function or a list - if callable(function_module.pipes): - manifold_pipes = function_module.pipes() - else: - manifold_pipes = function_module.pipes - for p in manifold_pipes: - manifold_pipe_id = f'{pipe.id}.{p["id"]}' - manifold_pipe_name = p["name"] + try: + if callable(function_module.pipes): + sub_pipes = function_module.pipes() + else: + sub_pipes = function_module.pipes + except Exception as e: + log.exception(e) + sub_pipes = [] + + print(sub_pipes) + + for p in sub_pipes: + sub_pipe_id = f'{pipe.id}.{p["id"]}' + sub_pipe_name = p["name"] if hasattr(function_module, "name"): - manifold_pipe_name = f"{function_module.name}{manifold_pipe_name}" + sub_pipe_name = f"{function_module.name}{sub_pipe_name}" pipe_flag = {"type": pipe.type} - if hasattr(function_module, "ChatValves"): - pipe_flag["valves_spec"] = function_module.ChatValves.schema() - pipe_models.append( { - "id": manifold_pipe_id, - "name": manifold_pipe_name, + "id": sub_pipe_id, + "name": sub_pipe_name, "object": "model", "created": pipe.created_at, "owned_by": "openai", @@ -183,8 +187,6 @@ async def get_pipe_models(): ) else: pipe_flag = {"type": "pipe"} - if hasattr(function_module, "ChatValves"): - pipe_flag["valves_spec"] = function_module.ChatValves.schema() pipe_models.append( { diff --git a/backend/open_webui/apps/webui/utils.py b/backend/open_webui/apps/webui/utils.py index bdcd05bb3..2b017bf43 100644 --- a/backend/open_webui/apps/webui/utils.py +++ b/backend/open_webui/apps/webui/utils.py @@ -11,9 +11,9 @@ from open_webui.apps.webui.models.tools import Tools from open_webui.config import FUNCTIONS_DIR, TOOLS_DIR -def extract_frontmatter(file_path): +def extract_frontmatter(content): """ - Extract frontmatter as a dictionary from the specified file path. + Extract frontmatter as a dictionary from the provided content string. """ frontmatter = {} frontmatter_started = False @@ -21,29 +21,25 @@ def extract_frontmatter(file_path): frontmatter_pattern = re.compile(r"^\s*([a-z_]+):\s*(.*)\s*$", re.IGNORECASE) try: - with open(file_path, "r", encoding="utf-8") as file: - first_line = file.readline() - if first_line.strip() != '"""': - # The file doesn't start with triple quotes - return {} + lines = content.splitlines() + if len(lines) < 1 or lines[0].strip() != '"""': + # The content doesn't start with triple quotes + return {} - frontmatter_started = True + frontmatter_started = True - for line in file: - if '"""' in line: - if frontmatter_started: - frontmatter_ended = True - break + for line in lines[1:]: + if '"""' in line: + if frontmatter_started: + frontmatter_ended = True + break - if frontmatter_started and not frontmatter_ended: - match = frontmatter_pattern.match(line) - if match: - key, value = match.groups() - frontmatter[key.strip()] = value.strip() + if frontmatter_started and not frontmatter_ended: + match = frontmatter_pattern.match(line) + if match: + key, value = match.groups() + frontmatter[key.strip()] = value.strip() - except FileNotFoundError: - print(f"Error: The file {file_path} does not exist.") - return {} except Exception as e: print(f"An error occurred: {e}") return {} diff --git a/package-lock.json b/package-lock.json index 320223a4e..dc39b8a62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "open-webui", - "version": "0.3.18", + "version": "0.3.19", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "open-webui", - "version": "0.3.18", + "version": "0.3.19", "dependencies": { "@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-python": "^6.1.6", diff --git a/package.json b/package.json index 838c5b155..bfa1334f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "open-webui", - "version": "0.3.18", + "version": "0.3.19", "private": true, "scripts": { "dev": "npm run pyodide:fetch && vite dev --host", diff --git a/src/lib/components/chat/ChatControls.svelte b/src/lib/components/chat/ChatControls.svelte index 869c8459c..6e96d3831 100644 --- a/src/lib/components/chat/ChatControls.svelte +++ b/src/lib/components/chat/ChatControls.svelte @@ -5,6 +5,7 @@ import { onMount } from 'svelte'; import { mobile, showCallOverlay } from '$lib/stores'; import CallOverlay from './MessageInput/CallOverlay.svelte'; + import Drawer from '../common/Drawer.svelte'; export let show = false; @@ -43,65 +44,60 @@ }); -{#if largeScreen} +{#if !largeScreen} {#if show} -