82 lines
3.2 KiB
Python
82 lines
3.2 KiB
Python
"""
|
|
FastAPI server for memory graph visualization and API.
|
|
|
|
Provides REST API endpoints for memory operations and serves
|
|
the interactive visualization interface.
|
|
"""
|
|
import logging
|
|
import os
|
|
import argparse
|
|
|
|
from memora import TemporalSemanticMemory
|
|
from memora.api import create_app
|
|
|
|
|
|
# Create app at module level (required for uvicorn import string)
|
|
_memory = TemporalSemanticMemory(
|
|
db_url=os.getenv("DATABASE_URL"),
|
|
memory_llm_provider=os.getenv("MEMORY_LLM_PROVIDER", "groq"),
|
|
memory_llm_api_key=os.getenv("MEMORY_LLM_API_KEY"),
|
|
memory_llm_model=os.getenv("MEMORY_LLM_MODEL", "openai/gpt-oss-120b"),
|
|
memory_llm_base_url=os.getenv("MEMORY_LLM_BASE_URL") or None,
|
|
)
|
|
app = create_app(_memory)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
# Parse CLI arguments
|
|
parser = argparse.ArgumentParser(description="Memory Graph API Server")
|
|
parser.add_argument("--host", default="0.0.0.0", help="Host to bind to (default: 0.0.0.0)")
|
|
parser.add_argument("--port", type=int, default=8080, help="Port to bind to (default: 8080)")
|
|
parser.add_argument("--reload", action="store_true", help="Enable auto-reload on code changes")
|
|
parser.add_argument("--workers", type=int, default=1, help="Number of worker processes (default: 1)")
|
|
parser.add_argument("--log-level", default="info", choices=["critical", "error", "warning", "info", "debug", "trace"],
|
|
help="Log level (default: info)")
|
|
parser.add_argument("--access-log", action="store_true", help="Enable access log")
|
|
parser.add_argument("--no-access-log", dest="access_log", action="store_false", help="Disable access log")
|
|
parser.add_argument("--proxy-headers", action="store_true", help="Enable X-Forwarded-Proto, X-Forwarded-For headers")
|
|
parser.add_argument("--forwarded-allow-ips", default=None, help="Comma separated list of IPs to trust with proxy headers")
|
|
parser.add_argument("--ssl-keyfile", default=None, help="SSL key file")
|
|
parser.add_argument("--ssl-certfile", default=None, help="SSL certificate file")
|
|
parser.set_defaults(access_log=False)
|
|
|
|
args = parser.parse_args()
|
|
|
|
print("\n" + "=" * 80)
|
|
print("Memory Graph API Server")
|
|
print("=" * 80)
|
|
print(f"Host: {args.host}")
|
|
print(f"Port: {args.port}")
|
|
print(f"Reload: {args.reload}")
|
|
print(f"Workers: {args.workers}")
|
|
print(f"Log Level: {args.log_level}")
|
|
print("=" * 80 + "\n")
|
|
|
|
# Always use import string for uvicorn (required for reload and workers)
|
|
app_ref = "memora.web.server:app"
|
|
|
|
# Prepare uvicorn config
|
|
uvicorn_config = {
|
|
"app": app_ref,
|
|
"host": args.host,
|
|
"port": args.port,
|
|
"reload": args.reload,
|
|
"workers": args.workers,
|
|
"log_level": args.log_level,
|
|
"access_log": args.access_log,
|
|
"proxy_headers": args.proxy_headers,
|
|
}
|
|
|
|
# Add optional parameters if provided
|
|
if args.forwarded_allow_ips:
|
|
uvicorn_config["forwarded_allow_ips"] = args.forwarded_allow_ips
|
|
if args.ssl_keyfile:
|
|
uvicorn_config["ssl_keyfile"] = args.ssl_keyfile
|
|
if args.ssl_certfile:
|
|
uvicorn_config["ssl_certfile"] = args.ssl_certfile
|
|
|
|
uvicorn.run(**uvicorn_config)
|