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