VcRlAgent commited on
Commit
fe1b54c
·
1 Parent(s): cbf00b6

Initial WorkWise backend merged main.py -> app.py

Browse files
app copy.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from fastapi import FastAPI
3
+ from fastapi.middleware.cors import CORSMiddleware
4
+ import spaces
5
+
6
+ # Import your existing routes and services
7
+ from app.config import settings
8
+ from app.routes import ingest_routes, ask_routes, metrics_routes
9
+ from app.services.vector_store import vector_store
10
+ from app.utils.logger import setup_logger
11
+
12
+ logger = setup_logger(__name__)
13
+
14
+ # Create FastAPI app
15
+ app = FastAPI(
16
+ title="WorkWise Backend",
17
+ description="RAG-powered Jira analytics application",
18
+ version="1.0.0"
19
+ )
20
+
21
+ # CORS Middleware
22
+ app.add_middleware(
23
+ CORSMiddleware,
24
+ allow_origins=settings.ALLOWED_ORIGINS,
25
+ allow_credentials=True,
26
+ allow_methods=["*"],
27
+ allow_headers=["*"],
28
+ )
29
+
30
+ # Include your existing routers
31
+ app.include_router(ingest_routes.router, prefix="/api", tags=["Ingestion"])
32
+ app.include_router(ask_routes.router, prefix="/api", tags=["Query"])
33
+ app.include_router(metrics_routes.router, prefix="/api", tags=["Metrics"])
34
+
35
+ @app.get("/")
36
+ async def root():
37
+ return {
38
+ "status": "online",
39
+ "service": "WorkWise API",
40
+ "version": "1.0.0"
41
+ }
42
+
43
+ @app.get("/health")
44
+ async def health_check():
45
+ try:
46
+ info = vector_store.get_collection_info()
47
+ return {
48
+ "status": "healthy",
49
+ "index_path": settings.FAISS_INDEX_PATH,
50
+ "payloads_path": settings.FAISS_PAYLOADS_PATH,
51
+ "vectors_count": info.get("vectors_count", 0)
52
+ }
53
+ except Exception as e:
54
+ logger.error(f"Health check failed: {e}")
55
+ return {"status": "error", "message": str(e)}
56
+
57
+ # Minimal Gradio UI (required for ZeroGPU)
58
+ @spaces.GPU
59
+ def query_jira(question: str):
60
+ """Simple wrapper for Gradio - calls your actual RAG logic"""
61
+ try:
62
+ # Import your actual query function here
63
+ from app.services.rag_service import process_query # adjust import as needed
64
+ result = process_query(question)
65
+ return result
66
+ except Exception as e:
67
+ return f"Error: {str(e)}"
68
+
69
+ # Create Gradio interface
70
+ with gr.Blocks(title="WorkWise - Ask Jira") as demo:
71
+ gr.Markdown("# WorkWise - Jira RAG Assistant")
72
+ gr.Markdown("Ask questions about your Jira data")
73
+
74
+ with gr.Row():
75
+ input_text = gr.Textbox(label="Your Question", placeholder="e.g., What are the top issues this sprint?")
76
+ output_text = gr.Textbox(label="Answer")
77
+
78
+ submit_btn = gr.Button("Ask")
79
+ submit_btn.click(fn=query_jira, inputs=input_text, outputs=output_text)
80
+
81
+ # Mount Gradio to FastAPI
82
+ #app = gr.mount_gradio_app(app, demo, path="/")
83
+ demo = gr.mount_gradio_app(demo, app, path="/")
84
+
85
+ # Launch
86
+ if __name__ == "__main__":
87
+ demo.launch(ssr_mode=False)
app.py CHANGED
@@ -1,86 +1,48 @@
1
  import gradio as gr
2
- from fastapi import FastAPI
3
- from fastapi.middleware.cors import CORSMiddleware
4
  import spaces
5
 
6
- # Import your existing routes and services
7
  from app.config import settings
8
- from app.routes import ingest_routes, ask_routes, metrics_routes
9
  from app.services.vector_store import vector_store
10
  from app.utils.logger import setup_logger
11
 
12
  logger = setup_logger(__name__)
13
 
14
- # Create FastAPI app
15
- app = FastAPI(
16
- title="WorkWise Backend",
17
- description="RAG-powered Jira analytics application",
18
- version="1.0.0"
19
- )
 
20
 
21
- # CORS Middleware
22
- app.add_middleware(
23
- CORSMiddleware,
24
- allow_origins=settings.ALLOWED_ORIGINS,
25
- allow_credentials=True,
26
- allow_methods=["*"],
27
- allow_headers=["*"],
28
- )
 
 
 
 
 
 
 
29
 
30
- # Include your existing routers
31
  app.include_router(ingest_routes.router, prefix="/api", tags=["Ingestion"])
32
- app.include_router(ask_routes.router, prefix="/api", tags=["Query"])
33
  app.include_router(metrics_routes.router, prefix="/api", tags=["Metrics"])
34
 
35
- @app.get("/")
36
- async def root():
37
- return {
38
- "status": "online",
39
- "service": "WorkWise API",
40
- "version": "1.0.0"
41
- }
42
-
43
  @app.get("/health")
44
  async def health_check():
45
  try:
46
  info = vector_store.get_collection_info()
47
- return {
48
- "status": "healthy",
49
- "index_path": settings.FAISS_INDEX_PATH,
50
- "payloads_path": settings.FAISS_PAYLOADS_PATH,
51
- "vectors_count": info.get("vectors_count", 0)
52
- }
53
  except Exception as e:
54
- logger.error(f"Health check failed: {e}")
55
  return {"status": "error", "message": str(e)}
56
 
57
- # Minimal Gradio UI (required for ZeroGPU)
58
- @spaces.GPU
59
- def query_jira(question: str):
60
- """Simple wrapper for Gradio - calls your actual RAG logic"""
61
- try:
62
- # Import your actual query function here
63
- from app.services.rag_service import process_query # adjust import as needed
64
- result = process_query(question)
65
- return result
66
- except Exception as e:
67
- return f"Error: {str(e)}"
68
-
69
- # Create Gradio interface
70
- with gr.Blocks(title="WorkWise - Ask Jira") as demo:
71
- gr.Markdown("# WorkWise - Jira RAG Assistant")
72
- gr.Markdown("Ask questions about your Jira data")
73
-
74
- with gr.Row():
75
- input_text = gr.Textbox(label="Your Question", placeholder="e.g., What are the top issues this sprint?")
76
- output_text = gr.Textbox(label="Answer")
77
-
78
- submit_btn = gr.Button("Ask")
79
- submit_btn.click(fn=query_jira, inputs=input_text, outputs=output_text)
80
-
81
- # Mount Gradio to FastAPI
82
- app = gr.mount_gradio_app(app, demo, path="/")
83
-
84
- # Launch
85
  if __name__ == "__main__":
86
  demo.launch(ssr_mode=False)
 
1
  import gradio as gr
 
 
2
  import spaces
3
 
4
+ # Import your services
5
  from app.config import settings
 
6
  from app.services.vector_store import vector_store
7
  from app.utils.logger import setup_logger
8
 
9
  logger = setup_logger(__name__)
10
 
11
+ @spaces.GPU
12
+ def query_jira(question: str):
13
+ try:
14
+ from app.services.rag_service import process_query
15
+ return process_query(question)
16
+ except Exception as e:
17
+ return f"Error: {str(e)}"
18
 
19
+ # Create Gradio app with API
20
+ with gr.Blocks() as demo:
21
+ gr.Markdown("# WorkWise - Jira RAG Assistant")
22
+
23
+ input_text = gr.Textbox(label="Question")
24
+ output_text = gr.Textbox(label="Answer")
25
+ submit_btn = gr.Button("Ask")
26
+
27
+ submit_btn.click(fn=query_jira, inputs=input_text, outputs=output_text, api_name="ask")
28
+
29
+ # Access FastAPI app from Gradio
30
+ app = demo.app
31
+
32
+ # Add your custom routes to Gradio's underlying FastAPI app
33
+ from app.routes import ingest_routes, ask_routes, metrics_routes
34
 
 
35
  app.include_router(ingest_routes.router, prefix="/api", tags=["Ingestion"])
36
+ app.include_router(ask_routes.router, prefix="/api", tags=["Query"])
37
  app.include_router(metrics_routes.router, prefix="/api", tags=["Metrics"])
38
 
 
 
 
 
 
 
 
 
39
  @app.get("/health")
40
  async def health_check():
41
  try:
42
  info = vector_store.get_collection_info()
43
+ return {"status": "healthy", "vectors_count": info.get("vectors_count", 0)}
 
 
 
 
 
44
  except Exception as e:
 
45
  return {"status": "error", "message": str(e)}
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  if __name__ == "__main__":
48
  demo.launch(ssr_mode=False)
app/routes/ask_routes.py CHANGED
@@ -11,6 +11,7 @@ logger = setup_logger(__name__)
11
  router = APIRouter()
12
 
13
  @router.post("/ask", response_model=QueryResponse)
 
14
  async def ask_question(request: QueryRequest):
15
  """
16
  Answer natural language questions using RAG
 
11
  router = APIRouter()
12
 
13
  @router.post("/ask", response_model=QueryResponse)
14
+ @spaces.GPU
15
  async def ask_question(request: QueryRequest):
16
  """
17
  Answer natural language questions using RAG
app/routes/ingest_routes.py CHANGED
@@ -10,6 +10,7 @@ logger = setup_logger(__name__)
10
  router = APIRouter()
11
 
12
  @router.post("/ingest", response_model=IngestResponse)
 
13
  async def ingest_data(request: IngestRequest):
14
  """
15
  Ingest Jira data from CSV/JSON file
 
10
  router = APIRouter()
11
 
12
  @router.post("/ingest", response_model=IngestResponse)
13
+ @spaces.GPU
14
  async def ingest_data(request: IngestRequest):
15
  """
16
  Ingest Jira data from CSV/JSON file
app/routes/metrics_routes.py CHANGED
@@ -9,6 +9,7 @@ logger = setup_logger(__name__)
9
  router = APIRouter()
10
 
11
  @router.get("/metrics", response_model=MetricsResponse)
 
12
  async def get_metrics():
13
  """
14
  Get aggregate metrics from Jira data
 
9
  router = APIRouter()
10
 
11
  @router.get("/metrics", response_model=MetricsResponse)
12
+ @spaces.GPU
13
  async def get_metrics():
14
  """
15
  Get aggregate metrics from Jira data