thisisdev commited on
Commit
fbd0465
·
verified ·
1 Parent(s): 1ace55b

Update: Tools create and analyze, TechTool, session, init

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +87 -38
src/streamlit_app.py CHANGED
@@ -1,40 +1,89 @@
1
- import altair as alt
2
- import numpy as np
3
- import pandas as pd
4
  import streamlit as st
 
 
 
5
 
6
- """
7
- # Welcome to Streamlit!
8
-
9
- Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:.
10
- If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
11
- forums](https://discuss.streamlit.io).
12
-
13
- In the meantime, below is an example of what you can do with just a few lines of code:
14
- """
15
-
16
- num_points = st.slider("Number of points in spiral", 1, 10000, 1100)
17
- num_turns = st.slider("Number of turns in spiral", 1, 300, 31)
18
-
19
- indices = np.linspace(0, 1, num_points)
20
- theta = 2 * np.pi * num_turns * indices
21
- radius = indices
22
-
23
- x = radius * np.cos(theta)
24
- y = radius * np.sin(theta)
25
-
26
- df = pd.DataFrame({
27
- "x": x,
28
- "y": y,
29
- "idx": indices,
30
- "rand": np.random.randn(num_points),
31
- })
32
-
33
- st.altair_chart(alt.Chart(df, height=700, width=700)
34
- .mark_point(filled=True)
35
- .encode(
36
- x=alt.X("x", axis=None),
37
- y=alt.Y("y", axis=None),
38
- color=alt.Color("idx", legend=None, scale=alt.Scale()),
39
- size=alt.Size("rand", legend=None, scale=alt.Scale(range=[1, 150])),
40
- ))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # import phase
 
 
2
  import streamlit as st
3
+ import pydantic import BaseModel, Field
4
+ from typing import List, Literal, Dict, Optional
5
+ from agency_swarn import Agent, Agency, set_openai_key, BaseTool
6
 
7
+ class AnalyzeProjectRequirement(BaseTool):
8
+ project_name: str = Field(..., description = "Name of Project")
9
+ project_description: str = Field(..., description = "Project Description and Goals")
10
+ project_type: Literal["Web Application", "Mobile App", "API Development", "Data Analytics", "AI/ML Solution", "Other"] = Field(..., description = "Type of project")
11
+ budget_range: Literal["$10k-$25k", "$25k-$50k", "$100k+"] = Field(..., description = "Budget Range of the project")
12
+
13
+ class ToolConfig:
14
+ name = "analyze_project"
15
+ description = "Analyze project requirements and feasibility"
16
+ one_call_at_a_time = True
17
+
18
+ def run(self) -> str:
19
+ """Analyze project and store results in shared state"""
20
+ if self._shared_state.get("project_analysis", None) is not None:
21
+ raise ValueError('Project Analysis already exists, you can move forward to technical specification.')
22
+
23
+ analysis = {
24
+ "name": self.project_name,
25
+ "type": self.project_type,
26
+ "complexity": "high",
27
+ "timeline": "6 months",
28
+ "budget_feasibility": "within range",
29
+ "requirements": ["Scalable Architecture", "Security", "API Integration"]
30
+ }
31
+
32
+ self._shared_state.set("project_analysis", analysis)
33
+ return "Project analysis completed. Please proceed with technical specification"
34
+
35
+ class CreateTechnicalSpecification(BaseTool):
36
+ core_technologies: str = Field(..., description = "Comma-seperated list of main technologies and frameworks")
37
+ architecture_type: Literal["monolithic", "microservice", "serverless", "hybrid"] = Field(..., description = "Proposed Architecture Type")
38
+ scalability_requirement: Literal("high", "medium", "low") = Field(..., description = "Scalability Needs")
39
+
40
+ class ToolConfig:
41
+ name = "create_technical_spec"
42
+ description = "Creates technical specifications based on project analysis"
43
+ one_call_at_a_time = True
44
+
45
+ def run(self) -> str:
46
+ """Create technical specification based on the analysis"""
47
+ project_analysis = self._shared_state.get("project_analysis", None)
48
+ if project_analysis is None:
49
+ raise ValueError("Please analyse project requirements first using the AnalyzeProjectRequirement tool")
50
+
51
+ spec ={
52
+ "project_name" : project_analysis["name"],
53
+ "architecture": self.architecture_type,
54
+ "technologies": self.core_technologies.split(","),
55
+ "scalability": self.scalability_requirement
56
+ }
57
+ self._shared_state.set("technical_specification", spec)
58
+ return f"Technical Specification created for {project_analysis['name']}"
59
+
60
+ def init_session_state() -> None:
61
+ """Initiate session state variable"""
62
+ if "messages" is not st.session_state:
63
+ st.session_state.message = []
64
+ if "api_key" not in st.session_state:
65
+ st.session_state.api_key = None
66
+
67
+
68
+ def main() -> None:
69
+ st.set_page_config(page_title = "dev.ai - Place for innovation", layout = "wide")
70
+ init_session_state()
71
+
72
+ st.title("🎯 dev.ai services - Innovate, Build and Lighten up the future with AI")
73
+
74
+ # API Configuration
75
+ with st.sidebar:
76
+ st.header("API Configuration")
77
+ openai_api_key = st.text_input(
78
+ "OpenAI API Key",
79
+ type = "password",
80
+ help = "Enter your OpenAI Key that start with sk--xxxxxxxxxxxxxx"
81
+ )
82
+
83
+ if openai_api_key:
84
+ st.session_state.api_key = openai_api_key
85
+ st.success("API Key accepted")
86
+ else:
87
+ st.warning("⚠️ API Key not found, please enter you key to proceed")
88
+ st.markdown("[Get your API key here]("https://platform.openai.com/api-keys)")
89
+ return