chore: better database errors (#1299)

This commit is contained in:
Charles Packer
2024-04-26 16:00:36 -07:00
committed by GitHub
parent a80b7e8fec
commit a61a67bc47
3 changed files with 37 additions and 64 deletions

View File

@@ -310,19 +310,6 @@ def server(
):
"""Launch a MemGPT server process"""
# if debug:
# from memgpt.server.server import logger as server_logger
# # Set the logging level
# server_logger.setLevel(logging.DEBUG)
# # Create a StreamHandler
# stream_handler = logging.StreamHandler()
# # Set the formatter (optional)
# formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
# stream_handler.setFormatter(formatter)
# # Add the handler to the logger
# server_logger.addHandler(stream_handler)
if type == ServerChoice.rest_api:
pass
@@ -345,35 +332,6 @@ def server(
ssl_key=ssl_key,
debug=debug,
)
# if use_ssl:
# if ssl_cert is None: # No certificate path provided, generate a self-signed certificate
# ssl_certfile, ssl_keyfile = generate_self_signed_cert()
# print(f"Running server with self-signed SSL cert: {ssl_certfile}, {ssl_keyfile}")
# else:
# ssl_certfile, ssl_keyfile = ssl_cert, ssl_key # Assuming cert includes both
# print(f"Running server with provided SSL cert: {ssl_certfile}, {ssl_keyfile}")
# # This will start the server on HTTPS
# assert isinstance(ssl_certfile, str) and os.path.exists(ssl_certfile), ssl_certfile
# assert isinstance(ssl_keyfile, str) and os.path.exists(ssl_keyfile), ssl_keyfile
# print(
# f"Running: uvicorn {app}:app --host {host or 'localhost'} --port {port or REST_DEFAULT_PORT} --ssl-keyfile {ssl_keyfile} --ssl-certfile {ssl_certfile}"
# )
# uvicorn.run(
# app,
# host=host or "localhost",
# port=port or REST_DEFAULT_PORT,
# ssl_keyfile=ssl_keyfile,
# ssl_certfile=ssl_certfile,
# )
# else:
# # Start the subprocess in a new session
# print(f"Running: uvicorn {app}:app --host {host or 'localhost'} --port {port or REST_DEFAULT_PORT}")
# uvicorn.run(
# app,
# host=host or "localhost",
# port=port or REST_DEFAULT_PORT,
# )
except KeyboardInterrupt:
# Handle CTRL-C

View File

@@ -5,11 +5,13 @@ import os
import secrets
import uuid
from typing import List, Optional
import traceback
from sqlalchemy import BIGINT, CHAR, JSON, Boolean, Column, DateTime, String, TypeDecorator, create_engine, func, inspect
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import declarative_base, sessionmaker
from sqlalchemy.sql import func
from sqlalchemy.exc import InterfaceError
from memgpt.config import MemGPTConfig
from memgpt.data_types import AgentState, EmbeddingConfig, LLMConfig, Preset, Source, Token, User
@@ -312,22 +314,41 @@ class MetadataStore:
# Check if tables need to be created
self.engine = create_engine(self.uri)
Base.metadata.create_all(
self.engine,
tables=[
UserModel.__table__,
AgentModel.__table__,
SourceModel.__table__,
AgentSourceMappingModel.__table__,
TokenModel.__table__,
PresetModel.__table__,
PresetSourceMapping.__table__,
HumanModel.__table__,
PersonaModel.__table__,
ToolModel.__table__,
JobModel.__table__,
],
)
try:
Base.metadata.create_all(
self.engine,
tables=[
UserModel.__table__,
AgentModel.__table__,
SourceModel.__table__,
AgentSourceMappingModel.__table__,
TokenModel.__table__,
PresetModel.__table__,
PresetSourceMapping.__table__,
HumanModel.__table__,
PersonaModel.__table__,
ToolModel.__table__,
JobModel.__table__,
],
)
except InterfaceError as e:
traceback.print_exc()
if config.metadata_storage_type == "postgres":
raise ValueError(
f"{str(e)}\n\nMemGPT failed to connect to the database at URI '{self.uri}'. "
+ "Please make sure you configured your storage backend correctly (https://memgpt.readme.io/docs/storage). "
+ "\npostgres detected: Make sure the postgres database is running (https://memgpt.readme.io/docs/storage#postgres)."
)
elif config.metadata_storage_type == "sqlite":
raise ValueError(
f"{str(e)}\n\nMemGPT failed to connect to the database at URI '{self.uri}'. "
+ "Please make sure you configured your storage backend correctly (https://memgpt.readme.io/docs/storage). "
+ "\nsqlite detected: Make sure that the sqlite.db file exists at the URI."
)
else:
raise e
except:
raise
self.session_maker = sessionmaker(bind=self.engine)
@enforce_types

View File

@@ -10,7 +10,6 @@ from fastapi import Depends, FastAPI, HTTPException
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
from starlette.middleware.cors import CORSMiddleware
from memgpt.config import MemGPTConfig
from memgpt.server.constants import REST_DEFAULT_PORT
from memgpt.server.rest_api.admin.users import setup_admin_router
from memgpt.server.rest_api.agents.command import setup_agents_command_router
@@ -115,11 +114,6 @@ def on_startup():
app.openapi_schema["servers"] = [{"url": host} for host in settings.cors_origins]
app.openapi_schema["info"]["title"] = "MemGPT API"
# Write out the OpenAPI schema to a file
# with open("openapi.json", "w") as file:
# print(f"Writing out openapi.json file")
# json.dump(app.openapi_schema, file, indent=2)
# Split the API docs into MemGPT API, and OpenAI Assistants compatible API
memgpt_api = app.openapi_schema.copy()
memgpt_api["paths"] = {key: value for key, value in memgpt_api["paths"].items() if not key.startswith(OPENAI_API_PREFIX)}