Spaces:
Runtime error
Runtime error
File size: 5,060 Bytes
f6c63cd 819e82c f6c63cd 819e82c f6c63cd 819e82c f6c63cd 819e82c f6c63cd 819e82c f6c63cd 819e82c f6c63cd 9d55677 f6c63cd | 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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | import os
import gradio as gr
from fastmcp import FastMCP
from openai import OpenAI
from memory_sync import save_to_databank, load_from_databank, get_embeddings
import stripe
from ebook_pipeline import create_ebook_files
# Load Environment Variables
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
HF_TOKEN = os.environ.get("HF_TOKEN")
STRIPE_API_KEY = os.environ.get("STRIPE_API_KEY")
# Initialize Clients
client = OpenAI(api_key=OPENAI_API_KEY)
if STRIPE_API_KEY:
stripe.api_key = STRIPE_API_KEY
# ... (MCP Server Init)
# --- MCP TOOLS ---
@mcp.tool()
def create_stripe_checkout_session(price_id: str, success_url: str, cancel_url: str) -> str:
"""Create a Stripe Checkout Session for a given Price ID."""
try:
session = stripe.checkout.Session.create(
payment_method_types=['card'],
line_items=[{'price': price_id, 'quantity': 1}],
mode='payment',
success_url=success_url,
cancel_url=cancel_url,
)
return f"Checkout Session created: {session.url}"
except Exception as e:
return f"Error creating session: {str(e)}"
# ... (Existing tools)
# --- AGENT LOGIC ---
def aussie_router(user_input, history):
# ...
# Updated router instructions logic (should ideally be loaded from databank)
# Adding Stripe to the dispatch logic
system_instr = load_from_databank("router_instructions.md")
# ...
@mcp.tool()
def generate_ebook(title: str, author: str, chapters: list) -> str:
"""Generate EPUB and PDF files from a list of chapters (title and content)."""
epub_path, pdf_path = create_ebook_files(title, author, chapters)
return f"Ebook generated: {epub_path}, {pdf_path}"
@mcp.tool()
def save_knowledge(module_name: str, content: str) -> str:
"""Save knowledge content to the persistent databank."""
success = save_to_databank(f"{module_name}.md", content)
return "Knowledge saved successfully." if success else "Failed to save knowledge."
@mcp.tool()
def query_databank(filename: str) -> str:
"""Retrieve content from the databank."""
content = load_from_databank(filename)
return content if content else "File not found."
@mcp.tool()
def generate_image(prompt: str) -> str:
"""Generate an image using a text-to-image model on Hugging Face."""
try:
# Using a popular model like FLUX or SDXL via InferenceClient
image = client.text_to_image(prompt, model="black-forest-labs/FLUX.1-schnell")
os.makedirs("exports/images", exist_ok=True)
image_path = f"exports/images/{hash(prompt)}.png"
image.save(image_path)
return f"Image generated and saved to {image_path}"
except Exception as e:
return f"Error generating image: {str(e)}"
# --- AGENT LOGIC (Aussie Domain Router) ---
def aussie_router(user_input, history):
# Retrieve system instructions from databank or fallback
system_instr = load_from_databank("router_instructions.md") or "You are the Aussie Domain Router. Orchestrate tasks for the user."
messages = [{"role": "system", "content": system_instr}]
for h in history:
messages.append({"role": "user", "content": h[0]})
messages.append({"role": "assistant", "content": h[1]})
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
# tools=[...] # We would list the MCP tools here if GPT-4o-mini supported native MCP schema directly
)
return response.choices[0].message.content
# --- GRADIO UI ---
with gr.Blocks(title="Aussie MCP Agent Hub") as demo:
gr.Markdown("# π¨ Aussie MCP Server Agent Hub")
with gr.Tab("Chat with Hub"):
chatbot = gr.Chatbot()
msg = gr.Textbox(placeholder="Ask your Aussie Agent anything...")
clear = gr.Button("Clear")
def user(user_message, history):
return "", history + [[user_message, None]]
def bot(history):
user_message = history[-1][0]
bot_message = aussie_router(user_message, history[:-1])
history[-1][1] = bot_message
return history
msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
bot, chatbot, chatbot
)
clear.click(lambda: None, None, chatbot, queue=False)
with gr.Tab("Databank"):
gr.Markdown("View and manage your persistent knowledge modules.")
# Add interface elements to list and view databank files
# Start the application with MCP support
if __name__ == "__main__":
# Gradio 5+ with MCP SSE endpoint
# Note: FastMCP usually runs its own server, here we integrate it with Gradio or run in parallel
import threading
def run_mcp():
mcp.run(transport="sse", host="0.0.0.0", port=7861) # Running MCP on a separate port or integrating with Gradio path
# t = threading.Thread(target=run_mcp)
# t.start()
demo.launch(server_name="0.0.0.0", server_port=7860)
|