from langfuse import Langfuse
from langfuse.decorators import observe, langfuse_context
from config.config import settings
from services.llama_generator import LlamaGenerator
import os
# Initialize Langfuse
os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-04d2302a-aa5c-4870-9703-58ab64c3bcae"
os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-d34ea200-feec-428e-a621-784fce93a5af"
os.environ["LANGFUSE_HOST"] = "https://chris4k-langfuse-template-space.hf.space" # 🇪🇺 EU region
try:
langfuse = Langfuse()
except Exception as e:
print("Langfuse Offline")
########
html = """
AI State Machine
AI State Machine
"""
######
import asyncio
import random
import time
from fastapi import FastAPI, WebSocket
from fastapi.responses import HTMLResponse
import uvicorn
class AIStateManager:
def __init__(self):
self.state = "awake"
self.research_tasks = ["Explore AI Ethics", "Find latest AI models", "Investigate quantum computing"]
self.current_task = None
self.heartbeat_count = 0
self.clients = set()
async def set_state(self, new_state):
"""Thread-safe state change with logging."""
print(f"[STATE CHANGE] {self.state} → {new_state}")
self.state = new_state
await self.broadcast(f"State changed to {new_state}")
async def broadcast(self, message):
"""Broadcast message to all connected clients."""
for client in list(self.clients):
try:
await client.send_text(message)
except Exception as e:
print(f"Broadcast error: {e}")
self.clients.remove(client)
async def research_cycle(self):
"""Manages research state tasks."""
while True:
await asyncio.sleep(5) # Longer interval for visibility
# State-based logic
if self.state == "awake":
self.heartbeat_count += 1
if self.heartbeat_count >= 3:
await self.set_state("research")
elif self.state == "research":
if self.research_tasks:
task = self.research_tasks.pop(0)
await self.broadcast(f"Researching: {task}")
# Simulate task work
await asyncio.sleep(3)
# Random chance of generating follow-up
if random.random() < 0.3:
await self.broadcast(f"Question about {task}")
else:
await self.set_state("sleeping")
elif self.state == "sleeping":
await self.broadcast("System in sleep mode")
await asyncio.sleep(10) # Longer sleep
# Reset after sleep
self.research_tasks = ["Explore AI Ethics", "Find latest AI models", "Investigate quantum computing"]
await self.set_state("awake")
self.heartbeat_count = 0
# FastAPI Setup
app = FastAPI()
ai_manager = AIStateManager()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
ai_manager.clients.add(websocket)
try:
while True:
data = await websocket.receive_text()
await ai_manager.broadcast(f"Received: {data}")
except Exception as e:
print(f"WebSocket error: {e}")
finally:
ai_manager.clients.remove(websocket)
@app.on_event("startup")
async def startup_event():
"""Start research cycle on app startup."""
asyncio.create_task(ai_manager.research_cycle())
@app.get("/")
async def get():
"""Serve frontend HTML."""
return HTMLResponse(html)
if __name__ == "__main__":
uvicorn.run(app, host="localhost", port=8000)