christopher commited on
Commit
e00c07d
·
1 Parent(s): 97e0c69

changed the nlp to support list and altered the fast API

Browse files
Files changed (2) hide show
  1. app.py +8 -24
  2. models/nlp.py +10 -2
app.py CHANGED
@@ -1,7 +1,7 @@
1
  from fastapi import FastAPI, HTTPException, BackgroundTasks
2
  from fastapi.middleware.cors import CORSMiddleware
3
  from pydantic import BaseModel
4
- from typing import Dict, Optional, List
5
  import uuid
6
  from datetime import datetime
7
  from contextlib import asynccontextmanager
@@ -12,7 +12,6 @@ from models.nlp import NLPModel
12
  from database.query import DatabaseService
13
  from database.query_processor import QueryProcessor
14
 
15
-
16
  # Initialize models
17
  embedding_model = None
18
  summarization_model = None
@@ -29,7 +28,8 @@ async def lifespan(app: FastAPI):
29
  db_service = DatabaseService()
30
  yield
31
  # Clean up when app stops
32
- await db_service.close()
 
33
 
34
  app = FastAPI(
35
  title="Kairos News API",
@@ -53,29 +53,20 @@ class PostRequest(BaseModel):
53
  start_date: Optional[str] = None # Format: "YYYY-MM-DD"
54
  end_date: Optional[str] = None # Format: "YYYY-MM-DD"
55
 
56
- class ArticleResult(BaseModel):
57
- url: str
58
- content: str
59
- distance: float
60
- date: str
61
- topic: str
62
-
63
- class SummaryResult(BaseModel):
64
- summary: str
65
-
66
  class JobStatus(BaseModel):
67
  id: str
68
  status: str # "processing", "completed", "failed"
69
  created_at: datetime
70
- completed_at: Optional[datetime]
71
  request: PostRequest
72
- result: Optional[Dict]
73
 
74
  @app.post("/index", response_model=JobStatus)
75
  async def create_job(request: PostRequest, background_tasks: BackgroundTasks):
76
  job_id = str(uuid.uuid4())
77
 
78
  jobs_db[job_id] = {
 
79
  "status": "processing",
80
  "created_at": datetime.now(),
81
  "completed_at": None,
@@ -93,14 +84,7 @@ async def create_job(request: PostRequest, background_tasks: BackgroundTasks):
93
  db_service
94
  )
95
 
96
- return {
97
- "id": job_id,
98
- "status": "processing",
99
- "created_at": jobs_db[job_id]["created_at"],
100
- "completed_at": None,
101
- "request": request,
102
- "result": None
103
- }
104
 
105
  @app.get("/loading", response_model=JobStatus)
106
  async def get_job_status(id: str):
@@ -135,7 +119,7 @@ async def process_job(
135
  jobs_db[job_id].update({
136
  "status": "completed",
137
  "completed_at": datetime.now(),
138
- "result": result
139
  })
140
  except Exception as e:
141
  jobs_db[job_id].update({
 
1
  from fastapi import FastAPI, HTTPException, BackgroundTasks
2
  from fastapi.middleware.cors import CORSMiddleware
3
  from pydantic import BaseModel
4
+ from typing import Dict, Optional, List, Any
5
  import uuid
6
  from datetime import datetime
7
  from contextlib import asynccontextmanager
 
12
  from database.query import DatabaseService
13
  from database.query_processor import QueryProcessor
14
 
 
15
  # Initialize models
16
  embedding_model = None
17
  summarization_model = None
 
28
  db_service = DatabaseService()
29
  yield
30
  # Clean up when app stops
31
+ if db_service:
32
+ await db_service.close()
33
 
34
  app = FastAPI(
35
  title="Kairos News API",
 
53
  start_date: Optional[str] = None # Format: "YYYY-MM-DD"
54
  end_date: Optional[str] = None # Format: "YYYY-MM-DD"
55
 
 
 
 
 
 
 
 
 
 
 
56
  class JobStatus(BaseModel):
57
  id: str
58
  status: str # "processing", "completed", "failed"
59
  created_at: datetime
60
+ completed_at: Optional[datetime] = None
61
  request: PostRequest
62
+ result: Optional[Dict[str, Any]] = None # Flexible result structure
63
 
64
  @app.post("/index", response_model=JobStatus)
65
  async def create_job(request: PostRequest, background_tasks: BackgroundTasks):
66
  job_id = str(uuid.uuid4())
67
 
68
  jobs_db[job_id] = {
69
+ "id": job_id, # Ensure `id` is included
70
  "status": "processing",
71
  "created_at": datetime.now(),
72
  "completed_at": None,
 
84
  db_service
85
  )
86
 
87
+ return jobs_db[job_id] # Return the full job object
 
 
 
 
 
 
 
88
 
89
  @app.get("/loading", response_model=JobStatus)
90
  async def get_job_status(id: str):
 
119
  jobs_db[job_id].update({
120
  "status": "completed",
121
  "completed_at": datetime.now(),
122
+ "result": result if result else {"message": "No results found"}
123
  })
124
  except Exception as e:
125
  jobs_db[job_id].update({
models/nlp.py CHANGED
@@ -11,8 +11,16 @@ class NLPModel:
11
  return self.extract_entities(text) # or another default method
12
 
13
  def extract_entities(self, text: str):
14
- doc = self.nlp(text)
15
- return [(ent.text.lower(), ent.label_) for ent in doc.ents]
 
 
 
 
 
 
 
 
16
 
17
  def tokenize_sentences(self, text: str):
18
  return nltk.sent_tokenize(text)
 
11
  return self.extract_entities(text) # or another default method
12
 
13
  def extract_entities(self, text: str):
14
+ if isinstance(text, list): # If input is a list of sentences
15
+ entities = []
16
+ for sentence in text:
17
+ doc = self.nlp(sentence)
18
+ entities.extend([(ent.text.lower(), ent.label_) for ent in doc.ents])
19
+ return entities
20
+ else: # If input is a single string
21
+ doc = self.nlp(text)
22
+ return [(ent.text.lower(), ent.label_) for ent in doc.ents]
23
+
24
 
25
  def tokenize_sentences(self, text: str):
26
  return nltk.sent_tokenize(text)