llumo 0.2.15b1__py3-none-any.whl → 0.2.15b2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
llumo/client.py CHANGED
@@ -10,7 +10,7 @@ import os
10
10
  import itertools
11
11
  import pandas as pd
12
12
  from typing import List, Dict
13
- from .models import AVAILABLEMODELS, getProviderFromModel
13
+ from .models import AVAILABLEMODELS, getProviderFromModel, Provider
14
14
  from .execution import ModelExecutor
15
15
  from .exceptions import LlumoAIError
16
16
  from .helpingFuntions import *
@@ -50,7 +50,7 @@ class LlumoClient:
50
50
  reqBody = {"analytics": [evalName]}
51
51
 
52
52
  try:
53
- print(reqBody)
53
+
54
54
  response = requests.post(url=validateUrl, json=reqBody, headers=headers)
55
55
 
56
56
  except requests.exceptions.RequestException as e:
@@ -1151,7 +1151,7 @@ class LlumoClient:
1151
1151
  # Validate API and dependencies
1152
1152
  self.validateApiKey(evalName=evalName)
1153
1153
  metricDependencies = checkDependency(
1154
- evalName, list(working_df.columns), tocheck=True
1154
+ evalName, list(working_df.columns), tocheck=False
1155
1155
  )
1156
1156
  if not metricDependencies["status"]:
1157
1157
  raise LlumoAIError.dependencyError(metricDependencies["message"])
@@ -1189,12 +1189,20 @@ class LlumoClient:
1189
1189
  inputDict = {key: row[key] for key in inputVariables}
1190
1190
  for i, model in enumerate(modelAliases, 1):
1191
1191
  try:
1192
+
1192
1193
  provider = getProviderFromModel(model)
1194
+ if provider == Provider.OPENAI:
1195
+ print(validateOpenaiKey(apiKey))
1196
+ elif provider == Provider.GOOGLE:
1197
+ validateGoogleKey(apiKey)
1198
+
1193
1199
  filled_template = getInputPopulatedPrompt(prompt_template, inputDict)
1194
1200
  response = executor.execute(provider, model.value, filled_template, apiKey)
1195
1201
  df.at[indx, f"output_{i}"] = response
1196
1202
  except Exception as e:
1197
- df.at[indx, f"output_{i}"] = str(e)
1203
+ # df.at[indx, f"output_{i}"] = str(e)
1204
+ raise e
1205
+
1198
1206
  return df
1199
1207
 
1200
1208
  def _evaluateForStream(self, df, evals, modelAliases, prompt_template):
llumo/execution.py CHANGED
@@ -25,15 +25,14 @@ class ModelExecutor:
25
25
  return response.choices[0].message.content
26
26
 
27
27
  def _executeGoogle(self, modelName: str, prompt: str,api_key) -> str:
28
-
28
+
29
29
  # Configure GenAI with API Key
30
30
  genai.configure(api_key=api_key)
31
-
31
+
32
32
  # Select Generative Model
33
33
  model = genai.GenerativeModel("gemini-2.0-flash-lite")
34
34
  # Generate Response
35
35
  response = model.generate_content(prompt)
36
36
  return response.text
37
-
38
-
39
-
37
+
38
+
llumo/helpingFuntions.py CHANGED
@@ -8,6 +8,8 @@ import json
8
8
  import base64
9
9
  import os
10
10
  import re
11
+ import openai
12
+ import google.generativeai as genai
11
13
 
12
14
 
13
15
  from .models import _MODEL_METADATA, AVAILABLEMODELS
@@ -378,12 +380,12 @@ def createColumn(workspaceID, dataframe, playgroundID, promptText=None,queryColN
378
380
  row_dict = {}
379
381
 
380
382
  # For each column, we need to map the column ID to the corresponding value in the row
381
- print(dataframe.columns)
383
+
382
384
  for col in dataframe.columns:
383
385
  columnID = columnIDMapping[col]
384
386
 
385
387
  if any(col.startswith(eval + "_") or col == eval for eval in allEvals) and not " Reason" in col and promptText!=None:
386
- print(col)
388
+
387
389
  row_dict[columnID] = {
388
390
 
389
391
  "value": row[col],
@@ -632,3 +634,20 @@ def validateModels(model_aliases):
632
634
 
633
635
 
634
636
 
637
+ def validateOpenaiKey(api_key):
638
+ try:
639
+ client = openai.OpenAI(api_key=api_key)
640
+ _ = client.models.list() # Light call to list models
641
+ except openai.AuthenticationError:
642
+ raise ValueError("❌ Invalid OpenAI API key.")
643
+ except Exception as e:
644
+ raise RuntimeError(f"⚠️ Error validating OpenAI key: {e}")
645
+
646
+ def validateGoogleKey(api_key):
647
+ try:
648
+ genai.configure(api_key=api_key)
649
+ _ = genai.GenerativeModel("gemini-2.0").generate_content("test")
650
+ except Exception as e:
651
+ if "PERMISSION_DENIED" in str(e) or "API key not valid" in str(e):
652
+ raise ValueError("❌ Invalid Google API key.")
653
+ raise RuntimeError(f"⚠️ Error validating Gemini key: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llumo
3
- Version: 0.2.15b1
3
+ Version: 0.2.15b2
4
4
  Summary: Python SDK for interacting with the Llumo ai API.
5
5
  Home-page: https://www.llumo.ai/
6
6
  Author: Llumo
@@ -0,0 +1,13 @@
1
+ llumo/__init__.py,sha256=O04b4yW1BnOvcHzxWFddAKhtdBEhBNhLdb6xgnpHH_Q,205
2
+ llumo/client.py,sha256=60RSxhk-9wzK9KgBz8dfbUd3-AaKiljxqbHI5UL8GIw,54021
3
+ llumo/exceptions.py,sha256=Vp_MnanHbnd1Yjuoi6WLrKiwwZbJL3znCox2URMmGU4,2032
4
+ llumo/execution.py,sha256=nWbJ7AvWuUPcOb6i-JzKRna_PvF-ewZTiK8skS-5n3w,1380
5
+ llumo/functionCalling.py,sha256=D5jYapu1rIvdIJNUYPYMTyhQ1H-6nkwoOLMi6eekfUE,7241
6
+ llumo/helpingFuntions.py,sha256=BZfUIgTO0PJchppHn0wDRF1wcYSuMST5ry95HBPN5SQ,23534
7
+ llumo/models.py,sha256=aVEZsOOoQx5LeNtwSyBxqvrINq0izH3QWu_YjsMPE6o,2910
8
+ llumo/sockets.py,sha256=I2JO_eNEctRo_ikgvFVp5zDd-m0VDu04IEUhhsa1Tic,5950
9
+ llumo-0.2.15b2.dist-info/licenses/LICENSE,sha256=tF9yAcfPV9xGT3ViWmC8hPvOo8BEk4ZICbUfcEo8Dlk,182
10
+ llumo-0.2.15b2.dist-info/METADATA,sha256=vbXwSwhuxnO0CSMz4uJ45AepuwVMl7irZlHmYkqRYbY,1521
11
+ llumo-0.2.15b2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
12
+ llumo-0.2.15b2.dist-info/top_level.txt,sha256=d5zUTMI99llPtLRB8rtSrqELm_bOqX-bNC5IcwlDk88,6
13
+ llumo-0.2.15b2.dist-info/RECORD,,
@@ -1,13 +0,0 @@
1
- llumo/__init__.py,sha256=O04b4yW1BnOvcHzxWFddAKhtdBEhBNhLdb6xgnpHH_Q,205
2
- llumo/client.py,sha256=XljwD5mZxjyrXHhu8YhN0cGsd-O_LyKbPzrhS8zbqZo,53778
3
- llumo/exceptions.py,sha256=Vp_MnanHbnd1Yjuoi6WLrKiwwZbJL3znCox2URMmGU4,2032
4
- llumo/execution.py,sha256=x88wQV8eL99wNN5YtjFaAMCIfN1PdfQVlAZQb4vzgQ0,1413
5
- llumo/functionCalling.py,sha256=D5jYapu1rIvdIJNUYPYMTyhQ1H-6nkwoOLMi6eekfUE,7241
6
- llumo/helpingFuntions.py,sha256=0-ZwG0fnbfP4DP1JTMewM8LdXzz_-p1gRqhPsX0Zmpk,22785
7
- llumo/models.py,sha256=aVEZsOOoQx5LeNtwSyBxqvrINq0izH3QWu_YjsMPE6o,2910
8
- llumo/sockets.py,sha256=I2JO_eNEctRo_ikgvFVp5zDd-m0VDu04IEUhhsa1Tic,5950
9
- llumo-0.2.15b1.dist-info/licenses/LICENSE,sha256=tF9yAcfPV9xGT3ViWmC8hPvOo8BEk4ZICbUfcEo8Dlk,182
10
- llumo-0.2.15b1.dist-info/METADATA,sha256=yDLkiD46Qq44PA3ylKK2dzsXZmnuE23yxH0RmoqizOk,1521
11
- llumo-0.2.15b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
12
- llumo-0.2.15b1.dist-info/top_level.txt,sha256=d5zUTMI99llPtLRB8rtSrqELm_bOqX-bNC5IcwlDk88,6
13
- llumo-0.2.15b1.dist-info/RECORD,,