File size: 5,369 Bytes
22d0fa7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
caf2d8a
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
import gradio as gr
import json

class ProjectScopingTool:
    """
    Handles project scoping by collecting key details such as type, domain, budget, and timeline.
    """
    def __init__(self):
        self.project_details = {
            "type": None,
            "domain": None,
            "technical_requirements": {},
            "budget_range": {},
            "timeline": {}
        }
    
    def collect_project_details(self, project_type, domain, budget_min, budget_max, timeline_months):
        """
        Collects and structures project details from user input.
        """
        self.project_details = {
            "type": project_type,
            "domain": domain,
            "budget_range": {"min": budget_min, "max": budget_max},
            "timeline": {"months": timeline_months}
        }
        return json.dumps(self.project_details, indent=2)

class TechnicalArchitectureTool:
    """
    Determines the appropriate technical architecture based on the project type.
    """
    def generate_architecture(self, project_type):
        architectures = {
            "web": {
                "frontend": ["React", "Next.js", "Tailwind"],
                "backend": ["FastAPI", "Django", "Express"],
                "database": ["PostgreSQL", "MongoDB"]
            },
            "blockchain": {
                "blockchain_type": "EVM-compatible",
                "smart_contract_language": "Solidity",
                "consensus_mechanism": "Proof of Stake"
            },
            "ai": {
                "model_type": "Transformer",
                "inference_strategy": "Cloud-based",
                "data_processing": "Distributed"
            }
        }
        return json.dumps(architectures.get(project_type, "Invalid project type"), indent=2)

class CostEstimationTool:
    """
    Estimates the cost based on the architecture complexity and timeline.
    """
    def estimate_project_cost(self, architecture_size, timeline_months):
        base_costs = {
            "development": 5000 * (architecture_size * 0.5),
            "infrastructure": 500 * (architecture_size * 0.3),
            "maintenance": 1000 * (architecture_size * 0.2)
        }
        total_cost = sum(base_costs.values())
        return json.dumps({"total_estimated_cost": total_cost, "breakdown": base_costs}, indent=2)

class DeploymentTool:
    """
    Suggests a deployment strategy based on best practices.
    """
    def generate_deployment_strategy(self):
        return json.dumps({
            "container_strategy": "Docker + Kubernetes",
            "cloud_provider": "AWS",
            "services": ["ECS", "Lambda", "S3", "RDS"],
            "ci_cd_pipeline": "GitHub Actions"
        }, indent=2)

class MeetingPreparationTool:
    """
    Provides meeting agendas depending on the project stage.
    """
    def generate_meeting_agenda(self, project_stage):
        agendas = {
            "initial_discovery": [
                "Project Vision Validation",
                "Technical Feasibility Discussion",
                "Initial Scope Definition"
            ],
            "architecture_review": [
                "Technical Architecture Walkthrough",
                "Technology Stack Validation",
                "Performance Considerations"
            ]
        }
        return json.dumps(agendas.get(project_stage, "No agenda found for this stage"), indent=2)

# Instantiate tools
scoping_tool = ProjectScopingTool()
tech_arch_tool = TechnicalArchitectureTool()
cost_tool = CostEstimationTool()
deploy_tool = DeploymentTool()
meeting_tool = MeetingPreparationTool()

# Define Gradio Interface
with gr.Blocks() as demo:
    gr.Markdown("# 🏗️ Project Scoping & Cost Estimation Tool")

    with gr.Row():
        project_type = gr.Dropdown(["web", "blockchain", "ai"], label="Select Project Type")
        domain = gr.Textbox(label="Enter Project Domain")

    with gr.Row():
        budget_min = gr.Number(label="Min Budget ($)")
        budget_max = gr.Number(label="Max Budget ($)")
        timeline_months = gr.Number(label="Timeline (Months)")

    project_output = gr.Textbox(label="Project Details", interactive=False)
    arch_output = gr.Textbox(label="Technical Architecture", interactive=False)
    cost_output = gr.Textbox(label="Estimated Cost", interactive=False)
    deploy_output = gr.Textbox(label="Deployment Strategy", interactive=False)
    meeting_output = gr.Textbox(label="Meeting Agenda", interactive=False)

    def process_inputs(p_type, dom, min_b, max_b, months):
        project_details = scoping_tool.collect_project_details(p_type, dom, min_b, max_b, months)
        architecture = tech_arch_tool.generate_architecture(p_type)
        estimated_cost = cost_tool.estimate_project_cost(len(architecture), months)
        deployment_strategy = deploy_tool.generate_deployment_strategy()
        meeting_agenda = meeting_tool.generate_meeting_agenda("initial_discovery")
        return project_details, architecture, estimated_cost, deployment_strategy, meeting_agenda

    process_button = gr.Button("Generate Estimates")
    process_button.click(process_inputs, inputs=[project_type, domain, budget_min, budget_max, timeline_months], 
                         outputs=[project_output, arch_output, cost_output, deploy_output, meeting_output])

# Launch the Gradio App
demo.launch(share=true)