From 9ef72d3c45d343f1a9fa9d186c95b845f9220097 Mon Sep 17 00:00:00 2001 From: Islem Maboud Date: Wed, 15 Oct 2025 15:38:15 +0100 Subject: [PATCH 1/5] feat: add cusip, cik, isin to company schema --- perigon/api/v1_api.py | 10 ++-------- perigon/models/company.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/perigon/api/v1_api.py b/perigon/api/v1_api.py index 8a77eca..b86e885 100644 --- a/perigon/api/v1_api.py +++ b/perigon/api/v1_api.py @@ -2919,10 +2919,7 @@ def search_summarizer( params = _normalise_query(params) resp = self.api_client.request( - "POST", - path, - params=params, - json=summary_body.model_dump(by_alias=True, exclude_none=True), + "POST", path, params=params, json=summary_body.model_dump(by_alias=True) ) resp.raise_for_status() return SummarySearchResult.model_validate(resp.json()) @@ -3304,10 +3301,7 @@ async def search_summarizer_async( params = _normalise_query(params) resp = await self.api_client.request_async( - "POST", - path, - params=params, - json=summary_body.model_dump(by_alias=True, exclude_none=True), + "POST", path, params=params, json=summary_body.model_dump(by_alias=True) ) resp.raise_for_status() return SummarySearchResult.model_validate(resp.json()) diff --git a/perigon/models/company.py b/perigon/models/company.py index 0ad9b0d..12876bb 100644 --- a/perigon/models/company.py +++ b/perigon/models/company.py @@ -65,6 +65,9 @@ class Company(BaseModel): symbols: Optional[List[SymbolHolder]] = None naics: Optional[StrictStr] = None sic: Optional[StrictStr] = None + cusip: Optional[StrictStr] = None + cik: Optional[StrictStr] = None + isin: Optional[StrictStr] = None year_founded: Optional[StrictInt] = Field(default=None, alias="yearFounded") revenue: Optional[StrictStr] = None web_resources: Optional[WebResources] = Field(default=None, alias="webResources") @@ -96,6 +99,9 @@ class Company(BaseModel): "symbols", "naics", "sic", + "cusip", + "cik", + "isin", "yearFounded", "revenue", "webResources", @@ -292,6 +298,21 @@ def to_dict(self) -> Dict[str, Any]: if self.sic is None and "sic" in self.model_fields_set: _dict["sic"] = None + # set to None if cusip (nullable) is None + # and model_fields_set contains the field + if self.cusip is None and "cusip" in self.model_fields_set: + _dict["cusip"] = None + + # set to None if cik (nullable) is None + # and model_fields_set contains the field + if self.cik is None and "cik" in self.model_fields_set: + _dict["cik"] = None + + # set to None if isin (nullable) is None + # and model_fields_set contains the field + if self.isin is None and "isin" in self.model_fields_set: + _dict["isin"] = None + # set to None if year_founded (nullable) is None # and model_fields_set contains the field if self.year_founded is None and "year_founded" in self.model_fields_set: @@ -351,6 +372,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: ), "naics": obj.get("naics"), "sic": obj.get("sic"), + "cusip": obj.get("cusip"), + "cik": obj.get("cik"), + "isin": obj.get("isin"), "yearFounded": obj.get("yearFounded"), "revenue": obj.get("revenue"), "webResources": ( From 4cb5b35818db407125f4b4448542ce7e4b463dcc Mon Sep 17 00:00:00 2001 From: Islem Maboud Date: Wed, 15 Oct 2025 15:57:52 +0100 Subject: [PATCH 2/5] fix: update summary-body to use gpt-4o-mini model for tests --- tests/integration/test_v1api.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/integration/test_v1api.py b/tests/integration/test_v1api.py index 80190eb..0f3701a 100644 --- a/tests/integration/test_v1api.py +++ b/tests/integration/test_v1api.py @@ -145,7 +145,8 @@ def test_vector_search(api: V1Api): def test_summarizer(api: V1Api): - summary_body = SummaryBody() # empty body is valid + # Use gpt-4o-mini which is more stable and widely supported + summary_body = SummaryBody(prompt="Key developments", model="gpt-4o-mini") result = api.search_summarizer( summary_body=summary_body, q="renewable energy", size=10 ) From b097983cc0142b878f1b4c3173ff5e26f544c7c8 Mon Sep 17 00:00:00 2001 From: Islem Maboud Date: Wed, 15 Oct 2025 16:15:41 +0100 Subject: [PATCH 3/5] fix: removing prompt parameter --- tests/integration/test_v1api.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/integration/test_v1api.py b/tests/integration/test_v1api.py index 0f3701a..b1b7141 100644 --- a/tests/integration/test_v1api.py +++ b/tests/integration/test_v1api.py @@ -146,9 +146,11 @@ def test_vector_search(api: V1Api): def test_summarizer(api: V1Api): # Use gpt-4o-mini which is more stable and widely supported - summary_body = SummaryBody(prompt="Key developments", model="gpt-4o-mini") + summary_body = SummaryBody(model="gpt-4o-mini") result = api.search_summarizer( - summary_body=summary_body, q="renewable energy", size=10 + summary_body=summary_body, + q="AI", + size=10, ) assert result.summary and len(result.results) > 0 From 1d3dea912176b722502fd849551aa531da6cf7b4 Mon Sep 17 00:00:00 2001 From: Islem Maboud Date: Wed, 15 Oct 2025 16:20:00 +0100 Subject: [PATCH 4/5] fix: trying to remove the size --- tests/integration/test_v1api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/test_v1api.py b/tests/integration/test_v1api.py index b1b7141..a3cb997 100644 --- a/tests/integration/test_v1api.py +++ b/tests/integration/test_v1api.py @@ -150,7 +150,6 @@ def test_summarizer(api: V1Api): result = api.search_summarizer( summary_body=summary_body, q="AI", - size=10, ) assert result.summary and len(result.results) > 0 From 288aa608081416a850468b0972060f4a1da0352b Mon Sep 17 00:00:00 2001 From: Islem Maboud Date: Wed, 15 Oct 2025 17:07:58 +0100 Subject: [PATCH 5/5] fix: restore using exclude_none for HTTP request --- perigon/api/v1_api.py | 5 ++++- tests/integration/test_v1api.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/perigon/api/v1_api.py b/perigon/api/v1_api.py index b86e885..6ae6c66 100644 --- a/perigon/api/v1_api.py +++ b/perigon/api/v1_api.py @@ -2919,7 +2919,10 @@ def search_summarizer( params = _normalise_query(params) resp = self.api_client.request( - "POST", path, params=params, json=summary_body.model_dump(by_alias=True) + "POST", + path, + params=params, + json=summary_body.model_dump(by_alias=True, exclude_none=True), ) resp.raise_for_status() return SummarySearchResult.model_validate(resp.json()) diff --git a/tests/integration/test_v1api.py b/tests/integration/test_v1api.py index a3cb997..54068d2 100644 --- a/tests/integration/test_v1api.py +++ b/tests/integration/test_v1api.py @@ -146,7 +146,7 @@ def test_vector_search(api: V1Api): def test_summarizer(api: V1Api): # Use gpt-4o-mini which is more stable and widely supported - summary_body = SummaryBody(model="gpt-4o-mini") + summary_body = SummaryBody() result = api.search_summarizer( summary_body=summary_body, q="AI",