import gradio as gr from mysite.libs.utilities import chat_with_interpreter, completion, process_file,no_process_file from interpreter import interpreter import mysite.interpreter.interpreter_config # インポートするだけで設定が適用されます import duckdb def format_response(chunk, full_response): # Message if chunk["type"] == "message": full_response += chunk.get("content", "") if chunk.get("end", False): full_response += "\n" # Code if chunk["type"] == "code": if chunk.get("start", False): full_response += "```python\n" full_response += chunk.get("content", "").replace("`", "") if chunk.get("end", False): full_response += "\n```\n" # Output if chunk["type"] == "confirmation": if chunk.get("start", False): full_response += "```python\n" full_response += chunk.get("content", {}).get("code", "") if chunk.get("end", False): full_response += "```\n" # Console if chunk["type"] == "console": if chunk.get("start", False): full_response += "```python\n" if chunk.get("format", "") == "active_line": console_content = chunk.get("content", "") if console_content is None: full_response += "No output available on console." if chunk.get("format", "") == "output": console_content = chunk.get("content", "") full_response += console_content if chunk.get("end", False): full_response += "\n```\n" # Image if chunk["type"] == "image": if chunk.get("start", False) or chunk.get("end", False): full_response += "\n" else: image_format = chunk.get("format", "") if image_format == "base64.png": image_content = chunk.get("content", "") if image_content: image = Image.open(BytesIO(base64.b64decode(image_content))) new_image = Image.new("RGB", image.size, "white") new_image.paste(image, mask=image.split()[3]) buffered = BytesIO() new_image.save(buffered, format="PNG") img_str = base64.b64encode(buffered.getvalue()).decode() full_response += f"![Image](data:image/png;base64,{img_str})\n" return full_response import sqlite3 from datetime import datetime # SQLiteの設定 db_name = "chat_history.db" def initialize_db(): conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS history ( id INTEGER PRIMARY KEY AUTOINCREMENT, role TEXT, type TEXT, content TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ) """) conn.commit() conn.close() def add_message_to_db(role, message_type, content): conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute("INSERT INTO history (role, type, content) VALUES (?, ?, ?)", (role, message_type, content)) conn.commit() conn.close() def get_recent_messages(limit=20): conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute("SELECT role, type, content FROM history ORDER BY timestamp DESC LIMIT ?", (limit,)) messages = cursor.fetchall() conn.close() return messages[::-1] # 最新の20件を取得して逆順にする def format_responses(chunk, full_response): # This function will format the response from the interpreter return full_response + chunk.get("content", "") def chat_with_interpreter(message, history, a=None, b=None, c=None, d=None): if message == "reset": interpreter.reset() return "Interpreter reset", history full_response = "" recent_messages = get_recent_messages() for role, message_type, content in recent_messages: entry = {"role": role, "type": message_type, "content": content} interpreter.messages.append(entry) user_entry = {"role": "user", "type": "message", "content": message} interpreter.messages.append(user_entry) add_message_to_db("user", "message", message) for chunk in interpreter.chat(message, display=False, stream=True): if isinstance(chunk, dict): full_response = format_response(chunk, full_response) else: raise TypeError("Expected chunk to be a dictionary") yield full_response assistant_entry = {"role": "assistant", "type": "message", "content": full_response} interpreter.messages.append(assistant_entry) add_message_to_db("assistant", "message", full_response) yield full_response return full_response, history # 初期化 initialize_db() PLACEHOLDER = """
Ask me anything...