Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions examples/azure-openai/azure-universal.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,13 @@ def initialize_client():

# Create the Azure client
azure_client = AzureOpenAI(
# Typically "2023-07-01-preview" or a more recent version
api_version="2023-07-01-preview",
azure_endpoint="https://javelinpreview.openai.azure.com",
api_key=azure_openai_api_key,
api_version="2023-09-15-preview"
)

# Initialize the Javelin client and register the Azure client
config = JavelinConfig(javelin_api_key=javelin_api_key)
javelin_client = JavelinClient(config)
rout_name = "azureopenai_univ" # Define the unversal route name
javelin_client.register_azureopenai(azure_client, route_name=rout_name)
javelin_client.register_azureopenai(azure_client)

return azure_client

Expand Down
3 changes: 1 addition & 2 deletions examples/bedrock/bedrock_client_universal.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ def init_bedrock():
javelin_client = JavelinClient(config)
javelin_client.register_bedrock(
bedrock_runtime_client=bedrock_runtime_client,
bedrock_client=bedrock_client,
route_name="amazon_univ",
bedrock_client=bedrock_client
)
return bedrock_runtime_client

Expand Down
7 changes: 2 additions & 5 deletions examples/openai/openai-universal.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,12 @@ def init_javelin_client_sync(openai_client):
"""Initialize JavelinClient for synchronous usage and register the OpenAI route."""
try:
# Set (and print) the Javelin key
javelin_api_key = os.getenv(
"JAVELIN_API_KEY"
) # define your javelin api key here
javelin_api_key = os.getenv("JAVELIN_API_KEY")
config = JavelinConfig(
javelin_api_key=javelin_api_key,
)
client = JavelinClient(config)
rout_name = "openai_univ" # define your universal route name here
client.register_openai(openai_client, route_name=rout_name)
client.register_openai(openai_client)
return client
except Exception as e:
raise e
Expand Down
13 changes: 8 additions & 5 deletions javelin_sdk/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,8 @@ def register_provider(
"/"
) # Remove trailing slash if present

# Update Javelin headers into the client's _custom_headers
openai_client._custom_headers["x-javelin-provider"] = base_url_str
# default route name to provider name if not provided
route_name = route_name or provider_name
openai_client._custom_headers["x-javelin-route"] = route_name

# Store the original methods only if not already stored
Expand Down Expand Up @@ -521,12 +521,12 @@ def get_nested_attr(obj, attr_path):

return openai_client

def register_openai(self, openai_client: Any, route_name: str = None) -> Any:
def register_openai(self, openai_client: Any, route_name: str = "") -> Any:
return self.register_provider(
openai_client, provider_name="openai", route_name=route_name
)

def register_azureopenai(self, openai_client: Any, route_name: str = None) -> Any:
def register_azureopenai(self, openai_client: Any, route_name: str = "") -> Any:
return self.register_provider(
openai_client, provider_name="azureopenai", route_name=route_name
)
Comment on lines +524 to 532
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The default value for route_name in register_openai and register_azureopenai is changed from None to "". While this aligns with the intention of using a default route name, it might be more explicit to keep it as None and handle the default assignment within the register_provider method. This would centralize the logic for default route name assignment.

Suggested change
def register_openai(self, openai_client: Any, route_name: str = "") -> Any:
return self.register_provider(
openai_client, provider_name="openai", route_name=route_name
)
def register_azureopenai(self, openai_client: Any, route_name: str = None) -> Any:
def register_azureopenai(self, openai_client: Any, route_name: str = "") -> Any:
return self.register_provider(
openai_client, provider_name="azureopenai", route_name=route_name
)
def register_openai(self, openai_client: Any, route_name: str = None) -> Any:
return self.register_provider(
openai_client, provider_name="openai", route_name=route_name
)
def register_azureopenai(self, openai_client: Any, route_name: str = None) -> Any:
return self.register_provider(
openai_client, provider_name="azureopenai", route_name=route_name
)

Expand All @@ -546,7 +546,7 @@ def register_bedrock(
bedrock_runtime_client: Any,
bedrock_client: Any = None,
bedrock_session: Any = None,
route_name: str = None,
route_name: str = "",
) -> None:
"""
Register an AWS Bedrock Runtime client
Expand Down Expand Up @@ -582,6 +582,9 @@ def register_bedrock(
self.bedrock_session = bedrock_session
self.bedrock_runtime_client = bedrock_runtime_client

if not route_name:
route_name = "amazon"

# Store the default bedrock route
if route_name is not None:
self.use_default_bedrock_route = True
Expand Down
5 changes: 5 additions & 0 deletions javelin_sdk/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,9 @@ class Template(BaseModel):
class Templates(BaseModel):
templates: List[Template] = Field(default=[], description="List of templates")

class SecretType(str, Enum):
AWS = "aws"
KUBERNETES = "kubernetes"

class Secret(BaseModel):
api_key: str = Field(default=None, description="Key of the Secret")
Expand All @@ -367,6 +370,8 @@ class Secret(BaseModel):
enabled: Optional[bool] = Field(
default=True, description="Whether the secret is enabled"
)
secret_name: str = Field(default=None, description="Secret Name of the Secret")
secrets_provider: SecretType = Field(default=SecretType.KUBERNETES, description="Type of the secret: aws or kubernetes")
Comment on lines +373 to +374
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The secrets_provider field defaults to SecretType.KUBERNETES. Ensure that this is the most common or appropriate default. If AWS is more common, consider making that the default, or provide a configuration option.


def masked(self):
"""
Expand Down
Loading