Skip to content
This repository has been archived by the owner on Jul 20, 2024. It is now read-only.

Commit

Permalink
Merge pull request #9 from BIGmama-technology/8-add-openai-apis
Browse files Browse the repository at this point in the history
8 add openai apis
  • Loading branch information
strlrd-29 committed Mar 16, 2024
2 parents 24e1919 + 3faf050 commit 8ff56e4
Show file tree
Hide file tree
Showing 27 changed files with 362 additions and 72 deletions.
5 changes: 0 additions & 5 deletions common_dockerfiles/hyko-sdk.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ COPY pyproject.toml poetry.lock ./
# Cache poetry dependencies to speed up builds
RUN poetry install --without dev --no-root --no-cache

# Copy the application code
WORKDIR /hyko_sdk
COPY hyko_sdk .

# Install project dependencies excluding the dev dependencies
RUN poetry install --without dev --no-cache

Expand All @@ -31,7 +27,6 @@ RUN apt update && \

# Copy the virtual environment from the builder stage
COPY --from=poetry-builder /.venv /.venv
COPY --from=poetry-builder /hyko_sdk /hyko_sdk
WORKDIR /app

# Activate the virtual environment
Expand Down
12 changes: 4 additions & 8 deletions hyko_toolkit/apis/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
from hyko_sdk.definitions import ToolkitAPI
"""register all apis"""

from .openai.text_completion.metadata import func as text_completion

all = {text_completion.name: text_completion}


def api_handler(name: str) -> ToolkitAPI:
return all[name]
### Openai API
from .openai.text_completion.metadata import func as func
from .openai.text_embedding.metadata import func as func # noqa: F811
22 changes: 22 additions & 0 deletions hyko_toolkit/apis/api_registry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from hyko_sdk.definitions import ToolkitAPI as _ToolkitAPI


class APIRegistry:
_registry: dict[str, _ToolkitAPI] = {}

@classmethod
def register(cls, name: str, api: _ToolkitAPI):
cls._registry[name] = api

@classmethod
def get_handler(cls, name: str) -> _ToolkitAPI:
if name not in cls._registry:
raise ValueError(f"API handler '{name}' not found")
return cls._registry[name]


class ToolkitAPI(_ToolkitAPI):
def __init__(self, name: str, task: str, description: str):
# Automatically register the instance upon creation
super().__init__(name=name, task=task, description=description)
APIRegistry.register(name, self)
6 changes: 3 additions & 3 deletions hyko_toolkit/apis/openai/text_completion/metadata.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from enum import Enum

import httpx
from hyko_sdk.definitions import ToolkitAPI
from hyko_sdk.models import CoreModel, Method
from pydantic import Field

from hyko_toolkit.apis.api_registry import ToolkitAPI
from hyko_toolkit.exceptions import APICallError

func = ToolkitAPI(
name="text_completion",
name="openai_text_completion",
task="openai",
description="Use openai api for text completion.",
)
Expand All @@ -29,7 +29,7 @@ class Inputs(CoreModel):

@func.set_param
class Params(CoreModel):
api_key: str = Field(default="", description="API key")
api_key: str = Field(description="API key")
model: Model = Field(
default=Model.chatgpt,
description="Openai model to use.",
Expand Down
79 changes: 79 additions & 0 deletions hyko_toolkit/apis/openai/text_embedding/metadata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
from enum import Enum

import httpx
from hyko_sdk.models import CoreModel, Method
from pydantic import Field

from hyko_toolkit.apis.api_registry import ToolkitAPI
from hyko_toolkit.exceptions import APICallError

func = ToolkitAPI(
name="openai_text_embedding",
task="openai",
description="Use openai api for text embedding.",
)


class Model(str, Enum):
ada_002 = "text-embedding-ada-002"
large_3 = "text-embedding-3-large"
small_3 = "text-embedding-3-small"


@func.set_input
class Inputs(CoreModel):
text: str = Field(..., description="Text to embed.")


@func.set_param
class Params(CoreModel):
api_key: str = Field(description="API key")
model: Model = Field(
default=Model.ada_002,
description="Openai model to use.",
)


@func.set_output
class Outputs(CoreModel):
embedding: list[float] = Field(..., description="text embedding.")


class Embedding(CoreModel):
embedding: list[float]


class Usage(CoreModel):
prompt_tokens: int
total_tokens: int


class Response(CoreModel):
data: list[Embedding]
model: str
usage: Usage


@func.on_call
async def call(inputs: Inputs, params: Params):
async with httpx.AsyncClient() as client:
res = await client.request(
method=Method.post,
url="https://api.openai.com/v1/embeddings",
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {params.api_key}",
},
json={
"input": inputs.text,
"model": params.model,
"encoding_format": "float",
},
timeout=60 * 5,
)
if res.is_success:
response = Response(**res.json())
else:
raise APICallError(status=res.status_code, detail=res.text)

return Outputs(embedding=response.data[0].embedding)
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@

import matplotlib.pyplot as plt
import numpy as np
from metadata import Inputs, Outputs, Params, StartupParams, func
from transformers import pipeline

from hyko_sdk.io import Image
from hyko_sdk.models import Ext
from metadata import Inputs, Outputs, Params, StartupParams, func
from transformers import pipeline


def show_mask(mask: np.ndarray, ax: plt.Axes, random_color: bool):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="mask_generation",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum

from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="ultralytics_image_classification",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
import cvzone
import numpy as np
from fastapi import HTTPException
from hyko_sdk.io import Image
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO

from hyko_sdk.io import Image


@func.on_startup
async def load(startup_params: StartupParams):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum

from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="ultralytics_image_instance_segmentation",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import cv2
import supervision as sv
from fastapi import HTTPException
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO

from hyko_sdk.io import Image
from hyko_sdk.models import Ext
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO


@func.on_startup
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum

from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="ultralytics_image_obb_object_detection",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
import cv2
import cvzone
from fastapi import HTTPException
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO

from hyko_sdk.io import Image
from hyko_sdk.models import Ext
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO


@func.on_startup
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum

from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="ultralytics_image_object_detection",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
import cv2
import cvzone
from fastapi import HTTPException
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO

from hyko_sdk.io import Image
from hyko_sdk.models import Ext
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO


@func.on_startup
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum

from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="ultralytics_image_pose_estimation",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@
import cvzone
import numpy as np
from fastapi import HTTPException
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO

from hyko_sdk.io import Video
from hyko_sdk.models import Ext
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO


@func.on_startup
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum

from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Video
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="ultralytics_video_instance_segmentation",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
import cv2
import supervision as sv
from fastapi import HTTPException
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO

from hyko_sdk.io import Video
from hyko_sdk.models import Ext
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO


@func.on_startup
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum

from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Video
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="ultralytics_video_obb_object_detection",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
import cv2
import cvzone
from fastapi import HTTPException
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO

from hyko_sdk.io import Video
from hyko_sdk.models import Ext
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO


@func.on_startup
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from enum import Enum

from pydantic import Field

from hyko_sdk.definitions import ToolkitModel
from hyko_sdk.io import Video
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitModel(
name="ultralytics_video_object_detection",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
import cv2
import cvzone
from fastapi import HTTPException
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO

from hyko_sdk.io import Video
from hyko_sdk.models import Ext
from metadata import Inputs, Outputs, Params, StartupParams, func
from ultralytics import YOLO


@func.on_startup
Expand Down
Loading

0 comments on commit 8ff56e4

Please sign in to comment.