YashashviAlva commited on
Commit
43efb12
Β·
1 Parent(s): 4ed28a0

Fix HF Spaces streaming timeouts and error handling

Browse files
codesentry-backend/agents/fix_agent.py CHANGED
@@ -124,6 +124,8 @@ class FixAgent:
124
  self.client = AsyncOpenAI(
125
  base_url=vllm_base_url,
126
  api_key=api_key,
 
 
127
  )
128
 
129
  # ─────────────────────────────────────────
 
124
  self.client = AsyncOpenAI(
125
  base_url=vllm_base_url,
126
  api_key=api_key,
127
+ timeout=60.0,
128
+ max_retries=1,
129
  )
130
 
131
  # ─────────────────────────────────────────
codesentry-backend/agents/orchestrator.py CHANGED
@@ -42,7 +42,7 @@ logger = logging.getLogger(__name__)
42
  # Config from environment
43
  VLLM_BASE_URL = os.getenv("VLLM_BASE_URL", "http://localhost:8080/v1")
44
  MODEL_NAME = os.getenv("MODEL_NAME", "Qwen/Qwen2.5-Coder-32B-Instruct")
45
- LLM_API_KEY = os.getenv("LLM_API_KEY", "not-needed-local")
46
  USE_LLM = os.getenv("USE_LLM", "true").lower() == "true"
47
 
48
 
 
42
  # Config from environment
43
  VLLM_BASE_URL = os.getenv("VLLM_BASE_URL", "http://localhost:8080/v1")
44
  MODEL_NAME = os.getenv("MODEL_NAME", "Qwen/Qwen2.5-Coder-32B-Instruct")
45
+ LLM_API_KEY = os.getenv("LLM_API_KEY") or os.getenv("GROQ_API_KEY", "not-needed-local")
46
  USE_LLM = os.getenv("USE_LLM", "true").lower() == "true"
47
 
48
 
codesentry-backend/agents/performance_agent.py CHANGED
@@ -83,6 +83,8 @@ class PerformanceAgent:
83
  self.client = AsyncOpenAI(
84
  base_url=vllm_base_url,
85
  api_key=api_key,
 
 
86
  )
87
 
88
  # ─────────────────────────────────────────
 
83
  self.client = AsyncOpenAI(
84
  base_url=vllm_base_url,
85
  api_key=api_key,
86
+ timeout=60.0,
87
+ max_retries=1,
88
  )
89
 
90
  # ─────────────────────────────────────────
codesentry-backend/agents/security_agent.py CHANGED
@@ -81,6 +81,8 @@ class SecurityAgent:
81
  self.client = AsyncOpenAI(
82
  base_url=vllm_base_url,
83
  api_key=api_key,
 
 
84
  )
85
 
86
  # ──────────────────────────────────────────
 
81
  self.client = AsyncOpenAI(
82
  base_url=vllm_base_url,
83
  api_key=api_key,
84
+ timeout=60.0,
85
+ max_retries=1,
86
  )
87
 
88
  # ──────────────────────────────────────────
codesentry-frontend/src/components/AnalysisView.jsx CHANGED
@@ -20,7 +20,7 @@ function formatTime(ms) {
20
  export default function AnalysisView() {
21
  const {
22
  scanStatus, agents, findings, fixes, elapsedTime,
23
- summary, setView, resetScan, amdMetrics,
24
  } = useScan();
25
 
26
  const feedRef = useRef(null);
@@ -155,7 +155,7 @@ export default function AnalysisView() {
155
  <span className="findings-count mono">{findings.length} findings</span>
156
  </div>
157
 
158
- {findings.length === 0 && (
159
  <div className="empty-state">
160
  <div className="icon">πŸ”</div>
161
  <p>Waiting for agents to report findings...</p>
@@ -167,6 +167,19 @@ export default function AnalysisView() {
167
  </div>
168
  )}
169
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  <div className="findings-feed">
171
  {findings.map((finding, index) => (
172
  <FindingCard
 
20
  export default function AnalysisView() {
21
  const {
22
  scanStatus, agents, findings, fixes, elapsedTime,
23
+ summary, setView, resetScan, amdMetrics, error
24
  } = useScan();
25
 
26
  const feedRef = useRef(null);
 
155
  <span className="findings-count mono">{findings.length} findings</span>
156
  </div>
157
 
158
+ {findings.length === 0 && scanStatus !== SCAN_STATUS.ERROR && (
159
  <div className="empty-state">
160
  <div className="icon">πŸ”</div>
161
  <p>Waiting for agents to report findings...</p>
 
167
  </div>
168
  )}
169
 
170
+ {scanStatus === SCAN_STATUS.ERROR && (
171
+ <div className="error-banner glass-card" style={{ borderColor: 'rgba(2ef4, 63, 94, 0.5)', background: 'rgba(225, 29, 72, 0.1)' }}>
172
+ <div className="completion-icon">❌</div>
173
+ <div className="completion-content">
174
+ <h4 style={{ color: '#fb7185' }}>Analysis Failed</h4>
175
+ <p>{error || "An unknown error occurred during the analysis stream."}</p>
176
+ </div>
177
+ <button className="btn btn-ghost" onClick={resetScan}>
178
+ Try Again
179
+ </button>
180
+ </div>
181
+ )}
182
+
183
  <div className="findings-feed">
184
  {findings.map((finding, index) => (
185
  <FindingCard