fix: Update fields to use Optional type for better clarity and handling of null values

This commit is contained in:
salah 2026-02-26 23:39:32 +01:00
parent c6191180c8
commit 0a66b9c0e3
2 changed files with 13 additions and 13 deletions

View File

@ -5,7 +5,7 @@ from functools import lru_cache
class Settings(BaseSettings):
app_name: str = "Hadith Scholar API"
app_version: str = "0.1.0"
debug: bool = False
debug: Optional[bool] = None
# PostgreSQL
pg_host: str = "pg.betelgeusebytes.io"

View File

@ -67,8 +67,8 @@ class TopicTag(BaseModel):
class NarratorInChain(BaseModel):
order: int = Field(description="Position in chain: 1=closest to compiler, last=closest to Prophet ﷺ")
name_arabic: str = Field(description="Narrator's Arabic name as it appears in the hadith text")
name_transliterated: str = Field("", description="Latin transliteration of the name")
entity_type: str = Field("", description="PERSON, KUNYA (أبو/أم), NISBA (attributional), or TITLE (رسول الله)")
name_transliterated: Optional[str] = Field(None, description="Latin transliteration of the name")
entity_type: Optional[str] = Field(None, description="PERSON, KUNYA (أبو/أم), NISBA (attributional), or TITLE (رسول الله)")
transmission_verb: Optional[str] = Field(None, description="Exact Arabic transmission verb: حدثنا، أخبرنا، عن، سمعت")
model_config = {
@ -121,8 +121,8 @@ class HadithDetail(BaseModel):
class NarratorSummary(BaseModel):
name_arabic: str = Field(description="Primary Arabic name")
name_transliterated: str = Field("", description="Latin transliteration")
entity_type: str = Field("", description="PERSON, KUNYA, NISBA, TITLE")
name_transliterated: Optional[str] = Field(None, description="Latin transliteration")
entity_type: Optional[str] = Field(None, description="PERSON, KUNYA, NISBA, TITLE")
generation: Optional[str] = Field(None, description="طبقة: صحابي، تابعي، تابع التابعين")
reliability_grade: Optional[str] = Field(None, description="جرح وتعديل: ثقة، صدوق، ضعيف، متروك")
hadith_count: int = Field(0, description="Number of hadiths this narrator appears in")
@ -166,8 +166,8 @@ class PlaceRelation(BaseModel):
class NarratorProfile(BaseModel):
name_arabic: str = Field(description="Primary Arabic name")
name_transliterated: str = Field("", description="Latin transliteration")
entity_type: str = Field("", description="PERSON, KUNYA, NISBA, TITLE")
name_transliterated: Optional[str] = Field(None, description="Latin transliteration")
entity_type: Optional[str] = Field(None, description="PERSON, KUNYA, NISBA, TITLE")
full_nasab: Optional[str] = Field(None, description="Full lineage: فلان بن فلان بن فلان")
kunya: Optional[str] = Field(None, description="أبو/أم name (e.g. أبو هريرة)")
nisba: Optional[str] = Field(None, description="Attributional name (e.g. البخاري، المدني، الزهري)")
@ -226,8 +226,8 @@ class NarratorProfile(BaseModel):
class IsnadNode(BaseModel):
name_arabic: str = Field(description="Narrator Arabic name")
name_transliterated: str = Field("", description="Latin transliteration")
entity_type: str = Field("", description="PERSON, KUNYA, NISBA, TITLE")
name_transliterated: Optional[str] = Field(None, description="Latin transliteration")
entity_type: Optional[str] = Field(None, description="PERSON, KUNYA, NISBA, TITLE")
generation: Optional[str] = Field(None, description="طبقة")
reliability_grade: Optional[str] = Field(None, description="جرح وتعديل grade")
@ -271,9 +271,9 @@ class IsnadChain(BaseModel):
class NarratorInteraction(BaseModel):
narrator_a: str = Field(description="First narrator Arabic name")
narrator_a_transliterated: str = Field("", description="First narrator transliteration")
narrator_a_transliterated: Optional[str] = Field(None, description="First narrator transliteration")
narrator_b: str = Field(description="Second narrator Arabic name")
narrator_b_transliterated: str = Field("", description="Second narrator transliteration")
narrator_b_transliterated: Optional[str] = Field(None, description="Second narrator transliteration")
relationship_type: str = Field(description="NARRATED_FROM, TEACHER_OF, HEARD_BY, STUDENT_OF")
shared_hadith_count: int = Field(0, description="Number of hadiths connecting them")
hadith_ids: list[str] = Field(default_factory=list, description="IDs of connecting hadiths (max 20)")
@ -295,7 +295,7 @@ class NarratorInteraction(BaseModel):
class NarratorConnection(BaseModel):
narrator: str = Field(description="Connected narrator Arabic name")
narrator_transliterated: str = Field("", description="Transliteration")
narrator_transliterated: Optional[str] = Field(None, description="Transliteration")
connection_type: str = Field(description="Relationship type")
direction: str = Field(description="'incoming' (they → this) or 'outgoing' (this → them)")
@ -311,7 +311,7 @@ class NarratorNetwork(BaseModel):
class SemanticSearchResult(BaseModel):
hadith: HadithSummary = Field(description="Matching hadith")
score: float = Field(description="Cosine similarity score (0-1, higher = more relevant)")
collection: str = Field("", description="Collection name")
collection: Optional[str] = Field(None, description="Collection name")
model_config = {
"json_schema_extra": {