|
from __future__ import absolute_import |
|
|
|
from abc import ABC, abstractmethod |
|
from typing import List |
|
|
|
from omagent_core.engine.http.models.integration import Integration |
|
from omagent_core.engine.http.models.integration_api import IntegrationApi |
|
from omagent_core.engine.http.models.integration_api_update import \ |
|
IntegrationApiUpdate |
|
from omagent_core.engine.http.models.integration_update import \ |
|
IntegrationUpdate |
|
from omagent_core.engine.http.models.prompt_template import PromptTemplate |
|
|
|
|
|
class IntegrationClient(ABC): |
|
"""Client for managing integrations with external systems. Some examples of integrations are: |
|
1. AI/LLM providers (e.g. OpenAI, HuggingFace) |
|
2. Vector DBs (Pinecone, Weaviate etc.) |
|
3. Kafka |
|
4. Relational databases |
|
|
|
Integrations are configured as integration -> api with 1->N cardinality. |
|
APIs are the underlying resources for an integration and depending on the type of integration they represent underlying resources. |
|
Examples: |
|
LLM integrations |
|
The integration specifies the name of the integration unique to your environment, api keys and endpoint used. |
|
APIs are the models (e.g. text-davinci-003, or text-embedding-ada-002) |
|
|
|
Vector DB integrations, |
|
The integration represents the cluster, specifies the name of the integration unique to your environment, api keys and endpoint used. |
|
APIs are the indexes (e.g. pinecone) or class (e.g. for weaviate) |
|
|
|
Kafka |
|
The integration represents the cluster, specifies the name of the integration unique to your environment, api keys and endpoint used. |
|
APIs are the topics that are configured for use within this kafka cluster |
|
""" |
|
|
|
@abstractmethod |
|
def associate_prompt_with_integration( |
|
self, ai_integration: str, model_name: str, prompt_name: str |
|
): |
|
"""Associate a prompt with an AI integration and model""" |
|
pass |
|
|
|
@abstractmethod |
|
def delete_integration_api(self, api_name: str, integration_name: str): |
|
"""Delete a specific integration api for a given integration""" |
|
pass |
|
|
|
def delete_integration(self, integration_name: str): |
|
"""Delete an integration""" |
|
pass |
|
|
|
def get_integration_api( |
|
self, api_name: str, integration_name: str |
|
) -> IntegrationApi: |
|
pass |
|
|
|
def get_integration_apis(self, integration_name: str) -> List[IntegrationApi]: |
|
pass |
|
|
|
def get_integration(self, integration_name: str) -> Integration: |
|
pass |
|
|
|
def get_integrations(self) -> List[Integration]: |
|
"""Returns the list of all the available integrations""" |
|
pass |
|
|
|
def get_prompts_with_integration( |
|
self, ai_integration: str, model_name: str |
|
) -> List[PromptTemplate]: |
|
pass |
|
|
|
def get_token_usage_for_integration(self, name, integration_name) -> int: |
|
pass |
|
|
|
def get_token_usage_for_integration_provider(self, name) -> dict: |
|
pass |
|
|
|
def register_token_usage(self, body, name, integration_name): |
|
pass |
|
|
|
def save_integration_api( |
|
self, integration_name, api_name, api_details: IntegrationApiUpdate |
|
): |
|
pass |
|
|
|
def save_integration( |
|
self, integration_name, integration_details: IntegrationUpdate |
|
): |
|
pass |
|
|
|
|
|
|
|
def delete_tag_for_integration(self, body, tag_name, integration_name): |
|
"""Delete an integration""" |
|
pass |
|
|
|
def delete_tag_for_integration_provider(self, body, name): |
|
pass |
|
|
|
def put_tag_for_integration(self, body, name, integration_name): |
|
pass |
|
|
|
def put_tag_for_integration_provider(self, body, name): |
|
pass |
|
|
|
def get_tags_for_integration(self, name, integration_name): |
|
pass |
|
|
|
def get_tags_for_integration_provider(self, name): |
|
pass |
|
|