hasanalrobasi's picture
Upload folder using huggingface_hub
3d0eeb3 verified
# app.py
from daggr import GradioNode, InferenceNode, FnNode, Graph
import gradio as gr
from typing import Dict, Any
import requests
import os
# Environment variables for API keys
API_KEYS = {
"OPENAI": os.getenv("OPENAI_API_KEY"),
"HUGGINGFACE": os.getenv("HF_API_KEY")
}
# ========== Input Processing Node ==========
def preprocess_inputs(user_input: str, metadata: Dict[str, Any]) -> Dict[str, Any]:
"""Clean and validate inputs with metadata enrichment"""
return {
"cleaned_input": user_input.strip(),
"timestamp": metadata.get("timestamp"),
"source": metadata.get("source", "web")
}
input_processor = FnNode(
fn=preprocess_inputs,
inputs={
"user_input": gr.Textbox(label="User Input"),
"metadata": gr.JSON(label="Metadata")
},
outputs={
"processed_data": gr.JSON(label="Processed Input")
}
)
# ========== LLM Processing Node ==========
llm_processor = InferenceNode(
model="meta-llama/Llama-3-70B-Instruct",
inputs={
"prompt": gr.Textbox(label="LLM Prompt"),
"temperature": gr.Slider(0, 1, value=0.7)
},
outputs={
"response": gr.Textbox(label="LLM Response")
},
api_key=API_KEYS["HUGGINGFACE"]
)
# ========== Image Generation Node ==========
image_generator = GradioNode(
space_or_url="stabilityai/stable-diffusion-xl-base-1.0",
api_name="/generate",
inputs={
"prompt": gr.Textbox(label="Image Prompt"),
"negative_prompt": gr.Textbox(label="Negative Prompt"),
"steps": gr.Slider(10, 50, value=30)
},
outputs={
"image": gr.Image(label="Generated Image")
}
)
# ========== API Integration Node ==========
def call_external_api(data: Dict[str, Any]) -> Dict[str, Any]:
"""Generic API caller with error handling"""
try:
response = requests.post(
"https://api.example.com/v1/process",
json=data,
headers={"Authorization": f"Bearer {API_KEYS.get('OPENAI')}"},
timeout=30
)
response.raise_for_status()
return response.json()
except Exception as e:
return {"error": str(e)}
api_integrator = FnNode(
fn=call_external_api,
inputs={
"api_data": gr.JSON(label="API Payload")
},
outputs={
"api_response": gr.JSON(label="API Results")
}
)
# ========== Output Formatter Node ==========
def format_output(llm_response: str, image: Any, api_data: Dict) -> Dict[str, Any]:
"""Create unified output format"""
return {
"text_response": llm_response,
"visual_response": image,
"api_data": api_data,
"status": "success"
}
output_formatter = FnNode(
fn=format_output,
inputs={
"llm_response": gr.Textbox(),
"image": gr.Image(),
"api_data": gr.JSON()
},
outputs={
"final_output": gr.JSON(label="Final Output")
}
)
# ========== Create and Connect Workflow ==========
workflow = Graph(
name="Global Integration Platform",
nodes=[
input_processor,
llm_processor,
image_generator,
api_integrator,
output_formatter
],
connections=[
(input_processor.outputs["processed_data"], llm_processor.inputs["prompt"]),
(input_processor.outputs["processed_data"], image_generator.inputs["prompt"]),
(input_processor.outputs["processed_data"], api_integrator.inputs["api_data"]),
(llm_processor.outputs["response"], output_formatter.inputs["llm_response"]),
(image_generator.outputs["image"], output_formatter.inputs["image"]),
(api_integrator.outputs["api_response"], output_formatter.inputs["api_data"])
]
)
# ========== Launch Application ==========
if __name__ == "__main__":
workflow.launch(
server_name="0.0.0.0",
server_port=7860,
share=True,
auth=("admin", os.getenv("APP_PASSWORD")),
favicon_path="https://example.com/favicon.ico"
)