Autonomous-AI / app.py
Leonydis137's picture
Upload 2 files
b2d2f75 verified
raw
history blame
2.21 kB
from fastapi import FastAPI, Request, Header
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware
import os, uuid
from memory import MemoryVectorStore
from auth import authorize
from session import init_session_db, create_session, log_interaction, get_session_logs
import gradio as gr
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
model = SentenceTransformer('all-MiniLM-L6-v2')
index = faiss.IndexFlatL2(384)
memory_text = []
def autonomous_agent(input_text):
vec = model.encode([input_text])
index.add(vec)
memory_text.append(input_text)
if index.ntotal > 1:
D, I = index.search(vec, k=2)
related = memory_text[I[0][1]]
response = f"🧠 Memory Match: {related}\n🤖 Working on: {input_text}"
else:
response = f"🤖 Received: {input_text}\n🧠 No prior memory yet."
return response
ui = gr.Interface(fn=autonomous_agent, inputs="text", outputs="text", title="Autonomous AI Agent", description="Self-enhancing chatbot with vector memory.")
ui.launch(share=False, inbrowser=False)
app = FastAPI()
memory = MemoryVectorStore()
init_session_db()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"]
)
@app.get("/", response_class=HTMLResponse)
async def root():
return open("static/index.html").read()
@app.post("/session_task")
async def session_task(request: Request, x_api_key: str = Header(...)):
data = await request.json()
goal = data.get("goal", "")
user = authorize(x_api_key)
if not user:
return {"error": "Unauthorized"}
session_id = data.get("session_id", create_session(user))
memory.add(goal)
ideas = memory.search(goal)
result = f"[Goal]: {goal}\n[Related]: {ideas}\n[Response]: 🚧 working on it..."
memory.add(result)
log_interaction(session_id, goal, result)
return {"session_id": session_id, "output": result}
@app.get("/session_logs/{sid}")
def logs(sid: str):
return get_session_logs(sid)
app.mount("/static", StaticFiles(directory="static"), name="static")