Skip to content

Commit 653bc90

Browse files
author
jravenel
committed
Merge branch 'main' into dev
2 parents b26d26c + 2da780d commit 653bc90

File tree

5 files changed

+54
-35
lines changed

5 files changed

+54
-35
lines changed

lib/abi/utils/OntologyYaml.py

+18-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def __init__(self):
1818
@staticmethod
1919
def rdf_to_yaml(
2020
graph,
21-
ontology_schemas: list = ["src/core/ontologies/ConsolidatedOntology.ttl"],
21+
ontology_schemas: list = ["src/core/modules/common/ontologies/ConsolidatedOntology.ttl"],
2222
class_colors_mapping: dict = {},
2323
top_level_class: str = 'http://purl.obolibrary.org/obo/BFO_0000001',
2424
display_relations_names: bool = True,
@@ -559,7 +559,23 @@ def create_yaml(self, class_color, display_relations_names):
559559

560560
# Add title in style
561561
ind_title = f"{label} (id: {uri})"
562-
for x in ["description", "summary", "headline", "industry", "employeecountrange", "content", "slug"]:
562+
yaml_properties = [
563+
"description",
564+
"summary",
565+
"headline",
566+
"industry",
567+
"employeecountrange",
568+
"content",
569+
"slug",
570+
"mission",
571+
"vision",
572+
"number_of_employees",
573+
"market_share",
574+
"source",
575+
"source_url",
576+
"source_date"
577+
]
578+
for x in yaml_properties:
563579
x_value = individual.get(x)
564580
if x_value:
565581
entity[x] = x_value[0]

src/core/modules/common/integrations/AiaIntegration.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from dataclasses import dataclass
33
from pydantic import BaseModel, Field
44
from lib.abi.integration.integration import Integration, IntegrationConnectionError, IntegrationConfiguration
5-
from src import secret
5+
from src import config
66
import requests
77

88
LOGO_URL = "https://naasai-public.s3.eu-west-3.amazonaws.com/abi-demo/ontology_AIA.png"
@@ -16,6 +16,8 @@ class AiaIntegrationConfiguration(IntegrationConfiguration):
1616
base_url (str): Base URL for AIA API
1717
"""
1818
api_key: str
19+
li_at: str
20+
JSESSIONID: str
1921
base_url: str = "https://naas-abi-space.default.space.naas.ai" # Replace with actual base URL
2022

2123
class AiaIntegration(Integration):
@@ -45,14 +47,14 @@ def _make_request(self, method: str, endpoint: str, data: Dict = None) -> Dict:
4547
except requests.exceptions.RequestException as e:
4648
raise IntegrationConnectionError(f"AIA API request failed: {str(e)}")
4749

48-
def create_aia(self, workspace_id: str, linkedin_urls: List[str]) -> Dict:
50+
def create_aia(self, linkedin_urls: List[str]) -> Dict:
4951
"""Create an AIA organization with the specified parameters."""
5052
data = {
5153
"api_key": self.__configuration.api_key,
52-
"workspace_id": workspace_id,
54+
"workspace_id": config.workspace_id,
5355
"linkedin_urls": linkedin_urls,
54-
"li_at": secret.get('li_at'),
55-
"JSESSIONID": secret.get('JSESSIONID'),
56+
"li_at": self.__configuration.li_at,
57+
"JSESSIONID": self.__configuration.JSESSIONID,
5658
}
5759
return self._make_request("POST", "/ontology/create_aia_organization", data)
5860

@@ -62,15 +64,13 @@ def as_tools(configuration: AiaIntegrationConfiguration):
6264
integration: AiaIntegration = AiaIntegration(configuration)
6365

6466
class CreateAiaOrganizationSchema(BaseModel):
65-
workspace_id: str = Field(..., description="Workspace ID for the organization")
66-
linkedin_urls: List[str] = Field(..., description="List of LinkedIn URLs to process")
67+
linkedin_urls: List[str] = Field(..., description="LinkedIn URL(s) to process. It can be one or multiple URLs. URLs must be in the format: https://.+\.linkedin\.[^/]+/in/[^?]+")
6768

6869
return [
6970
StructuredTool(
7071
name="aia_create_personal_agent",
71-
description="Create AIA Personal Assistant and ontology with LinkedIn data to naas workspace",
72-
func=lambda workspace_id, linkedin_urls:
73-
integration.create_aia(workspace_id, linkedin_urls),
72+
description="Create AIA Personal Assistant/Agent based on LinkedIn URL.",
73+
func=lambda linkedin_urls: integration.create_aia(linkedin_urls),
7474
args_schema=CreateAiaOrganizationSchema
7575
)
7676
]

src/core/modules/common/integrations/LinkedInIntegration.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ def get_profile_posts(
254254

255255
return df.reset_index(drop=True)
256256

257-
def get_organization_id(url: str) -> str:
257+
def get_organization_id(self, url: str) -> str:
258258
"""Extract organization ID from LinkedIn URL.
259259
260260
Handles company, school and showcase pages.

src/core/modules/opendata/workflows/LinkedInOrganizationsWorkflows.py

+24-21
Original file line numberDiff line numberDiff line change
@@ -79,33 +79,36 @@ def get_organization_info(self, parameters: LinkedInOrganizationParameters) -> d
7979
linkedin_url = self.__google_search_integration.search_linkedin_organization_url(parameters.organization_name)
8080
logger.debug(f"LinkedIn URL: {linkedin_url}")
8181

82-
logger.info(f"Extracting organization data from LinkedInIntegration for '{parameters.organization_name}'")
83-
df = self.__linkedin_integration.get_organization_details(linkedin_url)
84-
if len(df) > 0:
85-
data = {
86-
"organization_name": parameters.organization_name,
87-
"organization_id": create_id_from_string(parameters.organization_name),
88-
"linkedin_url": linkedin_url,
89-
"data": df.to_dict('records'),
90-
"output_dir": str(output_dir),
91-
"date_extracted": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
92-
}
93-
logger.info(f"Data successfully extracted: {data}")
94-
else:
95-
logger.error(f"No data found for '{parameters.organization_name}'")
96-
97-
# Save data to storage
98-
services.storage_service.put_object(
99-
prefix=output_dir,
100-
key=file_name,
101-
content=json.dumps(data, indent=4, ensure_ascii=False).encode("utf-8")
102-
)
82+
if linkedin_url is not None:
83+
logger.info(f"Extracting organization data from LinkedInIntegration for '{parameters.organization_name}'")
84+
df = self.__linkedin_integration.get_organization_details(linkedin_url)
85+
if len(df) > 0:
86+
data = {
87+
"organization_name": parameters.organization_name,
88+
"organization_id": create_id_from_string(parameters.organization_name),
89+
"linkedin_url": linkedin_url,
90+
"data": df.to_dict('records'),
91+
"output_dir": str(output_dir),
92+
"date_extracted": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
93+
}
94+
logger.info(f"Data successfully extracted: {data}")
95+
else:
96+
logger.error(f"No data found for '{parameters.organization_name}'")
97+
98+
# Save data to storage
99+
services.storage_service.put_object(
100+
prefix=output_dir,
101+
key=file_name,
102+
content=json.dumps(data, indent=4, ensure_ascii=False).encode("utf-8")
103+
)
103104
return data
104105

105106
def get_organization_logo_url(self, parameters: LinkedInOrganizationParameters) -> str:
106107
"""Get organization logo URL from the OpenData store."""
107108
# Initialize storage
108109
data = self.get_organization_info(parameters)
110+
if data is None:
111+
return None
109112
logo_url = data.get("data", [{}])[0].get("LOGO_URL")
110113
output_dir = data.get("output_dir")
111114
organization_id = data.get("organization_id")

src/core/modules/operations/assistants/OperationsAssistant.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def create_agent(
8686
tools += naas_workspace_workflows.as_tools()
8787

8888
if naas_api_key and li_at and JSESSIONID:
89-
aia_integration_config = AiaIntegrationConfiguration(api_key=naas_api_key)
89+
aia_integration_config = AiaIntegrationConfiguration(api_key=naas_api_key, li_at=li_at, JSESSIONID=JSESSIONID)
9090
tools += AiaIntegration.as_tools(aia_integration_config)
9191

9292
if github_access_token:

0 commit comments

Comments
 (0)