Skip to content

Commit b3ee360

Browse files
committed
improved additional instructions
1 parent a4f4b1a commit b3ee360

File tree

2 files changed

+56
-19
lines changed

2 files changed

+56
-19
lines changed

app.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,19 @@ async def home(request: Request):
6262

6363

6464
@app.post("/", response_class=HTMLResponse)
65-
async def generate_dockerfile(request: Request, repo_url: str = Form(...)):
65+
async def generate_dockerfile(
66+
request: Request,
67+
repo_url: str = Form(...),
68+
additional_instructions_hidden: str = Form("")
69+
):
6670
"""Redirect to streaming page for Dockerfile generation."""
67-
# Store the repo URL in a session (simple in-memory for demo)
71+
# Store the repo URL and additional instructions in a session (simple in-memory for demo)
6872
session_id = str(hash(repo_url + str(asyncio.get_event_loop().time())))
69-
sessions[session_id] = {"repo_url": repo_url, "status": "pending"}
73+
sessions[session_id] = {
74+
"repo_url": repo_url,
75+
"additional_instructions": additional_instructions_hidden.strip() if additional_instructions_hidden else "",
76+
"status": "pending"
77+
}
7078

7179
# Redirect to streaming page
7280
return templates.TemplateResponse("index.jinja", {
@@ -94,10 +102,11 @@ async def websocket_endpoint(websocket: WebSocket, session_id: str):
94102
return
95103

96104
repo_url = sessions[session_id]["repo_url"]
105+
additional_instructions = sessions[session_id].get("additional_instructions", "")
97106

98107
# Step 1: Clone repository
99108
await websocket.send_text(json.dumps({
100-
"type": "status",
109+
"type": "status",
101110
"content": f"🔄 Cloning repository: {repo_url}"
102111
}))
103112

@@ -136,7 +145,8 @@ async def websocket_endpoint(websocket: WebSocket, session_id: str):
136145
gitingest_tree=ingest_result['tree'],
137146
gitingest_content=ingest_result['content'],
138147
project_name=clone_result['repo_name'],
139-
websocket=websocket # Pass WebSocket for streaming
148+
websocket=websocket, # Pass WebSocket for streaming
149+
additional_instructions=additional_instructions
140150
)
141151

142152
if not container_result["success"]:
@@ -174,10 +184,21 @@ async def websocket_endpoint(websocket: WebSocket, session_id: str):
174184
except WebSocketDisconnect:
175185
print(f"WebSocket disconnected for session {session_id}")
176186
except Exception as e:
177-
await websocket.send_text(json.dumps({
178-
"type": "error",
179-
"content": f"Unexpected error: {str(e)}"
180-
}))
187+
print(f"Error in WebSocket endpoint: {e}")
188+
try:
189+
await websocket.send_text(json.dumps({
190+
"type": "error",
191+
"content": f"Unexpected error: {str(e)}"
192+
}))
193+
except Exception as send_error:
194+
print(f"Could not send error message, WebSocket likely closed: {send_error}")
195+
finally:
196+
# Clean up session data
197+
try:
198+
if session_id in sessions:
199+
sessions[session_id]["status"] = "disconnected"
200+
except:
201+
pass
181202

182203

183204
@app.get("/health")

tools/create_container.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,9 @@ async def create_container_tool(
8888
}}"""
8989

9090
# Make API call to generate Dockerfile with streaming
91-
await _emit_ws_message(websocket, "status", "🐳 Generating Dockerfile...")
92-
print("🐳 Generating Dockerfile... (streaming response)\n")
91+
websocket_active = await _emit_ws_message(websocket, "status", "🐳 Generating Dockerfile...")
92+
if websocket_active:
93+
print("🐳 Generating Dockerfile... (streaming response)\n")
9394

9495
response = await client.chat.completions.create(
9596
model="gpt-4o-mini", # Using GPT-4 for better code generation
@@ -110,7 +111,8 @@ async def create_container_tool(
110111

111112
# Collect the streaming response and print in real-time
112113
dockerfile_response = ""
113-
await _emit_ws_message(websocket, "stream_start", "Starting generation...")
114+
if websocket_active:
115+
websocket_active = await _emit_ws_message(websocket, "stream_start", "Starting generation...")
114116
print("📝 Response:")
115117
print("-" * 50)
116118

@@ -119,12 +121,14 @@ async def create_container_tool(
119121
content = chunk.choices[0].delta.content
120122
print(content, end="", flush=True)
121123
dockerfile_response += content
122-
# Emit each chunk to WebSocket clients
123-
await _emit_ws_message(websocket, "chunk", content)
124+
# Only emit chunks if WebSocket is still active
125+
if websocket_active:
126+
websocket_active = await _emit_ws_message(websocket, "chunk", content)
124127

125128
print("\n" + "-" * 50)
126129
print("✅ Generation complete!\n")
127-
await _emit_ws_message(websocket, "status", "✅ Generation complete!")
130+
if websocket_active:
131+
await _emit_ws_message(websocket, "status", "✅ Generation complete!")
128132

129133
# Try to parse as JSON, fallback to plain text if needed
130134
try:
@@ -197,12 +201,20 @@ async def create_container_tool(
197201
"error": str(e),
198202
"project_name": project_name or "unknown-project"
199203
}
200-
await _emit_ws_message(websocket, "error", str(e))
204+
# Only send error message if WebSocket might still be active
205+
try:
206+
await _emit_ws_message(websocket, "error", str(e))
207+
except:
208+
# WebSocket is definitely closed, just log the error
209+
print(f"Could not send error to WebSocket: {e}")
201210
return error_result
202211

203212

204-
async def _emit_ws_message(websocket: Optional[Any], message_type: str, content: str) -> None:
205-
"""Helper function to emit WebSocket messages safely."""
213+
async def _emit_ws_message(websocket: Optional[Any], message_type: str, content: str) -> bool:
214+
"""
215+
Helper function to emit WebSocket messages safely.
216+
Returns True if message was sent successfully, False if WebSocket is closed or error occurred.
217+
"""
206218
if websocket is not None:
207219
try:
208220
message = {
@@ -211,8 +223,12 @@ async def _emit_ws_message(websocket: Optional[Any], message_type: str, content:
211223
"timestamp": asyncio.get_event_loop().time()
212224
}
213225
await websocket.send_text(json.dumps(message))
226+
return True
214227
except Exception as e:
215-
print(f"WebSocket error: {e}")
228+
# WebSocket is likely closed, stop trying to send messages
229+
print(f"WebSocket closed or error occurred: {e}")
230+
return False
231+
return False
216232

217233

218234
def run_create_container(

0 commit comments

Comments
 (0)