@framers/agentos 0.1.0

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 (601) hide show
  1. package/LICENSE +98 -0
  2. package/README.md +576 -0
  3. package/dist/api/AgentOS.d.ts +451 -0
  4. package/dist/api/AgentOS.d.ts.map +1 -0
  5. package/dist/api/AgentOS.js +1157 -0
  6. package/dist/api/AgentOS.js.map +1 -0
  7. package/dist/api/AgentOSOrchestrator.d.ts +157 -0
  8. package/dist/api/AgentOSOrchestrator.d.ts.map +1 -0
  9. package/dist/api/AgentOSOrchestrator.js +679 -0
  10. package/dist/api/AgentOSOrchestrator.js.map +1 -0
  11. package/dist/api/interfaces/IAgentOS.d.ts +138 -0
  12. package/dist/api/interfaces/IAgentOS.d.ts.map +1 -0
  13. package/dist/api/interfaces/IAgentOS.js +11 -0
  14. package/dist/api/interfaces/IAgentOS.js.map +1 -0
  15. package/dist/api/interfaces/IUnifiedAgent.d.ts +126 -0
  16. package/dist/api/interfaces/IUnifiedAgent.d.ts.map +1 -0
  17. package/dist/api/interfaces/IUnifiedAgent.js +3 -0
  18. package/dist/api/interfaces/IUnifiedAgent.js.map +1 -0
  19. package/dist/api/types/AgentOSInput.d.ts +114 -0
  20. package/dist/api/types/AgentOSInput.d.ts.map +1 -0
  21. package/dist/api/types/AgentOSInput.js +13 -0
  22. package/dist/api/types/AgentOSInput.js.map +1 -0
  23. package/dist/api/types/AgentOSResponse.d.ts +170 -0
  24. package/dist/api/types/AgentOSResponse.d.ts.map +1 -0
  25. package/dist/api/types/AgentOSResponse.js +25 -0
  26. package/dist/api/types/AgentOSResponse.js.map +1 -0
  27. package/dist/cognitive_substrate/GMI.d.ts +148 -0
  28. package/dist/cognitive_substrate/GMI.d.ts.map +1 -0
  29. package/dist/cognitive_substrate/GMI.js +1003 -0
  30. package/dist/cognitive_substrate/GMI.js.map +1 -0
  31. package/dist/cognitive_substrate/GMIManager.d.ts +98 -0
  32. package/dist/cognitive_substrate/GMIManager.d.ts.map +1 -0
  33. package/dist/cognitive_substrate/GMIManager.js +517 -0
  34. package/dist/cognitive_substrate/GMIManager.js.map +1 -0
  35. package/dist/cognitive_substrate/IGMI.d.ts +469 -0
  36. package/dist/cognitive_substrate/IGMI.d.ts.map +1 -0
  37. package/dist/cognitive_substrate/IGMI.js +111 -0
  38. package/dist/cognitive_substrate/IGMI.js.map +1 -0
  39. package/dist/cognitive_substrate/memory/IWorkingMemory.d.ts +139 -0
  40. package/dist/cognitive_substrate/memory/IWorkingMemory.d.ts.map +1 -0
  41. package/dist/cognitive_substrate/memory/IWorkingMemory.js +14 -0
  42. package/dist/cognitive_substrate/memory/IWorkingMemory.js.map +1 -0
  43. package/dist/cognitive_substrate/memory/InMemoryWorkingMemory.d.ts +143 -0
  44. package/dist/cognitive_substrate/memory/InMemoryWorkingMemory.d.ts.map +1 -0
  45. package/dist/cognitive_substrate/memory/InMemoryWorkingMemory.js +186 -0
  46. package/dist/cognitive_substrate/memory/InMemoryWorkingMemory.js.map +1 -0
  47. package/dist/cognitive_substrate/persona_overlays/PersonaOverlayManager.d.ts +33 -0
  48. package/dist/cognitive_substrate/persona_overlays/PersonaOverlayManager.d.ts.map +1 -0
  49. package/dist/cognitive_substrate/persona_overlays/PersonaOverlayManager.js +138 -0
  50. package/dist/cognitive_substrate/persona_overlays/PersonaOverlayManager.js.map +1 -0
  51. package/dist/cognitive_substrate/persona_overlays/PersonaOverlayTypes.d.ts +32 -0
  52. package/dist/cognitive_substrate/persona_overlays/PersonaOverlayTypes.d.ts.map +1 -0
  53. package/dist/cognitive_substrate/persona_overlays/PersonaOverlayTypes.js +2 -0
  54. package/dist/cognitive_substrate/persona_overlays/PersonaOverlayTypes.js.map +1 -0
  55. package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts +336 -0
  56. package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts.map +1 -0
  57. package/dist/cognitive_substrate/personas/IPersonaDefinition.js +8 -0
  58. package/dist/cognitive_substrate/personas/IPersonaDefinition.js.map +1 -0
  59. package/dist/cognitive_substrate/personas/IPersonaLoader.d.ts +78 -0
  60. package/dist/cognitive_substrate/personas/IPersonaLoader.d.ts.map +1 -0
  61. package/dist/cognitive_substrate/personas/IPersonaLoader.js +9 -0
  62. package/dist/cognitive_substrate/personas/IPersonaLoader.js.map +1 -0
  63. package/dist/cognitive_substrate/personas/PersonaLoader.d.ts +60 -0
  64. package/dist/cognitive_substrate/personas/PersonaLoader.d.ts.map +1 -0
  65. package/dist/cognitive_substrate/personas/PersonaLoader.js +138 -0
  66. package/dist/cognitive_substrate/personas/PersonaLoader.js.map +1 -0
  67. package/dist/cognitive_substrate/personas/PersonaValidation.d.ts +139 -0
  68. package/dist/cognitive_substrate/personas/PersonaValidation.d.ts.map +1 -0
  69. package/dist/cognitive_substrate/personas/PersonaValidation.js +277 -0
  70. package/dist/cognitive_substrate/personas/PersonaValidation.js.map +1 -0
  71. package/dist/cognitive_substrate/personas/definitions/atlas_systems_architect.json +29 -0
  72. package/dist/cognitive_substrate/personas/definitions/default_assistant_persona.json +346 -0
  73. package/dist/cognitive_substrate/personas/definitions/default_free_assistant.json +13 -0
  74. package/dist/cognitive_substrate/personas/definitions/index.d.ts +14 -0
  75. package/dist/cognitive_substrate/personas/definitions/index.d.ts.map +1 -0
  76. package/dist/cognitive_substrate/personas/definitions/index.js +35 -0
  77. package/dist/cognitive_substrate/personas/definitions/index.js.map +1 -0
  78. package/dist/cognitive_substrate/personas/definitions/nerf_generalist.json +11 -0
  79. package/dist/cognitive_substrate/personas/definitions/v_researcher.json +11 -0
  80. package/dist/config/AgentOSConfig.d.ts +74 -0
  81. package/dist/config/AgentOSConfig.d.ts.map +1 -0
  82. package/dist/config/AgentOSConfig.js +399 -0
  83. package/dist/config/AgentOSConfig.js.map +1 -0
  84. package/dist/config/EmbeddingManagerConfiguration.d.ts +190 -0
  85. package/dist/config/EmbeddingManagerConfiguration.d.ts.map +1 -0
  86. package/dist/config/EmbeddingManagerConfiguration.js +16 -0
  87. package/dist/config/EmbeddingManagerConfiguration.js.map +1 -0
  88. package/dist/config/MemoryLifecycleManagerConfiguration.d.ts +165 -0
  89. package/dist/config/MemoryLifecycleManagerConfiguration.d.ts.map +1 -0
  90. package/dist/config/MemoryLifecycleManagerConfiguration.js +69 -0
  91. package/dist/config/MemoryLifecycleManagerConfiguration.js.map +1 -0
  92. package/dist/config/RetrievalAugmentorConfiguration.d.ts +98 -0
  93. package/dist/config/RetrievalAugmentorConfiguration.d.ts.map +1 -0
  94. package/dist/config/RetrievalAugmentorConfiguration.js +47 -0
  95. package/dist/config/RetrievalAugmentorConfiguration.js.map +1 -0
  96. package/dist/config/ToolOrchestratorConfig.d.ts +69 -0
  97. package/dist/config/ToolOrchestratorConfig.d.ts.map +1 -0
  98. package/dist/config/ToolOrchestratorConfig.js +11 -0
  99. package/dist/config/ToolOrchestratorConfig.js.map +1 -0
  100. package/dist/config/VectorStoreConfiguration.d.ts +223 -0
  101. package/dist/config/VectorStoreConfiguration.d.ts.map +1 -0
  102. package/dist/config/VectorStoreConfiguration.js +59 -0
  103. package/dist/config/VectorStoreConfiguration.js.map +1 -0
  104. package/dist/config/extension-secrets.json +38 -0
  105. package/dist/config/extensionSecrets.d.ts +13 -0
  106. package/dist/config/extensionSecrets.d.ts.map +1 -0
  107. package/dist/config/extensionSecrets.js +24 -0
  108. package/dist/config/extensionSecrets.js.map +1 -0
  109. package/dist/core/agency/AgencyMemoryManager.d.ts +300 -0
  110. package/dist/core/agency/AgencyMemoryManager.d.ts.map +1 -0
  111. package/dist/core/agency/AgencyMemoryManager.js +657 -0
  112. package/dist/core/agency/AgencyMemoryManager.js.map +1 -0
  113. package/dist/core/agency/AgencyRegistry.d.ts +100 -0
  114. package/dist/core/agency/AgencyRegistry.d.ts.map +1 -0
  115. package/dist/core/agency/AgencyRegistry.js +209 -0
  116. package/dist/core/agency/AgencyRegistry.js.map +1 -0
  117. package/dist/core/agency/AgencyTypes.d.ts +200 -0
  118. package/dist/core/agency/AgencyTypes.d.ts.map +1 -0
  119. package/dist/core/agency/AgencyTypes.js +7 -0
  120. package/dist/core/agency/AgencyTypes.js.map +1 -0
  121. package/dist/core/agency/AgentCommunicationBus.d.ts +150 -0
  122. package/dist/core/agency/AgentCommunicationBus.d.ts.map +1 -0
  123. package/dist/core/agency/AgentCommunicationBus.js +568 -0
  124. package/dist/core/agency/AgentCommunicationBus.js.map +1 -0
  125. package/dist/core/agency/IAgentCommunicationBus.d.ts +469 -0
  126. package/dist/core/agency/IAgentCommunicationBus.d.ts.map +1 -0
  127. package/dist/core/agency/IAgentCommunicationBus.js +40 -0
  128. package/dist/core/agency/IAgentCommunicationBus.js.map +1 -0
  129. package/dist/core/agency/index.d.ts +18 -0
  130. package/dist/core/agency/index.d.ts.map +1 -0
  131. package/dist/core/agency/index.js +18 -0
  132. package/dist/core/agency/index.js.map +1 -0
  133. package/dist/core/agents/AgentCore.d.ts +385 -0
  134. package/dist/core/agents/AgentCore.d.ts.map +1 -0
  135. package/dist/core/agents/AgentCore.js +527 -0
  136. package/dist/core/agents/AgentCore.js.map +1 -0
  137. package/dist/core/agents/AgentFactory.d.ts +123 -0
  138. package/dist/core/agents/AgentFactory.d.ts.map +1 -0
  139. package/dist/core/agents/AgentFactory.js +232 -0
  140. package/dist/core/agents/AgentFactory.js.map +1 -0
  141. package/dist/core/agents/AgentPoolAgent.d.ts +244 -0
  142. package/dist/core/agents/AgentPoolAgent.d.ts.map +1 -0
  143. package/dist/core/agents/AgentPoolAgent.js +697 -0
  144. package/dist/core/agents/AgentPoolAgent.js.map +1 -0
  145. package/dist/core/agents/AgentPoolConfig.d.ts +191 -0
  146. package/dist/core/agents/AgentPoolConfig.d.ts.map +1 -0
  147. package/dist/core/agents/AgentPoolConfig.js +58 -0
  148. package/dist/core/agents/AgentPoolConfig.js.map +1 -0
  149. package/dist/core/agents/IAgent.d.ts +226 -0
  150. package/dist/core/agents/IAgent.d.ts.map +1 -0
  151. package/dist/core/agents/IAgent.js +14 -0
  152. package/dist/core/agents/IAgent.js.map +1 -0
  153. package/dist/core/agents/IAgentFactory.d.ts +137 -0
  154. package/dist/core/agents/IAgentFactory.d.ts.map +1 -0
  155. package/dist/core/agents/IAgentFactory.js +13 -0
  156. package/dist/core/agents/IAgentFactory.js.map +1 -0
  157. package/dist/core/agents/tools/Tool.d.ts +17 -0
  158. package/dist/core/agents/tools/Tool.d.ts.map +1 -0
  159. package/dist/core/agents/tools/Tool.js +8 -0
  160. package/dist/core/agents/tools/Tool.js.map +1 -0
  161. package/dist/core/ai_utilities/HybridUtilityAI.d.ts +1 -0
  162. package/dist/core/ai_utilities/HybridUtilityAI.d.ts.map +1 -0
  163. package/dist/core/ai_utilities/HybridUtilityAI.js +2 -0
  164. package/dist/core/ai_utilities/HybridUtilityAI.js.map +1 -0
  165. package/dist/core/ai_utilities/IUtilityAI.d.ts +212 -0
  166. package/dist/core/ai_utilities/IUtilityAI.d.ts.map +1 -0
  167. package/dist/core/ai_utilities/IUtilityAI.js +11 -0
  168. package/dist/core/ai_utilities/IUtilityAI.js.map +1 -0
  169. package/dist/core/ai_utilities/LLMUtilityAI.d.ts +94 -0
  170. package/dist/core/ai_utilities/LLMUtilityAI.d.ts.map +1 -0
  171. package/dist/core/ai_utilities/LLMUtilityAI.js +434 -0
  172. package/dist/core/ai_utilities/LLMUtilityAI.js.map +1 -0
  173. package/dist/core/ai_utilities/StatisticalUtilityAI.d.ts +102 -0
  174. package/dist/core/ai_utilities/StatisticalUtilityAI.d.ts.map +1 -0
  175. package/dist/core/ai_utilities/StatisticalUtilityAI.js +617 -0
  176. package/dist/core/ai_utilities/StatisticalUtilityAI.js.map +1 -0
  177. package/dist/core/conversation/ConversationContext.d.ts +259 -0
  178. package/dist/core/conversation/ConversationContext.d.ts.map +1 -0
  179. package/dist/core/conversation/ConversationContext.js +450 -0
  180. package/dist/core/conversation/ConversationContext.js.map +1 -0
  181. package/dist/core/conversation/ConversationManager.d.ts +223 -0
  182. package/dist/core/conversation/ConversationManager.d.ts.map +1 -0
  183. package/dist/core/conversation/ConversationManager.js +558 -0
  184. package/dist/core/conversation/ConversationManager.js.map +1 -0
  185. package/dist/core/conversation/ConversationMessage.d.ts +184 -0
  186. package/dist/core/conversation/ConversationMessage.d.ts.map +1 -0
  187. package/dist/core/conversation/ConversationMessage.js +66 -0
  188. package/dist/core/conversation/ConversationMessage.js.map +1 -0
  189. package/dist/core/evaluation/Evaluator.d.ts +28 -0
  190. package/dist/core/evaluation/Evaluator.d.ts.map +1 -0
  191. package/dist/core/evaluation/Evaluator.js +490 -0
  192. package/dist/core/evaluation/Evaluator.js.map +1 -0
  193. package/dist/core/evaluation/IEvaluator.d.ts +309 -0
  194. package/dist/core/evaluation/IEvaluator.d.ts.map +1 -0
  195. package/dist/core/evaluation/IEvaluator.js +12 -0
  196. package/dist/core/evaluation/IEvaluator.js.map +1 -0
  197. package/dist/core/evaluation/LLMJudge.d.ts +105 -0
  198. package/dist/core/evaluation/LLMJudge.d.ts.map +1 -0
  199. package/dist/core/evaluation/LLMJudge.js +229 -0
  200. package/dist/core/evaluation/LLMJudge.js.map +1 -0
  201. package/dist/core/evaluation/index.d.ts +9 -0
  202. package/dist/core/evaluation/index.d.ts.map +1 -0
  203. package/dist/core/evaluation/index.js +9 -0
  204. package/dist/core/evaluation/index.js.map +1 -0
  205. package/dist/core/guardrails/IGuardrailService.d.ts +142 -0
  206. package/dist/core/guardrails/IGuardrailService.d.ts.map +1 -0
  207. package/dist/core/guardrails/IGuardrailService.js +24 -0
  208. package/dist/core/guardrails/IGuardrailService.js.map +1 -0
  209. package/dist/core/guardrails/guardrailDispatcher.d.ts +36 -0
  210. package/dist/core/guardrails/guardrailDispatcher.d.ts.map +1 -0
  211. package/dist/core/guardrails/guardrailDispatcher.js +240 -0
  212. package/dist/core/guardrails/guardrailDispatcher.js.map +1 -0
  213. package/dist/core/hitl/HumanInteractionManager.d.ts +146 -0
  214. package/dist/core/hitl/HumanInteractionManager.d.ts.map +1 -0
  215. package/dist/core/hitl/HumanInteractionManager.js +491 -0
  216. package/dist/core/hitl/HumanInteractionManager.js.map +1 -0
  217. package/dist/core/hitl/IHumanInteractionManager.d.ts +521 -0
  218. package/dist/core/hitl/IHumanInteractionManager.d.ts.map +1 -0
  219. package/dist/core/hitl/IHumanInteractionManager.js +33 -0
  220. package/dist/core/hitl/IHumanInteractionManager.js.map +1 -0
  221. package/dist/core/hitl/index.d.ts +17 -0
  222. package/dist/core/hitl/index.d.ts.map +1 -0
  223. package/dist/core/hitl/index.js +17 -0
  224. package/dist/core/hitl/index.js.map +1 -0
  225. package/dist/core/knowledge/IKnowledgeGraph.d.ts +351 -0
  226. package/dist/core/knowledge/IKnowledgeGraph.d.ts.map +1 -0
  227. package/dist/core/knowledge/IKnowledgeGraph.js +10 -0
  228. package/dist/core/knowledge/IKnowledgeGraph.js.map +1 -0
  229. package/dist/core/knowledge/KnowledgeGraph.d.ts +93 -0
  230. package/dist/core/knowledge/KnowledgeGraph.d.ts.map +1 -0
  231. package/dist/core/knowledge/KnowledgeGraph.js +601 -0
  232. package/dist/core/knowledge/KnowledgeGraph.js.map +1 -0
  233. package/dist/core/knowledge/index.d.ts +8 -0
  234. package/dist/core/knowledge/index.d.ts.map +1 -0
  235. package/dist/core/knowledge/index.js +8 -0
  236. package/dist/core/knowledge/index.js.map +1 -0
  237. package/dist/core/language/LanguageService.d.ts +77 -0
  238. package/dist/core/language/LanguageService.d.ts.map +1 -0
  239. package/dist/core/language/LanguageService.js +305 -0
  240. package/dist/core/language/LanguageService.js.map +1 -0
  241. package/dist/core/language/index.d.ts +6 -0
  242. package/dist/core/language/index.d.ts.map +1 -0
  243. package/dist/core/language/index.js +6 -0
  244. package/dist/core/language/index.js.map +1 -0
  245. package/dist/core/language/interfaces.d.ts +168 -0
  246. package/dist/core/language/interfaces.d.ts.map +1 -0
  247. package/dist/core/language/interfaces.js +37 -0
  248. package/dist/core/language/interfaces.js.map +1 -0
  249. package/dist/core/language/providers/DeepLTranslationProvider.d.ts +16 -0
  250. package/dist/core/language/providers/DeepLTranslationProvider.d.ts.map +1 -0
  251. package/dist/core/language/providers/DeepLTranslationProvider.js +28 -0
  252. package/dist/core/language/providers/DeepLTranslationProvider.js.map +1 -0
  253. package/dist/core/language/providers/OpenAITranslationProvider.d.ts +17 -0
  254. package/dist/core/language/providers/OpenAITranslationProvider.d.ts.map +1 -0
  255. package/dist/core/language/providers/OpenAITranslationProvider.js +34 -0
  256. package/dist/core/language/providers/OpenAITranslationProvider.js.map +1 -0
  257. package/dist/core/language/providers/WhisperDetectionProvider.d.ts +16 -0
  258. package/dist/core/language/providers/WhisperDetectionProvider.d.ts.map +1 -0
  259. package/dist/core/language/providers/WhisperDetectionProvider.js +15 -0
  260. package/dist/core/language/providers/WhisperDetectionProvider.js.map +1 -0
  261. package/dist/core/llm/IPromptEngine.d.ts +627 -0
  262. package/dist/core/llm/IPromptEngine.d.ts.map +1 -0
  263. package/dist/core/llm/IPromptEngine.js +81 -0
  264. package/dist/core/llm/IPromptEngine.js.map +1 -0
  265. package/dist/core/llm/PromptEngine.d.ts +108 -0
  266. package/dist/core/llm/PromptEngine.d.ts.map +1 -0
  267. package/dist/core/llm/PromptEngine.js +872 -0
  268. package/dist/core/llm/PromptEngine.js.map +1 -0
  269. package/dist/core/llm/providers/AIModelProviderManager.d.ts +74 -0
  270. package/dist/core/llm/providers/AIModelProviderManager.d.ts.map +1 -0
  271. package/dist/core/llm/providers/AIModelProviderManager.js +263 -0
  272. package/dist/core/llm/providers/AIModelProviderManager.js.map +1 -0
  273. package/dist/core/llm/providers/IProvider.d.ts +327 -0
  274. package/dist/core/llm/providers/IProvider.d.ts.map +1 -0
  275. package/dist/core/llm/providers/IProvider.js +39 -0
  276. package/dist/core/llm/providers/IProvider.js.map +1 -0
  277. package/dist/core/llm/providers/errors/OllamaProviderError.d.ts +36 -0
  278. package/dist/core/llm/providers/errors/OllamaProviderError.d.ts.map +1 -0
  279. package/dist/core/llm/providers/errors/OllamaProviderError.js +40 -0
  280. package/dist/core/llm/providers/errors/OllamaProviderError.js.map +1 -0
  281. package/dist/core/llm/providers/errors/OpenAIProviderError.d.ts +42 -0
  282. package/dist/core/llm/providers/errors/OpenAIProviderError.d.ts.map +1 -0
  283. package/dist/core/llm/providers/errors/OpenAIProviderError.js +44 -0
  284. package/dist/core/llm/providers/errors/OpenAIProviderError.js.map +1 -0
  285. package/dist/core/llm/providers/errors/OpenRouterProviderError.d.ts +39 -0
  286. package/dist/core/llm/providers/errors/OpenRouterProviderError.d.ts.map +1 -0
  287. package/dist/core/llm/providers/errors/OpenRouterProviderError.js +42 -0
  288. package/dist/core/llm/providers/errors/OpenRouterProviderError.js.map +1 -0
  289. package/dist/core/llm/providers/errors/ProviderError.d.ts +37 -0
  290. package/dist/core/llm/providers/errors/ProviderError.d.ts.map +1 -0
  291. package/dist/core/llm/providers/errors/ProviderError.js +36 -0
  292. package/dist/core/llm/providers/errors/ProviderError.js.map +1 -0
  293. package/dist/core/llm/providers/implementations/OllamaProvider.d.ts +80 -0
  294. package/dist/core/llm/providers/implementations/OllamaProvider.d.ts.map +1 -0
  295. package/dist/core/llm/providers/implementations/OllamaProvider.js +473 -0
  296. package/dist/core/llm/providers/implementations/OllamaProvider.js.map +1 -0
  297. package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts +160 -0
  298. package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts.map +1 -0
  299. package/dist/core/llm/providers/implementations/OpenAIProvider.js +672 -0
  300. package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -0
  301. package/dist/core/llm/providers/implementations/OpenRouterProvider.d.ts +51 -0
  302. package/dist/core/llm/providers/implementations/OpenRouterProvider.d.ts.map +1 -0
  303. package/dist/core/llm/providers/implementations/OpenRouterProvider.js +499 -0
  304. package/dist/core/llm/providers/implementations/OpenRouterProvider.js.map +1 -0
  305. package/dist/core/llm/routing/IModelRouter.d.ts +129 -0
  306. package/dist/core/llm/routing/IModelRouter.d.ts.map +1 -0
  307. package/dist/core/llm/routing/IModelRouter.js +14 -0
  308. package/dist/core/llm/routing/IModelRouter.js.map +1 -0
  309. package/dist/core/llm/routing/ModelRouter.d.ts +157 -0
  310. package/dist/core/llm/routing/ModelRouter.d.ts.map +1 -0
  311. package/dist/core/llm/routing/ModelRouter.js +190 -0
  312. package/dist/core/llm/routing/ModelRouter.js.map +1 -0
  313. package/dist/core/llm/streaming/StreamingBatcher.d.ts +54 -0
  314. package/dist/core/llm/streaming/StreamingBatcher.d.ts.map +1 -0
  315. package/dist/core/llm/streaming/StreamingBatcher.js +173 -0
  316. package/dist/core/llm/streaming/StreamingBatcher.js.map +1 -0
  317. package/dist/core/llm/streaming/StreamingReconstructor.d.ts +69 -0
  318. package/dist/core/llm/streaming/StreamingReconstructor.d.ts.map +1 -0
  319. package/dist/core/llm/streaming/StreamingReconstructor.js +102 -0
  320. package/dist/core/llm/streaming/StreamingReconstructor.js.map +1 -0
  321. package/dist/core/marketplace/IMarketplace.d.ts +500 -0
  322. package/dist/core/marketplace/IMarketplace.d.ts.map +1 -0
  323. package/dist/core/marketplace/IMarketplace.js +10 -0
  324. package/dist/core/marketplace/IMarketplace.js.map +1 -0
  325. package/dist/core/marketplace/Marketplace.d.ts +122 -0
  326. package/dist/core/marketplace/Marketplace.d.ts.map +1 -0
  327. package/dist/core/marketplace/Marketplace.js +591 -0
  328. package/dist/core/marketplace/Marketplace.js.map +1 -0
  329. package/dist/core/marketplace/index.d.ts +8 -0
  330. package/dist/core/marketplace/index.d.ts.map +1 -0
  331. package/dist/core/marketplace/index.js +8 -0
  332. package/dist/core/marketplace/index.js.map +1 -0
  333. package/dist/core/observability/ITracer.d.ts +317 -0
  334. package/dist/core/observability/ITracer.d.ts.map +1 -0
  335. package/dist/core/observability/ITracer.js +55 -0
  336. package/dist/core/observability/ITracer.js.map +1 -0
  337. package/dist/core/observability/Tracer.d.ts +76 -0
  338. package/dist/core/observability/Tracer.d.ts.map +1 -0
  339. package/dist/core/observability/Tracer.js +360 -0
  340. package/dist/core/observability/Tracer.js.map +1 -0
  341. package/dist/core/observability/index.d.ts +9 -0
  342. package/dist/core/observability/index.d.ts.map +1 -0
  343. package/dist/core/observability/index.js +8 -0
  344. package/dist/core/observability/index.js.map +1 -0
  345. package/dist/core/orchestration/AgentOrchestrator.d.ts +243 -0
  346. package/dist/core/orchestration/AgentOrchestrator.d.ts.map +1 -0
  347. package/dist/core/orchestration/AgentOrchestrator.js +648 -0
  348. package/dist/core/orchestration/AgentOrchestrator.js.map +1 -0
  349. package/dist/core/orchestration/IAgentOrchestrator.d.ts +44 -0
  350. package/dist/core/orchestration/IAgentOrchestrator.d.ts.map +1 -0
  351. package/dist/core/orchestration/IAgentOrchestrator.js +4 -0
  352. package/dist/core/orchestration/IAgentOrchestrator.js.map +1 -0
  353. package/dist/core/orchestration/helpers.d.ts +12 -0
  354. package/dist/core/orchestration/helpers.d.ts.map +1 -0
  355. package/dist/core/orchestration/helpers.js +36 -0
  356. package/dist/core/orchestration/helpers.js.map +1 -0
  357. package/dist/core/planning/IPlanningEngine.d.ts +524 -0
  358. package/dist/core/planning/IPlanningEngine.d.ts.map +1 -0
  359. package/dist/core/planning/IPlanningEngine.js +32 -0
  360. package/dist/core/planning/IPlanningEngine.js.map +1 -0
  361. package/dist/core/planning/PlanningEngine.d.ts +161 -0
  362. package/dist/core/planning/PlanningEngine.d.ts.map +1 -0
  363. package/dist/core/planning/PlanningEngine.js +783 -0
  364. package/dist/core/planning/PlanningEngine.js.map +1 -0
  365. package/dist/core/planning/index.d.ts +25 -0
  366. package/dist/core/planning/index.d.ts.map +1 -0
  367. package/dist/core/planning/index.js +25 -0
  368. package/dist/core/planning/index.js.map +1 -0
  369. package/dist/core/sandbox/CodeSandbox.d.ts +86 -0
  370. package/dist/core/sandbox/CodeSandbox.d.ts.map +1 -0
  371. package/dist/core/sandbox/CodeSandbox.js +475 -0
  372. package/dist/core/sandbox/CodeSandbox.js.map +1 -0
  373. package/dist/core/sandbox/ICodeSandbox.d.ts +249 -0
  374. package/dist/core/sandbox/ICodeSandbox.d.ts.map +1 -0
  375. package/dist/core/sandbox/ICodeSandbox.js +24 -0
  376. package/dist/core/sandbox/ICodeSandbox.js.map +1 -0
  377. package/dist/core/sandbox/index.d.ts +9 -0
  378. package/dist/core/sandbox/index.d.ts.map +1 -0
  379. package/dist/core/sandbox/index.js +8 -0
  380. package/dist/core/sandbox/index.js.map +1 -0
  381. package/dist/core/storage/IStorageAdapter.d.ts +483 -0
  382. package/dist/core/storage/IStorageAdapter.d.ts.map +1 -0
  383. package/dist/core/storage/IStorageAdapter.js +19 -0
  384. package/dist/core/storage/IStorageAdapter.js.map +1 -0
  385. package/dist/core/storage/InMemoryStorageAdapter.d.ts +192 -0
  386. package/dist/core/storage/InMemoryStorageAdapter.d.ts.map +1 -0
  387. package/dist/core/storage/InMemoryStorageAdapter.js +343 -0
  388. package/dist/core/storage/InMemoryStorageAdapter.js.map +1 -0
  389. package/dist/core/storage/SqlStorageAdapter.d.ts +262 -0
  390. package/dist/core/storage/SqlStorageAdapter.d.ts.map +1 -0
  391. package/dist/core/storage/SqlStorageAdapter.js +485 -0
  392. package/dist/core/storage/SqlStorageAdapter.js.map +1 -0
  393. package/dist/core/storage/index.d.ts +14 -0
  394. package/dist/core/storage/index.d.ts.map +1 -0
  395. package/dist/core/storage/index.js +14 -0
  396. package/dist/core/storage/index.js.map +1 -0
  397. package/dist/core/streaming/IStreamClient.d.ts +72 -0
  398. package/dist/core/streaming/IStreamClient.d.ts.map +1 -0
  399. package/dist/core/streaming/IStreamClient.js +12 -0
  400. package/dist/core/streaming/IStreamClient.js.map +1 -0
  401. package/dist/core/streaming/StreamingManager.d.ts +242 -0
  402. package/dist/core/streaming/StreamingManager.d.ts.map +1 -0
  403. package/dist/core/streaming/StreamingManager.js +282 -0
  404. package/dist/core/streaming/StreamingManager.js.map +1 -0
  405. package/dist/core/structured/IStructuredOutputManager.d.ts +701 -0
  406. package/dist/core/structured/IStructuredOutputManager.d.ts.map +1 -0
  407. package/dist/core/structured/IStructuredOutputManager.js +74 -0
  408. package/dist/core/structured/IStructuredOutputManager.js.map +1 -0
  409. package/dist/core/structured/StructuredOutputManager.d.ts +140 -0
  410. package/dist/core/structured/StructuredOutputManager.d.ts.map +1 -0
  411. package/dist/core/structured/StructuredOutputManager.js +1015 -0
  412. package/dist/core/structured/StructuredOutputManager.js.map +1 -0
  413. package/dist/core/structured/index.d.ts +34 -0
  414. package/dist/core/structured/index.d.ts.map +1 -0
  415. package/dist/core/structured/index.js +34 -0
  416. package/dist/core/structured/index.js.map +1 -0
  417. package/dist/core/tools/ITool.d.ts +228 -0
  418. package/dist/core/tools/ITool.d.ts.map +1 -0
  419. package/dist/core/tools/ITool.js +11 -0
  420. package/dist/core/tools/ITool.js.map +1 -0
  421. package/dist/core/tools/IToolOrchestrator.d.ts +131 -0
  422. package/dist/core/tools/IToolOrchestrator.d.ts.map +1 -0
  423. package/dist/core/tools/IToolOrchestrator.js +14 -0
  424. package/dist/core/tools/IToolOrchestrator.js.map +1 -0
  425. package/dist/core/tools/ToolExecutor.d.ts +143 -0
  426. package/dist/core/tools/ToolExecutor.d.ts.map +1 -0
  427. package/dist/core/tools/ToolExecutor.js +364 -0
  428. package/dist/core/tools/ToolExecutor.js.map +1 -0
  429. package/dist/core/tools/ToolOrchestrator.d.ts +142 -0
  430. package/dist/core/tools/ToolOrchestrator.d.ts.map +1 -0
  431. package/dist/core/tools/ToolOrchestrator.js +373 -0
  432. package/dist/core/tools/ToolOrchestrator.js.map +1 -0
  433. package/dist/core/tools/permissions/IToolPermissionManager.d.ts +195 -0
  434. package/dist/core/tools/permissions/IToolPermissionManager.d.ts.map +1 -0
  435. package/dist/core/tools/permissions/IToolPermissionManager.js +14 -0
  436. package/dist/core/tools/permissions/IToolPermissionManager.js.map +1 -0
  437. package/dist/core/tools/permissions/ToolPermissionManager.d.ts +203 -0
  438. package/dist/core/tools/permissions/ToolPermissionManager.d.ts.map +1 -0
  439. package/dist/core/tools/permissions/ToolPermissionManager.js +298 -0
  440. package/dist/core/tools/permissions/ToolPermissionManager.js.map +1 -0
  441. package/dist/core/ui/IUIComponent.d.ts +11 -0
  442. package/dist/core/ui/IUIComponent.d.ts.map +1 -0
  443. package/dist/core/ui/IUIComponent.js +2 -0
  444. package/dist/core/ui/IUIComponent.js.map +1 -0
  445. package/dist/core/usage/UsageLedger.d.ts +81 -0
  446. package/dist/core/usage/UsageLedger.d.ts.map +1 -0
  447. package/dist/core/usage/UsageLedger.js +135 -0
  448. package/dist/core/usage/UsageLedger.js.map +1 -0
  449. package/dist/core/workflows/IWorkflowEngine.d.ts +42 -0
  450. package/dist/core/workflows/IWorkflowEngine.d.ts.map +1 -0
  451. package/dist/core/workflows/IWorkflowEngine.js +2 -0
  452. package/dist/core/workflows/IWorkflowEngine.js.map +1 -0
  453. package/dist/core/workflows/WorkflowEngine.d.ts +28 -0
  454. package/dist/core/workflows/WorkflowEngine.d.ts.map +1 -0
  455. package/dist/core/workflows/WorkflowEngine.js +309 -0
  456. package/dist/core/workflows/WorkflowEngine.js.map +1 -0
  457. package/dist/core/workflows/WorkflowTypes.d.ts +180 -0
  458. package/dist/core/workflows/WorkflowTypes.d.ts.map +1 -0
  459. package/dist/core/workflows/WorkflowTypes.js +26 -0
  460. package/dist/core/workflows/WorkflowTypes.js.map +1 -0
  461. package/dist/core/workflows/runtime/WorkflowRuntime.d.ts +70 -0
  462. package/dist/core/workflows/runtime/WorkflowRuntime.d.ts.map +1 -0
  463. package/dist/core/workflows/runtime/WorkflowRuntime.js +566 -0
  464. package/dist/core/workflows/runtime/WorkflowRuntime.js.map +1 -0
  465. package/dist/core/workflows/storage/IWorkflowStore.d.ts +75 -0
  466. package/dist/core/workflows/storage/IWorkflowStore.d.ts.map +1 -0
  467. package/dist/core/workflows/storage/IWorkflowStore.js +2 -0
  468. package/dist/core/workflows/storage/IWorkflowStore.js.map +1 -0
  469. package/dist/core/workflows/storage/InMemoryWorkflowStore.d.ts +14 -0
  470. package/dist/core/workflows/storage/InMemoryWorkflowStore.d.ts.map +1 -0
  471. package/dist/core/workflows/storage/InMemoryWorkflowStore.js +130 -0
  472. package/dist/core/workflows/storage/InMemoryWorkflowStore.js.map +1 -0
  473. package/dist/extensions/ExtensionLoader.d.ts +119 -0
  474. package/dist/extensions/ExtensionLoader.d.ts.map +1 -0
  475. package/dist/extensions/ExtensionLoader.js +297 -0
  476. package/dist/extensions/ExtensionLoader.js.map +1 -0
  477. package/dist/extensions/ExtensionManager.d.ts +49 -0
  478. package/dist/extensions/ExtensionManager.d.ts.map +1 -0
  479. package/dist/extensions/ExtensionManager.js +197 -0
  480. package/dist/extensions/ExtensionManager.js.map +1 -0
  481. package/dist/extensions/ExtensionRegistry.d.ts +39 -0
  482. package/dist/extensions/ExtensionRegistry.d.ts.map +1 -0
  483. package/dist/extensions/ExtensionRegistry.js +103 -0
  484. package/dist/extensions/ExtensionRegistry.js.map +1 -0
  485. package/dist/extensions/MultiRegistryLoader.d.ts +61 -0
  486. package/dist/extensions/MultiRegistryLoader.d.ts.map +1 -0
  487. package/dist/extensions/MultiRegistryLoader.js +169 -0
  488. package/dist/extensions/MultiRegistryLoader.js.map +1 -0
  489. package/dist/extensions/RegistryConfig.d.ts +86 -0
  490. package/dist/extensions/RegistryConfig.d.ts.map +1 -0
  491. package/dist/extensions/RegistryConfig.js +99 -0
  492. package/dist/extensions/RegistryConfig.js.map +1 -0
  493. package/dist/extensions/events.d.ts +19 -0
  494. package/dist/extensions/events.d.ts.map +1 -0
  495. package/dist/extensions/events.js +2 -0
  496. package/dist/extensions/events.js.map +1 -0
  497. package/dist/extensions/index.d.ts +9 -0
  498. package/dist/extensions/index.d.ts.map +1 -0
  499. package/dist/extensions/index.js +9 -0
  500. package/dist/extensions/index.js.map +1 -0
  501. package/dist/extensions/manifest.d.ts +52 -0
  502. package/dist/extensions/manifest.d.ts.map +1 -0
  503. package/dist/extensions/manifest.js +2 -0
  504. package/dist/extensions/manifest.js.map +1 -0
  505. package/dist/extensions/types.d.ts +294 -0
  506. package/dist/extensions/types.d.ts.map +1 -0
  507. package/dist/extensions/types.js +12 -0
  508. package/dist/extensions/types.js.map +1 -0
  509. package/dist/index.d.ts +49 -0
  510. package/dist/index.d.ts.map +1 -0
  511. package/dist/index.js +59 -0
  512. package/dist/index.js.map +1 -0
  513. package/dist/logging/ILogger.d.ts +8 -0
  514. package/dist/logging/ILogger.d.ts.map +1 -0
  515. package/dist/logging/ILogger.js +2 -0
  516. package/dist/logging/ILogger.js.map +1 -0
  517. package/dist/logging/PinoLogger.d.ts +12 -0
  518. package/dist/logging/PinoLogger.d.ts.map +1 -0
  519. package/dist/logging/PinoLogger.js +22 -0
  520. package/dist/logging/PinoLogger.js.map +1 -0
  521. package/dist/logging/loggerFactory.d.ts +6 -0
  522. package/dist/logging/loggerFactory.d.ts.map +1 -0
  523. package/dist/logging/loggerFactory.js +14 -0
  524. package/dist/logging/loggerFactory.js.map +1 -0
  525. package/dist/rag/EmbeddingManager.d.ts +81 -0
  526. package/dist/rag/EmbeddingManager.d.ts.map +1 -0
  527. package/dist/rag/EmbeddingManager.js +412 -0
  528. package/dist/rag/EmbeddingManager.js.map +1 -0
  529. package/dist/rag/IEmbeddingManager.d.ts +277 -0
  530. package/dist/rag/IEmbeddingManager.d.ts.map +1 -0
  531. package/dist/rag/IEmbeddingManager.js +19 -0
  532. package/dist/rag/IEmbeddingManager.js.map +1 -0
  533. package/dist/rag/IRetrievalAugmentor.d.ts +208 -0
  534. package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -0
  535. package/dist/rag/IRetrievalAugmentor.js +21 -0
  536. package/dist/rag/IRetrievalAugmentor.js.map +1 -0
  537. package/dist/rag/IVectorStore.d.ts +351 -0
  538. package/dist/rag/IVectorStore.d.ts.map +1 -0
  539. package/dist/rag/IVectorStore.js +15 -0
  540. package/dist/rag/IVectorStore.js.map +1 -0
  541. package/dist/rag/IVectorStoreManager.d.ts +121 -0
  542. package/dist/rag/IVectorStoreManager.d.ts.map +1 -0
  543. package/dist/rag/IVectorStoreManager.js +13 -0
  544. package/dist/rag/IVectorStoreManager.js.map +1 -0
  545. package/dist/rag/RetrievalAugmentor.d.ts +99 -0
  546. package/dist/rag/RetrievalAugmentor.d.ts.map +1 -0
  547. package/dist/rag/RetrievalAugmentor.js +674 -0
  548. package/dist/rag/RetrievalAugmentor.js.map +1 -0
  549. package/dist/rag/VectorStoreManager.d.ts +90 -0
  550. package/dist/rag/VectorStoreManager.d.ts.map +1 -0
  551. package/dist/rag/VectorStoreManager.js +283 -0
  552. package/dist/rag/VectorStoreManager.js.map +1 -0
  553. package/dist/rag/implementations/index.d.ts +9 -0
  554. package/dist/rag/implementations/index.d.ts.map +1 -0
  555. package/dist/rag/implementations/index.js +9 -0
  556. package/dist/rag/implementations/index.js.map +1 -0
  557. package/dist/rag/implementations/vector_stores/InMemoryVectorStore.d.ts +132 -0
  558. package/dist/rag/implementations/vector_stores/InMemoryVectorStore.d.ts.map +1 -0
  559. package/dist/rag/implementations/vector_stores/InMemoryVectorStore.js +539 -0
  560. package/dist/rag/implementations/vector_stores/InMemoryVectorStore.js.map +1 -0
  561. package/dist/rag/implementations/vector_stores/SqlVectorStore.d.ts +265 -0
  562. package/dist/rag/implementations/vector_stores/SqlVectorStore.d.ts.map +1 -0
  563. package/dist/rag/implementations/vector_stores/SqlVectorStore.js +755 -0
  564. package/dist/rag/implementations/vector_stores/SqlVectorStore.js.map +1 -0
  565. package/dist/rag/implementations/vector_stores/index.d.ts +10 -0
  566. package/dist/rag/implementations/vector_stores/index.d.ts.map +1 -0
  567. package/dist/rag/implementations/vector_stores/index.js +12 -0
  568. package/dist/rag/implementations/vector_stores/index.js.map +1 -0
  569. package/dist/rag/index.d.ts +95 -0
  570. package/dist/rag/index.d.ts.map +1 -0
  571. package/dist/rag/index.js +97 -0
  572. package/dist/rag/index.js.map +1 -0
  573. package/dist/services/user_auth/AuthService.d.ts +13 -0
  574. package/dist/services/user_auth/AuthService.d.ts.map +1 -0
  575. package/dist/services/user_auth/AuthService.js +24 -0
  576. package/dist/services/user_auth/AuthService.js.map +1 -0
  577. package/dist/services/user_auth/SubscriptionService.d.ts +14 -0
  578. package/dist/services/user_auth/SubscriptionService.d.ts.map +1 -0
  579. package/dist/services/user_auth/SubscriptionService.js +34 -0
  580. package/dist/services/user_auth/SubscriptionService.js.map +1 -0
  581. package/dist/services/user_auth/types.d.ts +30 -0
  582. package/dist/services/user_auth/types.d.ts.map +1 -0
  583. package/dist/services/user_auth/types.js +2 -0
  584. package/dist/services/user_auth/types.js.map +1 -0
  585. package/dist/stubs/prismaClient.d.ts +35 -0
  586. package/dist/stubs/prismaClient.d.ts.map +1 -0
  587. package/dist/stubs/prismaClient.js +47 -0
  588. package/dist/stubs/prismaClient.js.map +1 -0
  589. package/dist/types/rateLimitTypes.d.ts +70 -0
  590. package/dist/types/rateLimitTypes.d.ts.map +1 -0
  591. package/dist/types/rateLimitTypes.js +55 -0
  592. package/dist/types/rateLimitTypes.js.map +1 -0
  593. package/dist/utils/errors.d.ts +80 -0
  594. package/dist/utils/errors.d.ts.map +1 -0
  595. package/dist/utils/errors.js +201 -0
  596. package/dist/utils/errors.js.map +1 -0
  597. package/dist/utils/uuid.d.ts +11 -0
  598. package/dist/utils/uuid.d.ts.map +1 -0
  599. package/dist/utils/uuid.js +64 -0
  600. package/dist/utils/uuid.js.map +1 -0
  601. package/package.json +84 -0
@@ -0,0 +1,672 @@
1
+ // @ts-nocheck
2
+ // File: backend/agentos/core/llm/providers/implementations/OpenAIProvider.ts
3
+ import { OpenAIProviderError } from '../errors/OpenAIProviderError.js';
4
+ /**
5
+ * @class OpenAIProvider
6
+ * @implements {IProvider}
7
+ * Provides an interface to OpenAI's suite of models (GPT, Embeddings).
8
+ * It handles API requests, streaming, error management, and model information.
9
+ */
10
+ export class OpenAIProvider {
11
+ /**
12
+ * Creates an instance of OpenAIProvider.
13
+ * Note: The provider is not ready to use until `initialize()` is called and resolves.
14
+ */
15
+ constructor() {
16
+ /** @inheritdoc */
17
+ this.providerId = 'openai';
18
+ /** @inheritdoc */
19
+ this.isInitialized = false;
20
+ this.availableModelsCache = new Map();
21
+ // Known pricing for common OpenAI models (USD per 1K tokens).
22
+ // This should be updated periodically based on OpenAI's official pricing.
23
+ // Input: cost for prompt tokens, Output: cost for completion tokens.
24
+ // For embedding models, 'input' is typically used for total tokens.
25
+ this.modelPricing = {
26
+ // Chat models (per 1K tokens)
27
+ 'gpt-4o': { input: 0.005, output: 0.015 },
28
+ 'gpt-4o-mini': { input: 0.00015, output: 0.0006 },
29
+ 'gpt-4-turbo': { input: 0.01, output: 0.03 }, // Example, check current pricing
30
+ 'gpt-4-turbo-preview': { input: 0.01, output: 0.03 }, // Example
31
+ 'gpt-4-vision-preview': { input: 0.01, output: 0.03 }, // Example
32
+ 'gpt-4': { input: 0.03, output: 0.06 },
33
+ 'gpt-4-32k': { input: 0.06, output: 0.12 },
34
+ 'gpt-3.5-turbo': { input: 0.0005, output: 0.0015 }, // Example for gpt-3.5-turbo-0125
35
+ 'gpt-3.5-turbo-16k': { input: 0.001, output: 0.002 }, // Example for gpt-3.5-turbo-16k-0613
36
+ // Embedding models (per 1K tokens, typically only input cost matters)
37
+ 'text-embedding-3-large': { input: 0.00013, output: 0 },
38
+ 'text-embedding-3-small': { input: 0.00002, output: 0 },
39
+ 'text-embedding-ada-002': { input: 0.0001, output: 0 },
40
+ };
41
+ // Configuration is set during initialize()
42
+ }
43
+ /** @inheritdoc */
44
+ async initialize(config) {
45
+ if (!config.apiKey) {
46
+ throw new OpenAIProviderError('API key is required for OpenAIProvider initialization.', 'INIT_FAILED_MISSING_API_KEY');
47
+ }
48
+ this.config = {
49
+ baseURL: 'https://api.openai.com/v1',
50
+ maxRetries: 3,
51
+ requestTimeout: 60000, // 60 seconds
52
+ ...config, // User-provided config overrides defaults
53
+ };
54
+ this.defaultModelId = config.defaultModelId;
55
+ try {
56
+ // Attempt to list models to verify API key and connectivity.
57
+ await this.refreshAvailableModels();
58
+ this.isInitialized = true;
59
+ console.log(`OpenAIProvider initialized successfully. Default model: ${this.defaultModelId || 'Not set'}. Found ${this.availableModelsCache.size} models.`);
60
+ }
61
+ catch (error) {
62
+ this.isInitialized = false;
63
+ if (error instanceof OpenAIProviderError) {
64
+ throw error; // Re-throw if already an OpenAIProviderError
65
+ }
66
+ const message = error instanceof Error ? error.message : 'Unknown error during initialization.';
67
+ throw new OpenAIProviderError(`OpenAIProvider initialization failed: ${message}`, 'INITIALIZATION_FAILED', undefined, undefined, undefined, error);
68
+ }
69
+ }
70
+ /**
71
+ * Fetches the list of available models from OpenAI and updates the internal cache.
72
+ * @private
73
+ * @throws {OpenAIProviderError} If fetching or parsing models fails.
74
+ */
75
+ async refreshAvailableModels() {
76
+ const response = await this.makeApiRequest('/models', 'GET', this.config.apiKey);
77
+ this.availableModelsCache.clear();
78
+ response.data.forEach((apiModel) => {
79
+ // Basic filtering for generally usable models, can be expanded.
80
+ if (apiModel.id.startsWith('gpt-') || apiModel.id.includes('embedding')) {
81
+ const modelInfo = this.mapApiToModelInfo(apiModel);
82
+ this.availableModelsCache.set(modelInfo.modelId, modelInfo);
83
+ }
84
+ });
85
+ }
86
+ /**
87
+ * Maps an OpenAI API model object to the standard ModelInfo interface.
88
+ * @private
89
+ * @param {OpenAIAPITypes.ModelAPIObject} apiModel - The model object from OpenAI API.
90
+ * @returns {ModelInfo} The standardized ModelInfo object.
91
+ */
92
+ mapApiToModelInfo(apiModel) {
93
+ const capabilities = [];
94
+ let contextWindowSize;
95
+ let _supportsTools = false;
96
+ let _supportsVision = false;
97
+ let isEmbeddingModel = false;
98
+ // Infer capabilities and context window from model ID (common OpenAI patterns)
99
+ if (apiModel.id.startsWith('gpt-4o')) {
100
+ capabilities.push('chat', 'vision_input', 'tool_use', 'json_mode');
101
+ contextWindowSize = 128000;
102
+ _supportsTools = true;
103
+ _supportsVision = true;
104
+ }
105
+ else if (apiModel.id.startsWith('gpt-4-turbo')) {
106
+ capabilities.push('chat', 'tool_use', 'json_mode');
107
+ contextWindowSize = 128000;
108
+ _supportsTools = true;
109
+ if (apiModel.id.includes('-vision')) {
110
+ capabilities.push('vision_input');
111
+ _supportsVision = true;
112
+ }
113
+ }
114
+ else if (apiModel.id.startsWith('gpt-4-32k')) {
115
+ capabilities.push('chat', 'tool_use', 'json_mode');
116
+ contextWindowSize = 32768;
117
+ _supportsTools = true;
118
+ }
119
+ else if (apiModel.id.startsWith('gpt-4')) {
120
+ capabilities.push('chat', 'tool_use', 'json_mode');
121
+ contextWindowSize = 8192;
122
+ _supportsTools = true;
123
+ }
124
+ else if (apiModel.id.startsWith('gpt-3.5-turbo-16k')) {
125
+ capabilities.push('chat', 'tool_use', 'json_mode');
126
+ contextWindowSize = 16385;
127
+ _supportsTools = true;
128
+ }
129
+ else if (apiModel.id.startsWith('gpt-3.5-turbo')) {
130
+ capabilities.push('chat', 'tool_use', 'json_mode');
131
+ // context window for gpt-3.5-turbo can vary (e.g. 4096, 16385 for -0125)
132
+ // Defaulting to a common value, but specific variants might differ.
133
+ contextWindowSize = apiModel.id.includes('0125') || apiModel.id.includes('1106') ? 16385 : 4096;
134
+ _supportsTools = true;
135
+ }
136
+ else if (apiModel.id.includes('embedding')) {
137
+ capabilities.push('embeddings');
138
+ isEmbeddingModel = true;
139
+ // Common context/input token limit for OpenAI embedding models
140
+ contextWindowSize = 8191; // Max input tokens
141
+ }
142
+ else {
143
+ // Fallback for other gpt models if any (less common now)
144
+ capabilities.push('chat'); // Assume chat at least
145
+ }
146
+ const pricing = this.modelPricing[apiModel.id] || { input: 0, output: 0 };
147
+ return {
148
+ modelId: apiModel.id,
149
+ providerId: this.providerId,
150
+ displayName: apiModel.id, // Can be enhanced if more metadata is available
151
+ description: `OpenAI model: ${apiModel.id}`,
152
+ capabilities,
153
+ contextWindowSize,
154
+ pricePer1MTokensInput: pricing.input,
155
+ pricePer1MTokensOutput: pricing.output,
156
+ pricePer1MTokensTotal: isEmbeddingModel ? pricing.input : undefined,
157
+ supportsStreaming: capabilities.includes('chat'), // Generally, chat models support streaming
158
+ // OpenAI specific details can be added to metadata
159
+ embeddingDimension: apiModel.id.includes('embedding-3-large') ? 3072 :
160
+ apiModel.id.includes('embedding-3-small') ? 1536 :
161
+ apiModel.id.includes('ada-002') ? 1536 : undefined,
162
+ lastUpdated: new Date(apiModel.created * 1000).toISOString(),
163
+ status: 'active', // OpenAI doesn't directly provide status in this list, assume active.
164
+ };
165
+ }
166
+ /**
167
+ * Ensures the provider is initialized before use.
168
+ * @private
169
+ * @throws {OpenAIProviderError} If not initialized.
170
+ */
171
+ ensureInitialized() {
172
+ if (!this.isInitialized) {
173
+ throw new OpenAIProviderError('OpenAIProvider is not initialized. Call initialize() first.', 'PROVIDER_NOT_INITIALIZED');
174
+ }
175
+ }
176
+ /**
177
+ * Resolves the API key to use for a request, prioritizing per-request override, then user-specific, then system default.
178
+ * @private
179
+ * @param {string | undefined} apiKeyOverride - API key provided directly in request options.
180
+ * @returns {string} The API key to use.
181
+ * @throws {OpenAIProviderError} If no API key is available.
182
+ */
183
+ getApiKey(apiKeyOverride) {
184
+ const keyToUse = apiKeyOverride || this.config.apiKey;
185
+ if (!keyToUse) {
186
+ throw new OpenAIProviderError('No OpenAI API key available for the request.', 'API_KEY_MISSING');
187
+ }
188
+ return keyToUse;
189
+ }
190
+ /** @inheritdoc */
191
+ async generateCompletion(modelId, messages, options) {
192
+ this.ensureInitialized();
193
+ const apiKey = this.getApiKey(options.apiKeyOverride);
194
+ const requestBody = this.buildChatCompletionPayload(modelId, messages, options, false);
195
+ const apiResponse = await this.makeApiRequest('/chat/completions', 'POST', apiKey, requestBody);
196
+ return this.mapApiToCompletionResponse(apiResponse);
197
+ }
198
+ /** @inheritdoc */
199
+ async *generateCompletionStream(modelId, messages, options) {
200
+ this.ensureInitialized();
201
+ const apiKey = this.getApiKey(options.apiKeyOverride);
202
+ const requestBody = this.buildChatCompletionPayload(modelId, messages, options, true);
203
+ const stream = (await this.makeApiRequest('/chat/completions', 'POST', apiKey, requestBody, true // Indicate streaming response is expected
204
+ ));
205
+ // Accumulators for streaming tool calls
206
+ const accumulatedToolCalls = new Map();
207
+ const abortSignal = options.abortSignal;
208
+ if (abortSignal?.aborted) {
209
+ yield {
210
+ id: `openai-abort-${Date.now()}`,
211
+ object: 'chat.completion.chunk',
212
+ created: Math.floor(Date.now() / 1000),
213
+ modelId,
214
+ choices: [],
215
+ error: { message: 'Stream aborted prior to first chunk', type: 'abort' },
216
+ isFinal: true,
217
+ };
218
+ return;
219
+ }
220
+ const abortHandler = () => {
221
+ // Emit final abort chunk and ensure generator completes.
222
+ // We cannot directly cancel the underlying ReadableStream cleanly cross-platform here; consumer side will stop.
223
+ // Provide a terminal chunk for consistent teardown.
224
+ // Note: We don't attempt to read further chunks after abort.
225
+ };
226
+ abortSignal?.addEventListener('abort', abortHandler, { once: true });
227
+ for await (const chunk of this.parseSseStream(stream)) {
228
+ if (abortSignal?.aborted) {
229
+ yield {
230
+ id: `openai-abort-${Date.now()}`,
231
+ object: 'chat.completion.chunk',
232
+ created: Math.floor(Date.now() / 1000),
233
+ modelId,
234
+ choices: [],
235
+ error: { message: 'Stream aborted by caller', type: 'abort' },
236
+ isFinal: true,
237
+ };
238
+ break;
239
+ }
240
+ if (chunk === '[DONE]') {
241
+ // The [DONE] message is a signal for the end of the stream from OpenAI.
242
+ // A final response chunk with isFinal=true and potential usage should be yielded by the parser if data exists.
243
+ // If OpenAI includes usage in the last data chunk before [DONE], parseSseStream handles it.
244
+ return;
245
+ }
246
+ try {
247
+ const apiChunk = JSON.parse(chunk);
248
+ yield this.mapApiToStreamChunkResponse(apiChunk, accumulatedToolCalls);
249
+ }
250
+ catch (error) {
251
+ console.warn('OpenAIProvider: Failed to parse stream chunk JSON:', chunk, error);
252
+ // Decide if to yield an error chunk or continue if minor parsing issue
253
+ }
254
+ }
255
+ abortSignal?.removeEventListener('abort', abortHandler);
256
+ }
257
+ /** @inheritdoc */
258
+ async generateEmbeddings(modelId, texts, options) {
259
+ this.ensureInitialized();
260
+ if (!texts || texts.length === 0) {
261
+ throw new OpenAIProviderError('Input texts array cannot be empty for embeddings.', 'EMBEDDING_NO_INPUT');
262
+ }
263
+ const apiKey = this.getApiKey(options?.apiKeyOverride);
264
+ const payload = {
265
+ model: modelId,
266
+ input: texts,
267
+ };
268
+ if (options?.encodingFormat)
269
+ payload.encoding_format = options.encodingFormat;
270
+ if (options?.dimensions)
271
+ payload.dimensions = options.dimensions;
272
+ if (options?.userId)
273
+ payload.user = options.userId;
274
+ // OpenAI specific: input_type for their newer models
275
+ if (options?.inputType && (modelId.includes('text-embedding-3') || modelId.includes('ada-002'))) {
276
+ // Not a standard OpenAI param, this is an example if they add it.
277
+ // For now, customModelParams is the way for non-standard things.
278
+ }
279
+ if (options?.customModelParams) {
280
+ Object.assign(payload, options.customModelParams);
281
+ }
282
+ const apiResponse = await this.makeApiRequest('/embeddings', 'POST', apiKey, payload);
283
+ return this.mapApiToEmbeddingResponse(apiResponse);
284
+ }
285
+ /** @inheritdoc */
286
+ async listAvailableModels(filter) {
287
+ this.ensureInitialized();
288
+ // Optionally refresh cache, or rely on initialization. For simplicity, using cached.
289
+ // await this.refreshAvailableModels();
290
+ const models = Array.from(this.availableModelsCache.values());
291
+ if (filter?.capability) {
292
+ return models.filter(m => m.capabilities.includes(filter.capability));
293
+ }
294
+ return models;
295
+ }
296
+ /** @inheritdoc */
297
+ async getModelInfo(modelId) {
298
+ this.ensureInitialized();
299
+ // Could implement a direct fetch if model not in cache, or rely on cached version.
300
+ // For now, uses cached version.
301
+ if (!this.availableModelsCache.has(modelId)) {
302
+ // Attempt to refresh and check again, in case it's a new model
303
+ try {
304
+ await this.refreshAvailableModels();
305
+ }
306
+ catch (error) {
307
+ console.warn(`OpenAIProvider: Failed to refresh models while fetching info for ${modelId}`, error);
308
+ }
309
+ }
310
+ return this.availableModelsCache.get(modelId);
311
+ }
312
+ /** @inheritdoc */
313
+ async checkHealth() {
314
+ try {
315
+ // A lightweight call, e.g., fetching a small model's info or /models with limit=1
316
+ await this.makeApiRequest(`/models/${this.defaultModelId || 'gpt-3.5-turbo'}`, // Use a known cheap/fast model
317
+ 'GET', this.config.apiKey);
318
+ return { isHealthy: true };
319
+ }
320
+ catch (error) {
321
+ const message = error instanceof Error ? error.message : 'Health check failed';
322
+ return { isHealthy: false, details: { message, error } };
323
+ }
324
+ }
325
+ /** @inheritdoc */
326
+ async shutdown() {
327
+ // For OpenAIProvider, using stateless HTTP requests, there might not be
328
+ // persistent connections to close. If connection pooling or WebSockets
329
+ // were used, they would be closed here.
330
+ this.isInitialized = false; // Mark as not initialized
331
+ console.log('OpenAIProvider shutdown complete.');
332
+ // No explicit resources to release in this implementation.
333
+ }
334
+ // --- Helper Methods ---
335
+ /**
336
+ * Builds the payload for OpenAI's Chat Completions API.
337
+ * @private
338
+ */
339
+ buildChatCompletionPayload(modelId, messages, options, stream) {
340
+ const payload = {
341
+ model: modelId,
342
+ messages: messages.map(m => ({
343
+ role: m.role,
344
+ content: m.content, // OpenAI allows null content for assistant tool_calls message
345
+ name: m.name,
346
+ tool_calls: m.tool_calls,
347
+ tool_call_id: m.tool_call_id,
348
+ })),
349
+ stream: stream,
350
+ };
351
+ if (options.temperature !== undefined)
352
+ payload.temperature = options.temperature;
353
+ if (options.topP !== undefined)
354
+ payload.top_p = options.topP;
355
+ if (options.maxTokens !== undefined)
356
+ payload.max_tokens = options.maxTokens;
357
+ if (options.presencePenalty !== undefined)
358
+ payload.presence_penalty = options.presencePenalty;
359
+ if (options.frequencyPenalty !== undefined)
360
+ payload.frequency_penalty = options.frequencyPenalty;
361
+ if (options.stopSequences !== undefined)
362
+ payload.stop = options.stopSequences;
363
+ if (options.userId !== undefined)
364
+ payload.user = options.userId;
365
+ if (options.tools !== undefined)
366
+ payload.tools = options.tools;
367
+ if (options.toolChoice !== undefined)
368
+ payload.tool_choice = options.toolChoice;
369
+ if (options.responseFormat !== undefined)
370
+ payload.response_format = options.responseFormat;
371
+ if (options.customModelParams) {
372
+ Object.assign(payload, options.customModelParams);
373
+ }
374
+ return payload;
375
+ }
376
+ /**
377
+ * Maps the raw OpenAI API Chat Completion response to the standard ModelCompletionResponse.
378
+ * @private
379
+ */
380
+ mapApiToCompletionResponse(apiResponse) {
381
+ const _choice = apiResponse.choices[0]; // Assuming N=1; kept for reference
382
+ return {
383
+ id: apiResponse.id,
384
+ object: apiResponse.object,
385
+ created: apiResponse.created,
386
+ modelId: apiResponse.model,
387
+ choices: apiResponse.choices.map(c => ({
388
+ index: c.index,
389
+ message: {
390
+ role: c.message.role,
391
+ content: c.message.content,
392
+ tool_calls: c.message.tool_calls,
393
+ },
394
+ finishReason: c.finish_reason,
395
+ logprobs: c.logprobs,
396
+ })),
397
+ usage: apiResponse.usage ? this.calculateUsage(apiResponse.usage, apiResponse.model) : undefined,
398
+ // No deltas for non-streaming response
399
+ };
400
+ }
401
+ /**
402
+ * Maps an OpenAI API stream chunk to a ModelCompletionResponse chunk.
403
+ * Handles accumulation of tool calls.
404
+ * @private
405
+ */
406
+ mapApiToStreamChunkResponse(apiChunk, accumulatedToolCalls) {
407
+ const choice = apiChunk.choices[0];
408
+ let responseTextDelta;
409
+ let toolCallsDeltas;
410
+ let finalUsage;
411
+ if (choice?.delta?.content) {
412
+ responseTextDelta = choice.delta.content;
413
+ }
414
+ if (choice?.delta?.tool_calls) {
415
+ toolCallsDeltas = [];
416
+ choice.delta.tool_calls.forEach(tcDelta => {
417
+ let currentToolCall = accumulatedToolCalls.get(tcDelta.index);
418
+ if (!currentToolCall) {
419
+ currentToolCall = { function: {} }; // Initialize if new
420
+ if (tcDelta.id)
421
+ currentToolCall.id = tcDelta.id;
422
+ if (tcDelta.type)
423
+ currentToolCall.type = tcDelta.type;
424
+ }
425
+ if (tcDelta.id && !currentToolCall.id)
426
+ currentToolCall.id = tcDelta.id; // Ensure ID is set if provided in delta
427
+ if (tcDelta.function?.name)
428
+ currentToolCall.function.name = (currentToolCall.function.name || '') + tcDelta.function.name;
429
+ if (tcDelta.function?.arguments)
430
+ currentToolCall.function.arguments = (currentToolCall.function.arguments || '') + tcDelta.function.arguments;
431
+ accumulatedToolCalls.set(tcDelta.index, currentToolCall);
432
+ toolCallsDeltas.push({
433
+ index: tcDelta.index,
434
+ id: tcDelta.id,
435
+ type: tcDelta.type,
436
+ function: tcDelta.function ? {
437
+ name: tcDelta.function.name,
438
+ arguments_delta: tcDelta.function.arguments
439
+ } : undefined,
440
+ });
441
+ });
442
+ }
443
+ const isFinal = !!choice?.finish_reason;
444
+ if (isFinal) {
445
+ // OpenAI might send usage in the last chunk or not at all for streams.
446
+ // If `apiChunk.usage` exists (it's optional in stream chunks per some docs), use it.
447
+ if (apiChunk.usage) {
448
+ finalUsage = this.calculateUsage(apiChunk.usage, apiChunk.model);
449
+ }
450
+ }
451
+ // Construct the primary choice message for the response
452
+ const responseChoice = {
453
+ index: choice.index,
454
+ message: {
455
+ role: choice.delta.role || 'assistant', // Role usually comes once or is 'assistant'
456
+ content: responseTextDelta || null, // Content is delta
457
+ // For final chunk, assemble complete tool_calls
458
+ tool_calls: isFinal ? Array.from(accumulatedToolCalls.values()).map(accTc => ({
459
+ id: accTc.id, // ID should be present by now
460
+ type: accTc.type, // Type should be present
461
+ function: {
462
+ name: accTc.function.name,
463
+ arguments: accTc.function.arguments
464
+ }
465
+ })).filter(tc => tc.id && tc.function.name) : undefined, // Only include if valid
466
+ },
467
+ finishReason: choice.finish_reason || null,
468
+ logprobs: choice.logprobs,
469
+ };
470
+ return {
471
+ id: apiChunk.id,
472
+ object: apiChunk.object,
473
+ created: apiChunk.created,
474
+ modelId: apiChunk.model,
475
+ choices: [responseChoice],
476
+ responseTextDelta,
477
+ toolCallsDeltas,
478
+ isFinal,
479
+ usage: finalUsage, // Only on the very final message from the stream
480
+ };
481
+ }
482
+ /**
483
+ * Maps the raw OpenAI API Embedding response to the standard ProviderEmbeddingResponse.
484
+ * @private
485
+ */
486
+ mapApiToEmbeddingResponse(apiResponse) {
487
+ return {
488
+ object: 'list',
489
+ data: apiResponse.data.map(d => ({
490
+ object: 'embedding',
491
+ embedding: d.embedding,
492
+ index: d.index,
493
+ })),
494
+ model: apiResponse.model,
495
+ usage: {
496
+ prompt_tokens: apiResponse.usage.prompt_tokens,
497
+ total_tokens: apiResponse.usage.total_tokens,
498
+ costUSD: this.calculateCost(apiResponse.usage.prompt_tokens, 0, // No completion tokens for embeddings
499
+ apiResponse.model, true // isEmbedding
500
+ ),
501
+ },
502
+ };
503
+ }
504
+ /**
505
+ * Calculates token usage and cost.
506
+ * @private
507
+ */
508
+ calculateUsage(usage, modelId) {
509
+ return {
510
+ promptTokens: usage.prompt_tokens,
511
+ completionTokens: usage.completion_tokens,
512
+ totalTokens: usage.total_tokens,
513
+ costUSD: this.calculateCost(usage.prompt_tokens, usage.completion_tokens, modelId),
514
+ };
515
+ }
516
+ /**
517
+ * Calculates the estimated cost of an API call.
518
+ * @private
519
+ */
520
+ calculateCost(promptTokens, completionTokens, modelId, isEmbedding = false) {
521
+ const pricing = this.modelPricing[modelId];
522
+ if (!pricing)
523
+ return undefined; // Pricing info not available
524
+ if (isEmbedding) {
525
+ return (promptTokens / 1000) * pricing.input;
526
+ }
527
+ const inputCost = (promptTokens / 1000) * pricing.input;
528
+ const outputCost = (completionTokens / 1000) * pricing.output;
529
+ return inputCost + outputCost;
530
+ }
531
+ async makeApiRequest(endpoint, method, apiKey, body, expectStream = false) {
532
+ const url = `${this.config.baseURL}${endpoint}`;
533
+ const headers = {
534
+ 'Authorization': `Bearer ${apiKey}`,
535
+ 'User-Agent': 'AgentOS/1.0 (OpenAIProvider)',
536
+ ...(this.config.customHeaders || {}),
537
+ };
538
+ if (method === 'POST') {
539
+ headers['Content-Type'] = 'application/json';
540
+ }
541
+ if (this.config.organizationId) {
542
+ headers['OpenAI-Organization'] = this.config.organizationId;
543
+ }
544
+ let lastError = new OpenAIProviderError('Request failed after all retries.', 'MAX_RETRIES_REACHED');
545
+ for (let attempt = 0; attempt < this.config.maxRetries; attempt++) {
546
+ const controller = new AbortController();
547
+ const timeoutId = setTimeout(() => controller.abort(), this.config.requestTimeout);
548
+ try {
549
+ const requestOptions = {
550
+ method,
551
+ headers,
552
+ body: body ? JSON.stringify(body) : undefined,
553
+ signal: controller.signal,
554
+ };
555
+ const response = await fetch(url, requestOptions);
556
+ clearTimeout(timeoutId);
557
+ if (!response.ok) {
558
+ const errorData = await response.json().catch(() => ({}));
559
+ const errorMessage = errorData.error?.message || `HTTP error ${response.status}: ${response.statusText}`;
560
+ const errorType = errorData.error?.type;
561
+ const errorCode = errorData.error?.code;
562
+ // Non-retryable errors
563
+ if (response.status === 401 || response.status === 403 || response.status === 400 || response.status === 404) {
564
+ throw new OpenAIProviderError(errorMessage, 'API_CLIENT_ERROR', errorCode || undefined, errorType, response.status, errorData);
565
+ }
566
+ // For other server errors or rate limits, prepare for retry
567
+ lastError = new OpenAIProviderError(errorMessage, 'API_SERVER_ERROR', errorCode || undefined, errorType, response.status, errorData);
568
+ if (response.status === 429) { // Rate limit
569
+ lastError = new OpenAIProviderError(errorMessage, 'RATE_LIMIT_EXCEEDED', errorCode || undefined, errorType, response.status, errorData);
570
+ const retryAfter = response.headers.get('retry-after'); // seconds
571
+ const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : (2 ** attempt) * 1000;
572
+ await new Promise(resolve => setTimeout(resolve, retryAfterMs));
573
+ continue; // Retry
574
+ }
575
+ // Other retryable server errors
576
+ if (response.status >= 500) {
577
+ await new Promise(resolve => setTimeout(resolve, (2 ** attempt) * 1000)); // Exponential backoff
578
+ continue; // Retry
579
+ }
580
+ throw lastError; // If not explicitly handled for retry, throw
581
+ }
582
+ if (expectStream) {
583
+ if (!response.body) {
584
+ throw new OpenAIProviderError('Expected a stream response but body was null.', 'STREAM_BODY_NULL');
585
+ }
586
+ return response.body;
587
+ }
588
+ return (await response.json());
589
+ }
590
+ catch (error) {
591
+ clearTimeout(timeoutId);
592
+ if (error instanceof OpenAIProviderError) { // If already our custom error, re-throw if not retryable
593
+ if (error.code === 'API_CLIENT_ERROR')
594
+ throw error;
595
+ lastError = error;
596
+ }
597
+ else if (error instanceof Error && error.name === 'AbortError') {
598
+ lastError = new OpenAIProviderError(`Request timed out after ${this.config.requestTimeout}ms.`, 'REQUEST_TIMEOUT', undefined, undefined, undefined, error);
599
+ }
600
+ else {
601
+ lastError = new OpenAIProviderError(error instanceof Error ? error.message : 'Network or unknown error', 'NETWORK_ERROR', undefined, undefined, undefined, error);
602
+ }
603
+ if (attempt === this.config.maxRetries - 1) {
604
+ break; // Last attempt failed, break to throw lastError
605
+ }
606
+ // Exponential backoff for retries not handled by 429
607
+ const delay = Math.min(30000, (1000 * (2 ** attempt)) + Math.random() * 1000); // Add jitter
608
+ console.warn(`OpenAIProvider: Request attempt ${attempt + 1} failed. Retrying in ${delay.toFixed(0)}ms. Error: ${lastError.message}`);
609
+ await new Promise(resolve => setTimeout(resolve, delay));
610
+ }
611
+ }
612
+ throw lastError; // Throw the last encountered error after all retries
613
+ }
614
+ /**
615
+ * Parses an SSE (Server-Sent Events) stream.
616
+ * @private
617
+ */
618
+ async *parseSseStream(stream) {
619
+ const reader = stream.getReader();
620
+ const decoder = new TextDecoder();
621
+ let buffer = '';
622
+ try {
623
+ while (true) {
624
+ const { done, value } = await reader.read();
625
+ if (done)
626
+ break;
627
+ buffer += decoder.decode(value, { stream: true });
628
+ let eolIndex;
629
+ // An SSE event is typically defined by "data: ...\n\n"
630
+ // Or multiple "data: ..." lines followed by \n\n
631
+ while ((eolIndex = buffer.indexOf('\n\n')) >= 0) {
632
+ const messageBlock = buffer.substring(0, eolIndex);
633
+ buffer = buffer.substring(eolIndex + 2); // +2 for \n\n
634
+ const lines = messageBlock.split('\n');
635
+ for (const line of lines) {
636
+ if (line.startsWith('data: ')) {
637
+ const dataContent = line.substring('data: '.length).trim();
638
+ if (dataContent) { // Ensure not empty data string
639
+ yield dataContent;
640
+ }
641
+ }
642
+ }
643
+ }
644
+ }
645
+ // Process any remaining data in the buffer (e.g. if stream ends without \n\n)
646
+ if (buffer.startsWith('data: ')) {
647
+ const dataContent = buffer.substring('data: '.length).trim();
648
+ if (dataContent)
649
+ yield dataContent;
650
+ }
651
+ else if (buffer.trim()) { // Sometimes final [DONE] might not be prefixed by "data: "
652
+ if (buffer.trim() === "[DONE]")
653
+ yield "[DONE]";
654
+ else
655
+ console.warn("OpenAIProvider: Trailing stream data not processed:", buffer);
656
+ }
657
+ }
658
+ catch (error) {
659
+ const message = error instanceof Error ? error.message : 'Stream parsing error';
660
+ console.error('OpenAIProvider: Error reading or parsing SSE stream:', message, error);
661
+ throw new OpenAIProviderError(message, 'STREAM_PARSING_ERROR', undefined, undefined, undefined, error);
662
+ }
663
+ finally {
664
+ // Ensure stream is closed if `break` or `return` is called within the generator
665
+ if (!reader.closed) {
666
+ await reader.cancel().catch(err => console.error("OpenAIProvider: Error cancelling stream reader:", err));
667
+ }
668
+ // console.log("OpenAIProvider: SSE Stream parsing finished.");
669
+ }
670
+ }
671
+ }
672
+ //# sourceMappingURL=OpenAIProvider.js.map