plantuml-agent / app.py
Sávio Santos
added input input (optional)
99e2b34
from src.agent import PlantUMLAgent
from src.documents import get_processed_documents, get_diagrams_names
from src.interface import create_interface
from src.preview import render_plantuml, sanitize_plantuml_code
import gradio as gr
from cachetools import LRUCache, cached
diagrams_names = get_diagrams_names()
docs_processed = get_processed_documents(diagrams_names)
cache = LRUCache(maxsize=100)
@cached(cache)
def respond(message, diagram_name, image_input, api_key):
if not api_key:
gr.Warning("Please provide a valid Mistral API key to generate diagrams.")
return message, "", ""
if not message:
gr.Warning("Please provide a description for the UML diagram.")
return "", "", ""
agent = PlantUMLAgent(docs_processed, api_key)
input = "Description:\n" + message.strip() + "\n\nDiagram Type: " + diagram_name.strip() + "\n\n"
if image_input:
image_analysis = agent.recognize_image(diagram_name, image_input)
input += f"\n\nImage Analysis:\n{image_analysis}\n\n" if image_analysis else ""
response = agent.predict(diagram_name, input)
plantuml_code = sanitize_plantuml_code(response)
plantuml_diagram = render_plantuml(plantuml_code)
return message, plantuml_code, plantuml_diagram
if __name__ == "__main__":
cache.clear()
demo = create_interface(diagrams_names, respond)
demo.launch()