airtrain 0.1.66__tar.gz → 0.1.68__tar.gz

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.
Files changed (114) hide show
  1. {airtrain-0.1.66 → airtrain-0.1.68}/PKG-INFO +1 -1
  2. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/__init__.py +1 -1
  3. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/openai/skills.py +84 -20
  4. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain.egg-info/PKG-INFO +1 -1
  5. {airtrain-0.1.66 → airtrain-0.1.68}/pyproject.toml +1 -1
  6. {airtrain-0.1.66 → airtrain-0.1.68}/MANIFEST.in +0 -0
  7. {airtrain-0.1.66 → airtrain-0.1.68}/README.md +0 -0
  8. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/__main__.py +0 -0
  9. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/agents/__init__.py +0 -0
  10. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/agents/example_agent.py +0 -0
  11. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/agents/groq_agent.py +0 -0
  12. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/agents/memory.py +0 -0
  13. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/agents/registry.py +0 -0
  14. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/builder/__init__.py +0 -0
  15. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/builder/agent_builder.py +0 -0
  16. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/cli/__init__.py +0 -0
  17. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/cli/builder.py +0 -0
  18. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/cli/main.py +0 -0
  19. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/contrib/__init__.py +0 -0
  20. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/contrib/travel/__init__.py +0 -0
  21. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/contrib/travel/agents.py +0 -0
  22. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/contrib/travel/models.py +0 -0
  23. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/core/__init__.py +0 -0
  24. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/core/credentials.py +0 -0
  25. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/core/schemas.py +0 -0
  26. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/core/skills.py +0 -0
  27. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/__init__.py +0 -0
  28. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/anthropic/__init__.py +0 -0
  29. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/anthropic/credentials.py +0 -0
  30. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/anthropic/list_models.py +0 -0
  31. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/anthropic/models_config.py +0 -0
  32. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/anthropic/skills.py +0 -0
  33. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/aws/__init__.py +0 -0
  34. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/aws/credentials.py +0 -0
  35. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/aws/skills.py +0 -0
  36. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/cerebras/__init__.py +0 -0
  37. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/cerebras/credentials.py +0 -0
  38. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/cerebras/skills.py +0 -0
  39. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/combined/__init__.py +0 -0
  40. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/combined/groq_fireworks_skills.py +0 -0
  41. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/combined/list_models_factory.py +0 -0
  42. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/__init__.py +0 -0
  43. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/completion_skills.py +0 -0
  44. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/conversation_manager.py +0 -0
  45. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/credentials.py +0 -0
  46. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/list_models.py +0 -0
  47. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/models.py +0 -0
  48. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/requests_skills.py +0 -0
  49. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/skills.py +0 -0
  50. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/structured_completion_skills.py +0 -0
  51. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/structured_requests_skills.py +0 -0
  52. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/fireworks/structured_skills.py +0 -0
  53. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/google/__init__.py +0 -0
  54. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/google/credentials.py +0 -0
  55. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/google/skills.py +0 -0
  56. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/groq/__init__.py +0 -0
  57. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/groq/credentials.py +0 -0
  58. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/groq/models_config.py +0 -0
  59. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/groq/skills.py +0 -0
  60. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/ollama/__init__.py +0 -0
  61. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/ollama/credentials.py +0 -0
  62. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/ollama/skills.py +0 -0
  63. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/openai/__init__.py +0 -0
  64. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/openai/chinese_assistant.py +0 -0
  65. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/openai/credentials.py +0 -0
  66. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/openai/list_models.py +0 -0
  67. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/openai/models_config.py +0 -0
  68. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/perplexity/__init__.py +0 -0
  69. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/perplexity/credentials.py +0 -0
  70. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/perplexity/list_models.py +0 -0
  71. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/perplexity/models_config.py +0 -0
  72. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/perplexity/skills.py +0 -0
  73. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/sambanova/__init__.py +0 -0
  74. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/sambanova/credentials.py +0 -0
  75. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/sambanova/skills.py +0 -0
  76. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/search/__init__.py +0 -0
  77. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/search/exa/__init__.py +0 -0
  78. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/search/exa/credentials.py +0 -0
  79. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/search/exa/schemas.py +0 -0
  80. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/search/exa/skills.py +0 -0
  81. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/__init__.py +0 -0
  82. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/audio_models_config.py +0 -0
  83. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/credentials.py +0 -0
  84. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/embedding_models_config.py +0 -0
  85. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/image_models_config.py +0 -0
  86. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/image_skill.py +0 -0
  87. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/list_models.py +0 -0
  88. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/models.py +0 -0
  89. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/models_config.py +0 -0
  90. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/rerank_models_config.py +0 -0
  91. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/rerank_skill.py +0 -0
  92. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/schemas.py +0 -0
  93. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/skills.py +0 -0
  94. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/integrations/together/vision_models_config.py +0 -0
  95. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/telemetry/__init__.py +0 -0
  96. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/telemetry/service.py +0 -0
  97. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/telemetry/views.py +0 -0
  98. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/tools/__init__.py +0 -0
  99. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/tools/command.py +0 -0
  100. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/tools/filesystem.py +0 -0
  101. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/tools/network.py +0 -0
  102. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/tools/registry.py +0 -0
  103. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/tools/search.py +0 -0
  104. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/tools/testing.py +0 -0
  105. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain/tools/weather.py +0 -0
  106. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain.egg-info/SOURCES.txt +0 -0
  107. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain.egg-info/dependency_links.txt +0 -0
  108. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain.egg-info/entry_points.txt +0 -0
  109. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain.egg-info/requires.txt +0 -0
  110. {airtrain-0.1.66 → airtrain-0.1.68}/airtrain.egg-info/top_level.txt +0 -0
  111. {airtrain-0.1.66 → airtrain-0.1.68}/changelog.md +0 -0
  112. {airtrain-0.1.66 → airtrain-0.1.68}/requirements.txt +0 -0
  113. {airtrain-0.1.66 → airtrain-0.1.68}/setup.cfg +0 -0
  114. {airtrain-0.1.66 → airtrain-0.1.68}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: airtrain
3
- Version: 0.1.66
3
+ Version: 0.1.68
4
4
  Summary: A platform for building and deploying AI agents with structured skills
5
5
  Home-page: https://github.com/rosaboyle/airtrain.dev
6
6
  Author: Dheeraj Pai
@@ -5,7 +5,7 @@ This library provides a flexible framework for building AI agents
5
5
  that can complete complex tasks using AI models, skills, and tools.
6
6
  """
7
7
 
8
- __version__ = "0.1.66"
8
+ __version__ = "0.1.68"
9
9
 
10
10
  import sys
11
11
 
@@ -16,11 +16,13 @@ import numpy as np
16
16
  import json
17
17
  from loguru import logger
18
18
 
19
- from airtrain.core.skills import Skill, ProcessingError
19
+ from airtrain.core.skills import (
20
+ Skill,
21
+ ProcessingError,
22
+ InputValidationError as ValidationError,
23
+ )
20
24
  from airtrain.core.schemas import InputSchema, OutputSchema
21
25
  from .credentials import OpenAICredentials
22
- from ...core.credentials import get_credentials
23
- from ...core.errors import ValidationError
24
26
 
25
27
 
26
28
  class OpenAIInput(InputSchema):
@@ -106,13 +108,23 @@ class OpenAIChatSkill(Skill[OpenAIInput, OpenAIOutput]):
106
108
  self.validate_input(input_data)
107
109
  messages = self._build_messages(input_data)
108
110
 
109
- stream = self.client.chat.completions.create(
110
- model=input_data.model,
111
- messages=messages,
112
- temperature=input_data.temperature,
113
- max_tokens=input_data.max_tokens,
114
- stream=True,
115
- )
111
+ # Create the completion parameters for streaming
112
+ completion_params = {
113
+ "model": input_data.model,
114
+ "messages": messages,
115
+ "temperature": input_data.temperature,
116
+ "max_tokens": input_data.max_tokens,
117
+ "stream": True,
118
+ }
119
+
120
+ # Add tools if provided
121
+ if input_data.tools and len(input_data.tools) > 0:
122
+ logger.info(
123
+ f"Using {len(input_data.tools)} tools with OpenAI streaming"
124
+ )
125
+ completion_params["tools"] = input_data.tools
126
+
127
+ stream = self.client.chat.completions.create(**completion_params)
116
128
 
117
129
  for chunk in stream:
118
130
  if chunk.choices[0].delta.content is not None:
@@ -205,22 +217,56 @@ class OpenAIChatSkill(Skill[OpenAIInput, OpenAIOutput]):
205
217
  try:
206
218
  self.validate_input(input_data)
207
219
  messages = self._build_messages(input_data)
220
+
221
+ # Create the completion parameters
222
+ completion_params = {
223
+ "model": input_data.model,
224
+ "messages": messages,
225
+ "temperature": input_data.temperature,
226
+ "max_tokens": input_data.max_tokens,
227
+ "stream": False,
228
+ }
229
+
230
+ # Add tools if provided
231
+ if input_data.tools and len(input_data.tools) > 0:
232
+ logger.info(f"Using {len(input_data.tools)} tools with OpenAI async")
233
+ completion_params["tools"] = input_data.tools
234
+
208
235
  completion = await self.async_client.chat.completions.create(
209
- model=input_data.model,
210
- messages=messages,
211
- temperature=input_data.temperature,
212
- max_tokens=input_data.max_tokens,
236
+ **completion_params
213
237
  )
238
+
239
+ # Extract tool calls if present
240
+ tool_calls = None
241
+ if (
242
+ hasattr(completion.choices[0].message, "tool_calls")
243
+ and completion.choices[0].message.tool_calls
244
+ ):
245
+ tool_calls = []
246
+ for tool_call in completion.choices[0].message.tool_calls:
247
+ formatted_tool_call = {
248
+ "id": tool_call.id,
249
+ "name": tool_call.function.name,
250
+ "arguments": tool_call.function.arguments,
251
+ }
252
+ tool_calls.append(formatted_tool_call)
253
+ logger.info(
254
+ f"Extracted {len(tool_calls)} tool calls from OpenAI async response"
255
+ )
256
+
214
257
  return OpenAIOutput(
215
- response=completion.choices[0].message.content,
258
+ response=completion.choices[0].message.content or "",
216
259
  used_model=completion.model,
217
260
  usage={
218
261
  "total_tokens": completion.usage.total_tokens,
219
262
  "prompt_tokens": completion.usage.prompt_tokens,
220
263
  "completion_tokens": completion.usage.completion_tokens,
221
264
  },
265
+ raw_response=completion,
266
+ tool_calls=tool_calls,
222
267
  )
223
268
  except Exception as e:
269
+ logger.error(f"OpenAI async chat failed: {str(e)}")
224
270
  raise ProcessingError(f"OpenAI async chat failed: {str(e)}")
225
271
 
226
272
  async def process_stream_async(
@@ -230,17 +276,32 @@ class OpenAIChatSkill(Skill[OpenAIInput, OpenAIOutput]):
230
276
  try:
231
277
  self.validate_input(input_data)
232
278
  messages = self._build_messages(input_data)
279
+
280
+ # Create the completion parameters for streaming
281
+ completion_params = {
282
+ "model": input_data.model,
283
+ "messages": messages,
284
+ "temperature": input_data.temperature,
285
+ "max_tokens": input_data.max_tokens,
286
+ "stream": True,
287
+ }
288
+
289
+ # Add tools if provided
290
+ if input_data.tools and len(input_data.tools) > 0:
291
+ logger.info(
292
+ f"Using {len(input_data.tools)} tools with OpenAI async streaming"
293
+ )
294
+ completion_params["tools"] = input_data.tools
295
+
233
296
  stream = await self.async_client.chat.completions.create(
234
- model=input_data.model,
235
- messages=messages,
236
- temperature=input_data.temperature,
237
- max_tokens=input_data.max_tokens,
238
- stream=True,
297
+ **completion_params
239
298
  )
299
+
240
300
  async for chunk in stream:
241
301
  if chunk.choices[0].delta.content is not None:
242
302
  yield chunk.choices[0].delta.content
243
303
  except Exception as e:
304
+ logger.error(f"OpenAI async streaming failed: {str(e)}")
244
305
  raise ProcessingError(f"OpenAI async streaming failed: {str(e)}")
245
306
 
246
307
 
@@ -306,6 +367,7 @@ class OpenAIParserSkill(Skill[OpenAIParserInput, OpenAIParserOutput]):
306
367
  )
307
368
 
308
369
  except Exception as e:
370
+ logger.error(f"OpenAI parsing failed: {str(e)}")
309
371
  raise ProcessingError(f"OpenAI parsing failed: {str(e)}")
310
372
 
311
373
 
@@ -380,6 +442,7 @@ class OpenAIEmbeddingsSkill(Skill[OpenAIEmbeddingsInput, OpenAIEmbeddingsOutput]
380
442
  tokens_used=response.usage.total_tokens,
381
443
  )
382
444
  except Exception as e:
445
+ logger.error(f"OpenAI embeddings generation failed: {str(e)}")
383
446
  raise ProcessingError(f"OpenAI embeddings generation failed: {str(e)}")
384
447
 
385
448
  async def process_async(
@@ -411,6 +474,7 @@ class OpenAIEmbeddingsSkill(Skill[OpenAIEmbeddingsInput, OpenAIEmbeddingsOutput]
411
474
  tokens_used=response.usage.total_tokens,
412
475
  )
413
476
  except Exception as e:
477
+ logger.error(f"OpenAI async embeddings generation failed: {str(e)}")
414
478
  raise ProcessingError(
415
479
  f"OpenAI async embeddings generation failed: {str(e)}"
416
480
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: airtrain
3
- Version: 0.1.66
3
+ Version: 0.1.68
4
4
  Summary: A platform for building and deploying AI agents with structured skills
5
5
  Home-page: https://github.com/rosaboyle/airtrain.dev
6
6
  Author: Dheeraj Pai
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "airtrain"
7
- version = "0.1.66"
7
+ version = "0.1.68"
8
8
  description = "A platform for building and deploying AI agents with structured skills"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes