File size: 2,213 Bytes
32688bc
9d9413b
 
 
 
 
 
 
 
 
 
ba4d8ff
 
 
 
9294707
ba4d8ff
 
 
 
 
b2d2f75
 
 
32688bc
b2d2f75
 
 
 
 
 
ba4d8ff
 
 
 
b2d2f75
ba4d8ff
6cf4770
 
b2d2f75
9d9413b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b2d2f75
9d9413b
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

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")