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

Commit

Permalink
feat: add hyko_toolkit including APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
1hachem committed Mar 14, 2024
1 parent 15d92e8 commit 16a5a12
Show file tree
Hide file tree
Showing 111 changed files with 268 additions and 324 deletions.
Empty file added hyko_toolkit/__init__.py
Empty file.
9 changes: 9 additions & 0 deletions hyko_toolkit/apis/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from hyko_sdk.definitions import ToolkitAPI

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]
102 changes: 102 additions & 0 deletions hyko_toolkit/apis/openai/text_completion/metadata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
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.exceptions import APICallError

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


class Model(str, Enum):
gpt_4 = "gpt-4"
chatgpt = "gpt-3.5-turbo"


@func.set_input
class Inputs(CoreModel):
system_prompt: str = Field(
default="You are a helpful assistant", description="generated text."
)
prompt: str = Field(..., description="Input prompt.")


@func.set_param
class Params(CoreModel):
api_key: str = Field(default="", description="API key")
model: Model = Field(
default=Model.chatgpt,
description="Openai model to use.",
)
max_tokens: int = Field(
default=1024,
description="The maximum number of tokens that can be generated in the chat completion.",
)
temperature: int = Field(
default=1,
description="What sampling temperature to use, between 0 and 2, defaults to 1.",
)


@func.set_output
class Outputs(CoreModel):
result: str = Field(..., description="generated text.")


class Message(CoreModel):
role: str
content: str


class Choice(CoreModel):
index: int
message: Message
finish_reason: str


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


class Response(CoreModel):
created: int
model: str
choices: list[Choice]
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/chat/completions",
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {params.api_key}",
},
json={
"model": params.model,
"max_tokens": params.max_tokens,
"temperature": params.temperature,
"messages": [
{"role": "system", "content": inputs.system_prompt},
{"role": "user", "content": inputs.prompt},
],
},
timeout=60 * 5,
)
if res.is_success:
response = Response(**res.json())
else:
raise APICallError(status=res.status_code, detail=res.text)

return Outputs(result=response.choices[0].message.content)
7 changes: 7 additions & 0 deletions hyko_toolkit/exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from dataclasses import dataclass


@dataclass
class APICallError(BaseException):
status: int
detail: str = "An api call error happened"
3 changes: 1 addition & 2 deletions hyko_toolkit/functions/converters/image_converter/main.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import cv2
import numpy as np
from metadata import Inputs, Outputs, Params, func

from hyko_sdk.io import Image
from metadata import Inputs, Outputs, Params, func


@func.on_execute
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 ToolkitFunction
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel, Ext
from pydantic import Field


class SupportedTypes(Enum):
Expand Down
9 changes: 4 additions & 5 deletions hyko_toolkit/functions/converters/markdown_to_pdf/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@
import markdown
import pygments
from fpdf import FPDF
from metadata import Inputs, Outputs, Params, func
from hyko_sdk.io import PDF
from hyko_sdk.models import CoreModel, Ext
from metadata import Inputs, Outputs, func
from pygments.formatters import HtmlFormatter
from pygments.lexers import get_lexer_by_name
from pygments.util import ClassNotFound

from hyko_sdk.io import PDF
from hyko_sdk.models import Ext


def format_code_block(code: str, language: str):
"""
Expand Down Expand Up @@ -128,6 +127,6 @@ def convert_markdown_to_pdf(markdown_string: str):


@func.on_execute
async def main(inputs: Inputs, params: Params) -> Outputs:
async def main(inputs: Inputs, params: CoreModel) -> Outputs:
buff = convert_markdown_to_pdf(inputs.markdown_string)
return Outputs(pdf=PDF(val=buff, obj_ext=Ext.PDF))
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from pydantic import Field

from hyko_sdk.definitions import ToolkitFunction
from hyko_sdk.io import PDF
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitFunction(
name="markdown_to_pdf",
Expand All @@ -16,11 +15,6 @@ class Inputs(CoreModel):
markdown_string: str = Field(..., description="The Markdown content to convert.")


@func.set_param
class Params(CoreModel):
pass


@func.set_output
class Outputs(CoreModel):
pdf: PDF = Field(..., description="PDF File .")
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 ToolkitFunction
from hyko_sdk.io import PDF
from hyko_sdk.models import CoreModel
from pydantic import Field


class SupportedLanguages(str, Enum):
Expand Down
5 changes: 3 additions & 2 deletions hyko_toolkit/functions/converters/pdf_to_text/main.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from io import BytesIO

from hyko_sdk.models import CoreModel
from langchain_community.document_loaders import PyPDFLoader
from metadata import Inputs, Outputs, Params, func
from metadata import Inputs, Outputs, func


@func.on_execute
async def main(inputs: Inputs, params: Params) -> Outputs:
async def main(inputs: Inputs, params: CoreModel) -> Outputs:
"""
Processes a PDF file provided in binary format, extracts text content from it,
and returns the concatenated text as output.
Expand Down
8 changes: 1 addition & 7 deletions hyko_toolkit/functions/converters/pdf_to_text/metadata.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from pydantic import Field

from hyko_sdk.definitions import ToolkitFunction
from hyko_sdk.io import PDF
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitFunction(
name="pdf_to_text",
Expand All @@ -16,11 +15,6 @@ class Inputs(CoreModel):
pdf_file: PDF = Field(..., description="User input pdf to be converted to text")


@func.set_param
class Params(CoreModel):
pass


@func.set_output
class Outputs(CoreModel):
text: str = Field(..., description="Extracted text from pdf")
3 changes: 1 addition & 2 deletions hyko_toolkit/functions/converters/video_converter/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
import tempfile

import cv2
from metadata import Inputs, Outputs, Params, func

from hyko_sdk.io import Video
from metadata import Inputs, Outputs, Params, func


def convert_video(buffer, codec):
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 ToolkitFunction
from hyko_sdk.io import Video
from hyko_sdk.models import CoreModel, Ext
from pydantic import Field

func = ToolkitFunction(
name="video_converter",
Expand Down
7 changes: 3 additions & 4 deletions hyko_toolkit/functions/converters/video_to_audio/main.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import os
import subprocess

from metadata import Inputs, Outputs, Params, func

from hyko_sdk.io import Audio
from hyko_sdk.models import Ext
from hyko_sdk.models import CoreModel, Ext
from metadata import Inputs, Outputs, func


@func.on_execute
async def main(inputs: Inputs, params: Params) -> Outputs:
async def main(inputs: Inputs, params: CoreModel) -> Outputs:
_, ext = os.path.splitext(inputs.video.get_name())

with open(f"/app/video.{ext}", "wb") as f:
Expand Down
8 changes: 1 addition & 7 deletions hyko_toolkit/functions/converters/video_to_audio/metadata.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from pydantic import Field

from hyko_sdk.definitions import ToolkitFunction
from hyko_sdk.io import Audio, Video
from hyko_sdk.models import CoreModel
from pydantic import Field

func = ToolkitFunction(
name="video_to_audio",
Expand All @@ -16,11 +15,6 @@ class Inputs(CoreModel):
video: Video = Field(..., description="User input video to be converted to audio")


@func.set_param
class Params(CoreModel):
pass


@func.set_output
class Outputs(CoreModel):
audio: Audio = Field(..., description="converted audio")
5 changes: 2 additions & 3 deletions hyko_toolkit/functions/downloaders/youtube_downloader/main.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import io

from hyko_sdk.io import Video
from hyko_sdk.models import Ext
from metadata import (
Inputs,
Outputs,
Expand All @@ -8,9 +10,6 @@
)
from pytube import YouTube

from hyko_sdk.io import Video
from hyko_sdk.models import Ext


def download_video(url, resolution):
"""
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 ToolkitFunction
from hyko_sdk.io import Video
from hyko_sdk.models import CoreModel
from pydantic import Field


class Resolution(str, Enum):
Expand Down
3 changes: 1 addition & 2 deletions hyko_toolkit/functions/plotting/bivariate_plot/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from metadata import Inputs, Outputs, Params, func

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


def generate_violin_plot(x: list[float], y: list[float]):
Expand Down
3 changes: 1 addition & 2 deletions hyko_toolkit/functions/plotting/bivariate_plot/metadata.py
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 ToolkitFunction
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel
from pydantic import Field


class SupportedPlots(str, Enum):
Expand Down
3 changes: 1 addition & 2 deletions hyko_toolkit/functions/plotting/univariate_plot/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

import matplotlib.pyplot as plt
import pandas as pd
from metadata import Inputs, Outputs, Params, func

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


def generate_pie_chart(y: list[float]):
Expand Down
3 changes: 1 addition & 2 deletions hyko_toolkit/functions/plotting/univariate_plot/metadata.py
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 ToolkitFunction
from hyko_sdk.io import Image
from hyko_sdk.models import CoreModel
from pydantic import Field


class SupportedPlots(str, Enum):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import cv2
import numpy as np
from metadata import Inputs, Outputs, Params, func

from hyko_sdk.io import Image
from metadata import Inputs, Outputs, Params, func


@func.on_execute
Expand Down
Loading

0 comments on commit 16a5a12

Please sign in to comment.