overai 1.4.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.
- package/README.md +248 -0
- package/dist/agent/context.d.ts +74 -0
- package/dist/agent/context.js +140 -0
- package/dist/agent/enhanced.d.ts +98 -0
- package/dist/agent/enhanced.js +293 -0
- package/dist/agent/handoff.d.ts +82 -0
- package/dist/agent/handoff.js +124 -0
- package/dist/agent/image.d.ts +57 -0
- package/dist/agent/image.js +116 -0
- package/dist/agent/index.d.ts +19 -0
- package/dist/agent/index.js +38 -0
- package/dist/agent/prompt-expander.d.ts +43 -0
- package/dist/agent/prompt-expander.js +99 -0
- package/dist/agent/proxy.d.ts +26 -0
- package/dist/agent/proxy.js +173 -0
- package/dist/agent/query-rewriter.d.ts +41 -0
- package/dist/agent/query-rewriter.js +94 -0
- package/dist/agent/research.d.ts +55 -0
- package/dist/agent/research.js +134 -0
- package/dist/agent/router.d.ts +141 -0
- package/dist/agent/router.js +209 -0
- package/dist/agent/simple.d.ts +289 -0
- package/dist/agent/simple.js +696 -0
- package/dist/agent/types.d.ts +56 -0
- package/dist/agent/types.js +165 -0
- package/dist/ai/agent-loop.d.ts +177 -0
- package/dist/ai/agent-loop.js +313 -0
- package/dist/ai/devtools.d.ts +74 -0
- package/dist/ai/devtools.js +216 -0
- package/dist/ai/embed.d.ts +71 -0
- package/dist/ai/embed.js +154 -0
- package/dist/ai/generate-image.d.ts +66 -0
- package/dist/ai/generate-image.js +138 -0
- package/dist/ai/generate-object.d.ts +132 -0
- package/dist/ai/generate-object.js +206 -0
- package/dist/ai/generate-text.d.ts +201 -0
- package/dist/ai/generate-text.js +253 -0
- package/dist/ai/index.d.ts +27 -0
- package/dist/ai/index.js +140 -0
- package/dist/ai/mcp.d.ts +181 -0
- package/dist/ai/mcp.js +234 -0
- package/dist/ai/middleware.d.ts +110 -0
- package/dist/ai/middleware.js +186 -0
- package/dist/ai/models.d.ts +67 -0
- package/dist/ai/models.js +249 -0
- package/dist/ai/multimodal.d.ts +125 -0
- package/dist/ai/multimodal.js +270 -0
- package/dist/ai/nextjs.d.ts +122 -0
- package/dist/ai/nextjs.js +218 -0
- package/dist/ai/server.d.ts +126 -0
- package/dist/ai/server.js +336 -0
- package/dist/ai/speech.d.ts +135 -0
- package/dist/ai/speech.js +296 -0
- package/dist/ai/telemetry.d.ts +162 -0
- package/dist/ai/telemetry.js +311 -0
- package/dist/ai/tool-approval.d.ts +225 -0
- package/dist/ai/tool-approval.js +407 -0
- package/dist/ai/tools.d.ts +93 -0
- package/dist/ai/tools.js +89 -0
- package/dist/ai/types.d.ts +47 -0
- package/dist/ai/types.js +5 -0
- package/dist/ai/ui-message.d.ts +218 -0
- package/dist/ai/ui-message.js +291 -0
- package/dist/auto/index.d.ts +62 -0
- package/dist/auto/index.js +163 -0
- package/dist/cache/index.d.ts +78 -0
- package/dist/cache/index.js +235 -0
- package/dist/cli/commands/agent.d.ts +30 -0
- package/dist/cli/commands/agent.js +151 -0
- package/dist/cli/commands/agents.d.ts +24 -0
- package/dist/cli/commands/agents.js +166 -0
- package/dist/cli/commands/approval.d.ts +10 -0
- package/dist/cli/commands/approval.js +253 -0
- package/dist/cli/commands/auto.d.ts +12 -0
- package/dist/cli/commands/auto.js +109 -0
- package/dist/cli/commands/autonomy.d.ts +5 -0
- package/dist/cli/commands/autonomy.js +152 -0
- package/dist/cli/commands/benchmark.d.ts +19 -0
- package/dist/cli/commands/benchmark.js +484 -0
- package/dist/cli/commands/cache.d.ts +9 -0
- package/dist/cli/commands/cache.js +143 -0
- package/dist/cli/commands/chat.d.ts +14 -0
- package/dist/cli/commands/chat.js +127 -0
- package/dist/cli/commands/checkpoints.d.ts +5 -0
- package/dist/cli/commands/checkpoints.js +236 -0
- package/dist/cli/commands/context.d.ts +11 -0
- package/dist/cli/commands/context.js +182 -0
- package/dist/cli/commands/cost.d.ts +5 -0
- package/dist/cli/commands/cost.js +146 -0
- package/dist/cli/commands/db.d.ts +9 -0
- package/dist/cli/commands/db.js +149 -0
- package/dist/cli/commands/embed.d.ts +20 -0
- package/dist/cli/commands/embed.js +375 -0
- package/dist/cli/commands/eval.d.ts +17 -0
- package/dist/cli/commands/eval.js +247 -0
- package/dist/cli/commands/external-agents.d.ts +5 -0
- package/dist/cli/commands/external-agents.js +170 -0
- package/dist/cli/commands/fast-context.d.ts +5 -0
- package/dist/cli/commands/fast-context.js +126 -0
- package/dist/cli/commands/flow.d.ts +5 -0
- package/dist/cli/commands/flow.js +141 -0
- package/dist/cli/commands/git.d.ts +5 -0
- package/dist/cli/commands/git.js +178 -0
- package/dist/cli/commands/graph-rag.d.ts +9 -0
- package/dist/cli/commands/graph-rag.js +131 -0
- package/dist/cli/commands/guardrail.d.ts +11 -0
- package/dist/cli/commands/guardrail.js +156 -0
- package/dist/cli/commands/handoff.d.ts +9 -0
- package/dist/cli/commands/handoff.js +133 -0
- package/dist/cli/commands/help.d.ts +8 -0
- package/dist/cli/commands/help.js +139 -0
- package/dist/cli/commands/image.d.ts +13 -0
- package/dist/cli/commands/image.js +192 -0
- package/dist/cli/commands/interactive.d.ts +6 -0
- package/dist/cli/commands/interactive.js +79 -0
- package/dist/cli/commands/jobs.d.ts +5 -0
- package/dist/cli/commands/jobs.js +282 -0
- package/dist/cli/commands/knowledge.d.ts +9 -0
- package/dist/cli/commands/knowledge.js +226 -0
- package/dist/cli/commands/llm.d.ts +21 -0
- package/dist/cli/commands/llm.js +748 -0
- package/dist/cli/commands/mcp.d.ts +9 -0
- package/dist/cli/commands/mcp.js +243 -0
- package/dist/cli/commands/memory.d.ts +10 -0
- package/dist/cli/commands/memory.js +198 -0
- package/dist/cli/commands/n8n.d.ts +5 -0
- package/dist/cli/commands/n8n.js +137 -0
- package/dist/cli/commands/observability.d.ts +16 -0
- package/dist/cli/commands/observability.js +335 -0
- package/dist/cli/commands/planning.d.ts +9 -0
- package/dist/cli/commands/planning.js +167 -0
- package/dist/cli/commands/prompt-expand.d.ts +11 -0
- package/dist/cli/commands/prompt-expand.js +100 -0
- package/dist/cli/commands/providers.d.ts +17 -0
- package/dist/cli/commands/providers.js +386 -0
- package/dist/cli/commands/query-rewrite.d.ts +12 -0
- package/dist/cli/commands/query-rewrite.js +102 -0
- package/dist/cli/commands/repo-map.d.ts +5 -0
- package/dist/cli/commands/repo-map.js +151 -0
- package/dist/cli/commands/reranker.d.ts +10 -0
- package/dist/cli/commands/reranker.js +144 -0
- package/dist/cli/commands/research.d.ts +12 -0
- package/dist/cli/commands/research.js +108 -0
- package/dist/cli/commands/router.d.ts +11 -0
- package/dist/cli/commands/router.js +142 -0
- package/dist/cli/commands/run.d.ts +14 -0
- package/dist/cli/commands/run.js +111 -0
- package/dist/cli/commands/sandbox.d.ts +5 -0
- package/dist/cli/commands/sandbox.js +135 -0
- package/dist/cli/commands/scheduler.d.ts +5 -0
- package/dist/cli/commands/scheduler.js +260 -0
- package/dist/cli/commands/session.d.ts +9 -0
- package/dist/cli/commands/session.js +238 -0
- package/dist/cli/commands/skills.d.ts +9 -0
- package/dist/cli/commands/skills.js +256 -0
- package/dist/cli/commands/telemetry.d.ts +9 -0
- package/dist/cli/commands/telemetry.js +146 -0
- package/dist/cli/commands/tools.d.ts +19 -0
- package/dist/cli/commands/tools.js +576 -0
- package/dist/cli/commands/vector.d.ts +10 -0
- package/dist/cli/commands/vector.js +171 -0
- package/dist/cli/commands/version.d.ts +8 -0
- package/dist/cli/commands/version.js +40 -0
- package/dist/cli/commands/voice.d.ts +10 -0
- package/dist/cli/commands/voice.js +162 -0
- package/dist/cli/commands/workflow.d.ts +13 -0
- package/dist/cli/commands/workflow.js +184 -0
- package/dist/cli/config/index.d.ts +6 -0
- package/dist/cli/config/index.js +22 -0
- package/dist/cli/config/load.d.ts +20 -0
- package/dist/cli/config/load.js +229 -0
- package/dist/cli/config/resolve.d.ts +28 -0
- package/dist/cli/config/resolve.js +70 -0
- package/dist/cli/config/schema.d.ts +15 -0
- package/dist/cli/config/schema.js +65 -0
- package/dist/cli/features/autonomy-mode.d.ts +98 -0
- package/dist/cli/features/autonomy-mode.js +266 -0
- package/dist/cli/features/background-jobs.d.ts +155 -0
- package/dist/cli/features/background-jobs.js +416 -0
- package/dist/cli/features/checkpoints.d.ts +126 -0
- package/dist/cli/features/checkpoints.js +288 -0
- package/dist/cli/features/cost-tracker.d.ts +101 -0
- package/dist/cli/features/cost-tracker.js +212 -0
- package/dist/cli/features/external-agents.d.ts +117 -0
- package/dist/cli/features/external-agents.js +296 -0
- package/dist/cli/features/fast-context.d.ts +126 -0
- package/dist/cli/features/fast-context.js +310 -0
- package/dist/cli/features/flow-display.d.ts +100 -0
- package/dist/cli/features/flow-display.js +254 -0
- package/dist/cli/features/git-integration.d.ts +138 -0
- package/dist/cli/features/git-integration.js +374 -0
- package/dist/cli/features/index.d.ts +17 -0
- package/dist/cli/features/index.js +102 -0
- package/dist/cli/features/interactive-tui.d.ts +114 -0
- package/dist/cli/features/interactive-tui.js +326 -0
- package/dist/cli/features/n8n-integration.d.ts +111 -0
- package/dist/cli/features/n8n-integration.js +299 -0
- package/dist/cli/features/repo-map.d.ts +101 -0
- package/dist/cli/features/repo-map.js +350 -0
- package/dist/cli/features/sandbox-executor.d.ts +89 -0
- package/dist/cli/features/sandbox-executor.js +314 -0
- package/dist/cli/features/scheduler.d.ts +111 -0
- package/dist/cli/features/scheduler.js +298 -0
- package/dist/cli/features/slash-commands.d.ts +77 -0
- package/dist/cli/features/slash-commands.js +316 -0
- package/dist/cli/index.d.ts +24 -0
- package/dist/cli/index.js +214 -0
- package/dist/cli/output/errors.d.ts +23 -0
- package/dist/cli/output/errors.js +36 -0
- package/dist/cli/output/json.d.ts +27 -0
- package/dist/cli/output/json.js +31 -0
- package/dist/cli/output/pretty.d.ts +13 -0
- package/dist/cli/output/pretty.js +31 -0
- package/dist/cli/runtime/env.d.ts +12 -0
- package/dist/cli/runtime/env.js +55 -0
- package/dist/cli/runtime/exit.d.ts +11 -0
- package/dist/cli/runtime/exit.js +49 -0
- package/dist/cli/runtime/index.d.ts +6 -0
- package/dist/cli/runtime/index.js +22 -0
- package/dist/cli/runtime/lazy.d.ts +18 -0
- package/dist/cli/runtime/lazy.js +85 -0
- package/dist/cli/spec/cli-spec.d.ts +87 -0
- package/dist/cli/spec/cli-spec.js +551 -0
- package/dist/cli/spec/index.d.ts +4 -0
- package/dist/cli/spec/index.js +20 -0
- package/dist/db/index.d.ts +6 -0
- package/dist/db/index.js +75 -0
- package/dist/db/types.d.ts +42 -0
- package/dist/db/types.js +2 -0
- package/dist/eval/index.d.ts +61 -0
- package/dist/eval/index.js +157 -0
- package/dist/events/index.d.ts +84 -0
- package/dist/events/index.js +153 -0
- package/dist/guardrails/index.d.ts +82 -0
- package/dist/guardrails/index.js +202 -0
- package/dist/guardrails/llm-guardrail.d.ts +46 -0
- package/dist/guardrails/llm-guardrail.js +112 -0
- package/dist/index.d.ts +92 -0
- package/dist/index.js +608 -0
- package/dist/integrations/computer-use.d.ts +182 -0
- package/dist/integrations/computer-use.js +356 -0
- package/dist/integrations/index.d.ts +7 -0
- package/dist/integrations/index.js +26 -0
- package/dist/integrations/observability/base.d.ts +123 -0
- package/dist/integrations/observability/base.js +183 -0
- package/dist/integrations/observability/index.d.ts +8 -0
- package/dist/integrations/observability/index.js +29 -0
- package/dist/integrations/observability/langfuse.d.ts +32 -0
- package/dist/integrations/observability/langfuse.js +174 -0
- package/dist/integrations/postgres.d.ts +162 -0
- package/dist/integrations/postgres.js +396 -0
- package/dist/integrations/slack.d.ts +145 -0
- package/dist/integrations/slack.js +270 -0
- package/dist/integrations/vector/base.d.ts +110 -0
- package/dist/integrations/vector/base.js +158 -0
- package/dist/integrations/vector/chroma.d.ts +25 -0
- package/dist/integrations/vector/chroma.js +143 -0
- package/dist/integrations/vector/index.d.ts +14 -0
- package/dist/integrations/vector/index.js +37 -0
- package/dist/integrations/vector/pinecone.d.ts +28 -0
- package/dist/integrations/vector/pinecone.js +172 -0
- package/dist/integrations/vector/qdrant.d.ts +25 -0
- package/dist/integrations/vector/qdrant.js +146 -0
- package/dist/integrations/vector/weaviate.d.ts +30 -0
- package/dist/integrations/vector/weaviate.js +206 -0
- package/dist/integrations/voice/base.d.ts +76 -0
- package/dist/integrations/voice/base.js +168 -0
- package/dist/integrations/voice/index.d.ts +6 -0
- package/dist/integrations/voice/index.js +26 -0
- package/dist/knowledge/chunking.d.ts +55 -0
- package/dist/knowledge/chunking.js +158 -0
- package/dist/knowledge/graph-rag.d.ts +125 -0
- package/dist/knowledge/graph-rag.js +289 -0
- package/dist/knowledge/index.d.ts +24 -0
- package/dist/knowledge/index.js +47 -0
- package/dist/knowledge/knowledge.d.ts +0 -0
- package/dist/knowledge/knowledge.js +1 -0
- package/dist/knowledge/rag.d.ts +80 -0
- package/dist/knowledge/rag.js +147 -0
- package/dist/knowledge/reranker.d.ts +86 -0
- package/dist/knowledge/reranker.js +196 -0
- package/dist/llm/backend-resolver.d.ts +77 -0
- package/dist/llm/backend-resolver.js +242 -0
- package/dist/llm/embeddings.d.ts +66 -0
- package/dist/llm/embeddings.js +294 -0
- package/dist/llm/index.d.ts +29 -0
- package/dist/llm/index.js +33 -0
- package/dist/llm/llm.d.ts +0 -0
- package/dist/llm/llm.js +1 -0
- package/dist/llm/openai.d.ts +39 -0
- package/dist/llm/openai.js +302 -0
- package/dist/llm/providers/ai-sdk/adapter.d.ts +121 -0
- package/dist/llm/providers/ai-sdk/adapter.js +399 -0
- package/dist/llm/providers/ai-sdk/backend.d.ts +49 -0
- package/dist/llm/providers/ai-sdk/backend.js +421 -0
- package/dist/llm/providers/ai-sdk/index.d.ts +69 -0
- package/dist/llm/providers/ai-sdk/index.js +200 -0
- package/dist/llm/providers/ai-sdk/middleware.d.ts +60 -0
- package/dist/llm/providers/ai-sdk/middleware.js +262 -0
- package/dist/llm/providers/ai-sdk/provider-map.d.ts +75 -0
- package/dist/llm/providers/ai-sdk/provider-map.js +258 -0
- package/dist/llm/providers/ai-sdk/types.d.ts +217 -0
- package/dist/llm/providers/ai-sdk/types.js +222 -0
- package/dist/llm/providers/anthropic.d.ts +33 -0
- package/dist/llm/providers/anthropic.js +291 -0
- package/dist/llm/providers/base.d.ts +25 -0
- package/dist/llm/providers/base.js +43 -0
- package/dist/llm/providers/google.d.ts +27 -0
- package/dist/llm/providers/google.js +275 -0
- package/dist/llm/providers/index.d.ts +107 -0
- package/dist/llm/providers/index.js +216 -0
- package/dist/llm/providers/openai.d.ts +18 -0
- package/dist/llm/providers/openai.js +203 -0
- package/dist/llm/providers/registry.d.ts +159 -0
- package/dist/llm/providers/registry.js +279 -0
- package/dist/llm/providers/types.d.ts +94 -0
- package/dist/llm/providers/types.js +5 -0
- package/dist/main.d.ts +0 -0
- package/dist/main.js +1 -0
- package/dist/memory/auto-memory.d.ts +136 -0
- package/dist/memory/auto-memory.js +301 -0
- package/dist/memory/file-memory.d.ts +88 -0
- package/dist/memory/file-memory.js +287 -0
- package/dist/memory/index.d.ts +26 -0
- package/dist/memory/index.js +41 -0
- package/dist/memory/memory.d.ts +92 -0
- package/dist/memory/memory.js +170 -0
- package/dist/observability/adapters/console.d.ts +33 -0
- package/dist/observability/adapters/console.js +71 -0
- package/dist/observability/adapters/external/arize.d.ts +20 -0
- package/dist/observability/adapters/external/arize.js +22 -0
- package/dist/observability/adapters/external/axiom.d.ts +20 -0
- package/dist/observability/adapters/external/axiom.js +22 -0
- package/dist/observability/adapters/external/braintrust.d.ts +20 -0
- package/dist/observability/adapters/external/braintrust.js +22 -0
- package/dist/observability/adapters/external/helicone.d.ts +20 -0
- package/dist/observability/adapters/external/helicone.js +22 -0
- package/dist/observability/adapters/external/laminar.d.ts +20 -0
- package/dist/observability/adapters/external/laminar.js +22 -0
- package/dist/observability/adapters/external/langfuse.d.ts +28 -0
- package/dist/observability/adapters/external/langfuse.js +186 -0
- package/dist/observability/adapters/external/langsmith.d.ts +21 -0
- package/dist/observability/adapters/external/langsmith.js +83 -0
- package/dist/observability/adapters/external/langwatch.d.ts +20 -0
- package/dist/observability/adapters/external/langwatch.js +22 -0
- package/dist/observability/adapters/external/maxim.d.ts +20 -0
- package/dist/observability/adapters/external/maxim.js +22 -0
- package/dist/observability/adapters/external/patronus.d.ts +20 -0
- package/dist/observability/adapters/external/patronus.js +22 -0
- package/dist/observability/adapters/external/scorecard.d.ts +20 -0
- package/dist/observability/adapters/external/scorecard.js +22 -0
- package/dist/observability/adapters/external/signoz.d.ts +20 -0
- package/dist/observability/adapters/external/signoz.js +22 -0
- package/dist/observability/adapters/external/traceloop.d.ts +20 -0
- package/dist/observability/adapters/external/traceloop.js +22 -0
- package/dist/observability/adapters/external/weave.d.ts +20 -0
- package/dist/observability/adapters/external/weave.js +22 -0
- package/dist/observability/adapters/index.d.ts +19 -0
- package/dist/observability/adapters/index.js +289 -0
- package/dist/observability/adapters/memory.d.ts +41 -0
- package/dist/observability/adapters/memory.js +190 -0
- package/dist/observability/adapters/noop.d.ts +25 -0
- package/dist/observability/adapters/noop.js +64 -0
- package/dist/observability/index.d.ts +47 -0
- package/dist/observability/index.js +115 -0
- package/dist/observability/types.d.ts +165 -0
- package/dist/observability/types.js +165 -0
- package/dist/planning/index.d.ts +253 -0
- package/dist/planning/index.js +475 -0
- package/dist/process/index.d.ts +25 -0
- package/dist/process/index.js +37 -0
- package/dist/process/process.d.ts +0 -0
- package/dist/process/process.js +1 -0
- package/dist/session/index.d.ts +111 -0
- package/dist/session/index.js +250 -0
- package/dist/skills/index.d.ts +70 -0
- package/dist/skills/index.js +233 -0
- package/dist/task/index.d.ts +25 -0
- package/dist/task/index.js +32 -0
- package/dist/task/task.d.ts +0 -0
- package/dist/task/task.js +1 -0
- package/dist/telemetry/index.d.ts +175 -0
- package/dist/telemetry/index.js +287 -0
- package/dist/tools/arxivTools.d.ts +32 -0
- package/dist/tools/arxivTools.js +81 -0
- package/dist/tools/base.d.ts +97 -0
- package/dist/tools/base.js +147 -0
- package/dist/tools/builtins/airweave.d.ts +32 -0
- package/dist/tools/builtins/airweave.js +119 -0
- package/dist/tools/builtins/bedrock-agentcore.d.ts +62 -0
- package/dist/tools/builtins/bedrock-agentcore.js +233 -0
- package/dist/tools/builtins/code-execution.d.ts +36 -0
- package/dist/tools/builtins/code-execution.js +136 -0
- package/dist/tools/builtins/code-mode.d.ts +54 -0
- package/dist/tools/builtins/code-mode.js +167 -0
- package/dist/tools/builtins/custom.d.ts +42 -0
- package/dist/tools/builtins/custom.js +195 -0
- package/dist/tools/builtins/exa.d.ts +53 -0
- package/dist/tools/builtins/exa.js +112 -0
- package/dist/tools/builtins/firecrawl.d.ts +56 -0
- package/dist/tools/builtins/firecrawl.js +158 -0
- package/dist/tools/builtins/index.d.ts +45 -0
- package/dist/tools/builtins/index.js +180 -0
- package/dist/tools/builtins/parallel.d.ts +30 -0
- package/dist/tools/builtins/parallel.js +113 -0
- package/dist/tools/builtins/perplexity.d.ts +32 -0
- package/dist/tools/builtins/perplexity.js +113 -0
- package/dist/tools/builtins/superagent.d.ts +66 -0
- package/dist/tools/builtins/superagent.js +187 -0
- package/dist/tools/builtins/tavily.d.ts +99 -0
- package/dist/tools/builtins/tavily.js +285 -0
- package/dist/tools/builtins/valyu.d.ts +65 -0
- package/dist/tools/builtins/valyu.js +193 -0
- package/dist/tools/decorator.d.ts +91 -0
- package/dist/tools/decorator.js +165 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.js +36 -0
- package/dist/tools/mcpSse.d.ts +43 -0
- package/dist/tools/mcpSse.js +110 -0
- package/dist/tools/registry/index.d.ts +9 -0
- package/dist/tools/registry/index.js +28 -0
- package/dist/tools/registry/middleware.d.ts +43 -0
- package/dist/tools/registry/middleware.js +220 -0
- package/dist/tools/registry/registry.d.ts +92 -0
- package/dist/tools/registry/registry.js +280 -0
- package/dist/tools/registry/types.d.ts +217 -0
- package/dist/tools/registry/types.js +49 -0
- package/dist/tools/test.d.ts +0 -0
- package/dist/tools/test.js +1 -0
- package/dist/tools/tools.d.ts +74 -0
- package/dist/tools/tools.js +133 -0
- package/dist/utils/logger.d.ts +25 -0
- package/dist/utils/logger.js +149 -0
- package/dist/utils/pretty-logger.d.ts +21 -0
- package/dist/utils/pretty-logger.js +248 -0
- package/dist/workflows/index.d.ts +118 -0
- package/dist/workflows/index.js +247 -0
- package/dist/workflows/loop.d.ts +0 -0
- package/dist/workflows/loop.js +1 -0
- package/dist/workflows/yaml-parser.d.ts +48 -0
- package/dist/workflows/yaml-parser.js +304 -0
- package/package.json +119 -0
|
@@ -0,0 +1,748 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LLM Command - AI SDK provider management and testing
|
|
4
|
+
*
|
|
5
|
+
* Subcommands:
|
|
6
|
+
* - providers: List available AI SDK providers
|
|
7
|
+
* - test: Test connectivity to a provider
|
|
8
|
+
* - validate: Validate provider configuration
|
|
9
|
+
* - run: Run a prompt with a specific model
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.execute = execute;
|
|
46
|
+
const pretty_logger_1 = require("../../utils/pretty-logger");
|
|
47
|
+
function outputJson(data) {
|
|
48
|
+
console.log(JSON.stringify(data, null, 2));
|
|
49
|
+
}
|
|
50
|
+
function formatSuccess(data) {
|
|
51
|
+
return { success: true, data };
|
|
52
|
+
}
|
|
53
|
+
function formatError(code, message) {
|
|
54
|
+
return { success: false, error: { code, message } };
|
|
55
|
+
}
|
|
56
|
+
const ERROR_CODES = {
|
|
57
|
+
INVALID_ARGS: 'INVALID_ARGS',
|
|
58
|
+
MISSING_ARG: 'MISSING_ARG',
|
|
59
|
+
};
|
|
60
|
+
// Exit codes specific to LLM commands
|
|
61
|
+
const LLM_EXIT_CODES = {
|
|
62
|
+
SUCCESS: 0,
|
|
63
|
+
GENERAL_ERROR: 1,
|
|
64
|
+
INVALID_ARGS: 2,
|
|
65
|
+
AUTH_ERROR: 3,
|
|
66
|
+
PROVIDER_NOT_FOUND: 4,
|
|
67
|
+
NETWORK_ERROR: 5,
|
|
68
|
+
TIMEOUT: 6,
|
|
69
|
+
};
|
|
70
|
+
async function execute(args, options) {
|
|
71
|
+
const subcommand = args[0] || 'providers';
|
|
72
|
+
const outputFormat = options.json ? 'json' : (options.output || 'pretty');
|
|
73
|
+
switch (subcommand) {
|
|
74
|
+
case 'providers':
|
|
75
|
+
await providersCommand(args.slice(1), options, outputFormat);
|
|
76
|
+
break;
|
|
77
|
+
case 'test':
|
|
78
|
+
await testCommand(args.slice(1), options, outputFormat);
|
|
79
|
+
break;
|
|
80
|
+
case 'validate':
|
|
81
|
+
await validateCommand(args.slice(1), options, outputFormat);
|
|
82
|
+
break;
|
|
83
|
+
case 'run':
|
|
84
|
+
await runCommand(args.slice(1), options, outputFormat);
|
|
85
|
+
break;
|
|
86
|
+
case 'models':
|
|
87
|
+
await modelsCommand(args.slice(1), options, outputFormat);
|
|
88
|
+
break;
|
|
89
|
+
case 'config':
|
|
90
|
+
await configCommand(args.slice(1), options, outputFormat);
|
|
91
|
+
break;
|
|
92
|
+
case 'trace':
|
|
93
|
+
await traceCommand(args.slice(1), options, outputFormat);
|
|
94
|
+
break;
|
|
95
|
+
case 'tools':
|
|
96
|
+
await toolsCommand(args.slice(1), options, outputFormat);
|
|
97
|
+
break;
|
|
98
|
+
case 'json':
|
|
99
|
+
await jsonCommand(args.slice(1), options, outputFormat);
|
|
100
|
+
break;
|
|
101
|
+
default:
|
|
102
|
+
if (outputFormat === 'json') {
|
|
103
|
+
outputJson(formatError(ERROR_CODES.INVALID_ARGS, `Unknown subcommand: ${subcommand}`));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
await pretty_logger_1.PrettyLogger.error(`Unknown subcommand: ${subcommand}`);
|
|
107
|
+
await pretty_logger_1.PrettyLogger.info('Available subcommands: providers, test, validate, run, models, config, trace, tools, json');
|
|
108
|
+
}
|
|
109
|
+
process.exit(LLM_EXIT_CODES.INVALID_ARGS);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* List available AI SDK providers
|
|
114
|
+
*/
|
|
115
|
+
async function providersCommand(args, options, outputFormat) {
|
|
116
|
+
try {
|
|
117
|
+
const { listSupportedProviders, AISDK_PROVIDERS, validateProviderApiKey, isAISDKAvailable, getAISDKVersion } = await Promise.resolve().then(() => __importStar(require('../../llm/providers/ai-sdk')));
|
|
118
|
+
const providers = listSupportedProviders();
|
|
119
|
+
const aiSdkAvailable = await isAISDKAvailable();
|
|
120
|
+
const aiSdkVersion = await getAISDKVersion();
|
|
121
|
+
const providerDetails = providers.map((id) => {
|
|
122
|
+
const info = AISDK_PROVIDERS[id];
|
|
123
|
+
const hasApiKey = validateProviderApiKey(id);
|
|
124
|
+
return {
|
|
125
|
+
id,
|
|
126
|
+
package: info?.package || 'custom',
|
|
127
|
+
envKey: info?.envKey || 'N/A',
|
|
128
|
+
hasApiKey,
|
|
129
|
+
status: hasApiKey ? 'ready' : 'missing_key'
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
if (outputFormat === 'json') {
|
|
133
|
+
outputJson(formatSuccess({
|
|
134
|
+
ai_sdk_available: aiSdkAvailable,
|
|
135
|
+
ai_sdk_version: aiSdkVersion,
|
|
136
|
+
providers: providerDetails,
|
|
137
|
+
total: providers.length
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
await pretty_logger_1.PrettyLogger.heading('AI SDK Providers');
|
|
142
|
+
if (aiSdkAvailable) {
|
|
143
|
+
await pretty_logger_1.PrettyLogger.success(`AI SDK: ${aiSdkVersion || 'installed'}`);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
await pretty_logger_1.PrettyLogger.warning('AI SDK not installed. Run: npm install ai');
|
|
147
|
+
}
|
|
148
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
149
|
+
await pretty_logger_1.PrettyLogger.plain(' Available Providers:');
|
|
150
|
+
for (const p of providerDetails) {
|
|
151
|
+
const status = p.hasApiKey ? '✅' : '⚠️';
|
|
152
|
+
const keyInfo = p.hasApiKey ? '🔑' : `Missing ${p.envKey}`;
|
|
153
|
+
await pretty_logger_1.PrettyLogger.plain(` ${status} ${p.id.padEnd(20)} ${keyInfo}`);
|
|
154
|
+
if (options.verbose) {
|
|
155
|
+
await pretty_logger_1.PrettyLogger.dim(` Package: ${p.package}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
159
|
+
await pretty_logger_1.PrettyLogger.info('Set API keys via environment variables');
|
|
160
|
+
await pretty_logger_1.PrettyLogger.dim(' Example: export OPENAI_API_KEY=sk-...');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
handleError(error, outputFormat, 'Failed to list providers');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Test connectivity to a provider
|
|
169
|
+
*/
|
|
170
|
+
async function testCommand(args, options, outputFormat) {
|
|
171
|
+
const providerId = args[0] || options.provider;
|
|
172
|
+
if (!providerId) {
|
|
173
|
+
if (outputFormat === 'json') {
|
|
174
|
+
outputJson(formatError(ERROR_CODES.MISSING_ARG, 'Provider ID required'));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
await pretty_logger_1.PrettyLogger.error('Provider ID required. Usage: llm test <provider>');
|
|
178
|
+
await pretty_logger_1.PrettyLogger.dim(' Example: praisonai-ts llm test openai');
|
|
179
|
+
}
|
|
180
|
+
process.exit(LLM_EXIT_CODES.INVALID_ARGS);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
const { createAISDKBackend, validateProviderApiKey, getMissingApiKeyMessage, isProviderSupported } = await Promise.resolve().then(() => __importStar(require('../../llm/providers/ai-sdk')));
|
|
185
|
+
// Check if provider is supported
|
|
186
|
+
if (!isProviderSupported(providerId)) {
|
|
187
|
+
if (outputFormat === 'json') {
|
|
188
|
+
outputJson(formatError('PROVIDER_NOT_FOUND', `Provider '${providerId}' is not supported`));
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
await pretty_logger_1.PrettyLogger.error(`Provider '${providerId}' is not supported`);
|
|
192
|
+
}
|
|
193
|
+
process.exit(LLM_EXIT_CODES.PROVIDER_NOT_FOUND);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Check API key
|
|
197
|
+
if (!validateProviderApiKey(providerId)) {
|
|
198
|
+
const msg = getMissingApiKeyMessage(providerId);
|
|
199
|
+
if (outputFormat === 'json') {
|
|
200
|
+
outputJson(formatError('AUTH_ERROR', msg));
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
await pretty_logger_1.PrettyLogger.error(msg);
|
|
204
|
+
}
|
|
205
|
+
process.exit(LLM_EXIT_CODES.AUTH_ERROR);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// Determine test model based on provider
|
|
209
|
+
const testModels = {
|
|
210
|
+
openai: 'gpt-4o-mini',
|
|
211
|
+
anthropic: 'claude-3-haiku-20240307',
|
|
212
|
+
google: 'gemini-1.5-flash',
|
|
213
|
+
groq: 'llama-3.1-8b-instant',
|
|
214
|
+
mistral: 'mistral-small-latest',
|
|
215
|
+
cohere: 'command-light',
|
|
216
|
+
deepseek: 'deepseek-chat',
|
|
217
|
+
};
|
|
218
|
+
const modelId = options.model || testModels[providerId] || 'default';
|
|
219
|
+
const modelString = `${providerId}/${modelId}`;
|
|
220
|
+
if (outputFormat !== 'json') {
|
|
221
|
+
await pretty_logger_1.PrettyLogger.info(`Testing ${modelString}...`);
|
|
222
|
+
}
|
|
223
|
+
const startTime = Date.now();
|
|
224
|
+
const backend = createAISDKBackend(modelString, {
|
|
225
|
+
timeout: options.timeout || 30000,
|
|
226
|
+
maxRetries: 0, // No retries for test
|
|
227
|
+
});
|
|
228
|
+
const result = await backend.generateText({
|
|
229
|
+
messages: [
|
|
230
|
+
{ role: 'user', content: 'Say "OK" and nothing else.' }
|
|
231
|
+
],
|
|
232
|
+
maxTokens: 10,
|
|
233
|
+
temperature: 0,
|
|
234
|
+
});
|
|
235
|
+
const duration = Date.now() - startTime;
|
|
236
|
+
if (outputFormat === 'json') {
|
|
237
|
+
outputJson(formatSuccess({
|
|
238
|
+
provider: providerId,
|
|
239
|
+
model: modelId,
|
|
240
|
+
status: 'success',
|
|
241
|
+
duration_ms: duration,
|
|
242
|
+
response: result.text,
|
|
243
|
+
usage: result.usage
|
|
244
|
+
}));
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
await pretty_logger_1.PrettyLogger.success(`Connection successful! (${duration}ms)`);
|
|
248
|
+
await pretty_logger_1.PrettyLogger.plain(` Provider: ${providerId}`);
|
|
249
|
+
await pretty_logger_1.PrettyLogger.plain(` Model: ${modelId}`);
|
|
250
|
+
await pretty_logger_1.PrettyLogger.plain(` Response: ${result.text.trim()}`);
|
|
251
|
+
if (result.usage) {
|
|
252
|
+
await pretty_logger_1.PrettyLogger.dim(` Tokens: ${result.usage.totalTokens}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
handleError(error, outputFormat, `Failed to test provider '${providerId}'`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Validate provider configuration
|
|
262
|
+
*/
|
|
263
|
+
async function validateCommand(args, options, outputFormat) {
|
|
264
|
+
const providerId = args[0] || options.provider;
|
|
265
|
+
if (!providerId) {
|
|
266
|
+
if (outputFormat === 'json') {
|
|
267
|
+
outputJson(formatError(ERROR_CODES.MISSING_ARG, 'Provider ID required'));
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
await pretty_logger_1.PrettyLogger.error('Provider ID required. Usage: llm validate --provider <id>');
|
|
271
|
+
}
|
|
272
|
+
process.exit(LLM_EXIT_CODES.INVALID_ARGS);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
const { isProviderSupported, validateProviderApiKey, getProviderEnvKey, getProviderPackage, isAISDKAvailable } = await Promise.resolve().then(() => __importStar(require('../../llm/providers/ai-sdk')));
|
|
277
|
+
const checks = [];
|
|
278
|
+
// Check AI SDK availability
|
|
279
|
+
const aiSdkAvailable = await isAISDKAvailable();
|
|
280
|
+
checks.push({
|
|
281
|
+
name: 'AI SDK Installed',
|
|
282
|
+
passed: aiSdkAvailable,
|
|
283
|
+
message: aiSdkAvailable ? 'AI SDK is installed' : 'AI SDK not found. Run: npm install ai'
|
|
284
|
+
});
|
|
285
|
+
// Check provider support
|
|
286
|
+
const isSupported = isProviderSupported(providerId);
|
|
287
|
+
checks.push({
|
|
288
|
+
name: 'Provider Supported',
|
|
289
|
+
passed: isSupported,
|
|
290
|
+
message: isSupported ? `Provider '${providerId}' is supported` : `Provider '${providerId}' is not supported`
|
|
291
|
+
});
|
|
292
|
+
if (isSupported) {
|
|
293
|
+
// Check provider package
|
|
294
|
+
const pkg = getProviderPackage(providerId);
|
|
295
|
+
if (pkg) {
|
|
296
|
+
let pkgInstalled = false;
|
|
297
|
+
try {
|
|
298
|
+
require.resolve(pkg);
|
|
299
|
+
pkgInstalled = true;
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
pkgInstalled = false;
|
|
303
|
+
}
|
|
304
|
+
checks.push({
|
|
305
|
+
name: 'Provider Package',
|
|
306
|
+
passed: pkgInstalled,
|
|
307
|
+
message: pkgInstalled ? `${pkg} is installed` : `${pkg} not found. Run: npm install ${pkg}`
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
// Check API key
|
|
311
|
+
const hasApiKey = validateProviderApiKey(providerId);
|
|
312
|
+
const envKey = getProviderEnvKey(providerId);
|
|
313
|
+
checks.push({
|
|
314
|
+
name: 'API Key',
|
|
315
|
+
passed: hasApiKey,
|
|
316
|
+
message: hasApiKey
|
|
317
|
+
? `${envKey} is set`
|
|
318
|
+
: `${envKey} is not set`
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
const allPassed = checks.every(c => c.passed);
|
|
322
|
+
if (outputFormat === 'json') {
|
|
323
|
+
outputJson(formatSuccess({
|
|
324
|
+
provider: providerId,
|
|
325
|
+
valid: allPassed,
|
|
326
|
+
checks
|
|
327
|
+
}));
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
await pretty_logger_1.PrettyLogger.heading(`Validation: ${providerId}`);
|
|
331
|
+
for (const check of checks) {
|
|
332
|
+
const icon = check.passed ? '✅' : '❌';
|
|
333
|
+
await pretty_logger_1.PrettyLogger.plain(` ${icon} ${check.name}: ${check.message}`);
|
|
334
|
+
}
|
|
335
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
336
|
+
if (allPassed) {
|
|
337
|
+
await pretty_logger_1.PrettyLogger.success('All checks passed!');
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
await pretty_logger_1.PrettyLogger.warning('Some checks failed. Fix the issues above.');
|
|
341
|
+
process.exit(LLM_EXIT_CODES.GENERAL_ERROR);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
handleError(error, outputFormat, `Failed to validate provider '${providerId}'`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Run a prompt with a specific model
|
|
351
|
+
*/
|
|
352
|
+
async function runCommand(args, options, outputFormat) {
|
|
353
|
+
const prompt = args.join(' ');
|
|
354
|
+
if (!prompt) {
|
|
355
|
+
if (outputFormat === 'json') {
|
|
356
|
+
outputJson(formatError(ERROR_CODES.MISSING_ARG, 'Prompt required'));
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
await pretty_logger_1.PrettyLogger.error('Prompt required. Usage: llm run "<prompt>" --model <provider/model>');
|
|
360
|
+
await pretty_logger_1.PrettyLogger.dim(' Example: overai llm run "Hello!" --model openai/gpt-4o-mini');
|
|
361
|
+
}
|
|
362
|
+
process.exit(LLM_EXIT_CODES.INVALID_ARGS);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
const modelString = options.model || 'openai/gpt-4o-mini';
|
|
366
|
+
try {
|
|
367
|
+
const { createAISDKBackend } = await Promise.resolve().then(() => __importStar(require('../../llm/providers/ai-sdk')));
|
|
368
|
+
const backend = createAISDKBackend(modelString, {
|
|
369
|
+
timeout: options.timeout || 60000,
|
|
370
|
+
});
|
|
371
|
+
if (options.stream) {
|
|
372
|
+
// Streaming mode
|
|
373
|
+
if (outputFormat === 'json') {
|
|
374
|
+
// JSON streaming - output each chunk as JSON line
|
|
375
|
+
const stream = await backend.streamText({
|
|
376
|
+
messages: [{ role: 'user', content: prompt }],
|
|
377
|
+
});
|
|
378
|
+
process.stdout.write('{"type":"stream_start"}\n');
|
|
379
|
+
let fullText = '';
|
|
380
|
+
for await (const chunk of stream) {
|
|
381
|
+
if (chunk.text) {
|
|
382
|
+
fullText += chunk.text;
|
|
383
|
+
process.stdout.write(JSON.stringify({ type: 'text', text: chunk.text }) + '\n');
|
|
384
|
+
}
|
|
385
|
+
if (chunk.finishReason) {
|
|
386
|
+
process.stdout.write(JSON.stringify({
|
|
387
|
+
type: 'finish',
|
|
388
|
+
finishReason: chunk.finishReason,
|
|
389
|
+
usage: chunk.usage
|
|
390
|
+
}) + '\n');
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
process.stdout.write(JSON.stringify({ type: 'stream_end', fullText }) + '\n');
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
// Pretty streaming - output text directly
|
|
397
|
+
const stream = await backend.streamText({
|
|
398
|
+
messages: [{ role: 'user', content: prompt }],
|
|
399
|
+
});
|
|
400
|
+
for await (const chunk of stream) {
|
|
401
|
+
if (chunk.text) {
|
|
402
|
+
process.stdout.write(chunk.text);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
process.stdout.write('\n');
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
// Non-streaming mode
|
|
410
|
+
const startTime = Date.now();
|
|
411
|
+
const result = await backend.generateText({
|
|
412
|
+
messages: [{ role: 'user', content: prompt }],
|
|
413
|
+
});
|
|
414
|
+
const duration = Date.now() - startTime;
|
|
415
|
+
if (outputFormat === 'json') {
|
|
416
|
+
outputJson(formatSuccess({
|
|
417
|
+
model: modelString,
|
|
418
|
+
text: result.text,
|
|
419
|
+
usage: result.usage,
|
|
420
|
+
finishReason: result.finishReason,
|
|
421
|
+
duration_ms: duration
|
|
422
|
+
}));
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
await pretty_logger_1.PrettyLogger.plain(result.text);
|
|
426
|
+
if (options.verbose) {
|
|
427
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
428
|
+
await pretty_logger_1.PrettyLogger.dim(`Model: ${modelString}`);
|
|
429
|
+
await pretty_logger_1.PrettyLogger.dim(`Duration: ${duration}ms`);
|
|
430
|
+
if (result.usage) {
|
|
431
|
+
await pretty_logger_1.PrettyLogger.dim(`Tokens: ${result.usage.totalTokens} (prompt: ${result.usage.promptTokens}, completion: ${result.usage.completionTokens})`);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
handleError(error, outputFormat, `Failed to run prompt with model '${modelString}'`);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Handle errors with proper exit codes and formatting
|
|
443
|
+
*/
|
|
444
|
+
/**
|
|
445
|
+
* List common models for each provider
|
|
446
|
+
*/
|
|
447
|
+
async function modelsCommand(args, options, outputFormat) {
|
|
448
|
+
try {
|
|
449
|
+
const { listSupportedProviders, AISDK_PROVIDERS } = await Promise.resolve().then(() => __importStar(require('../../llm/providers/ai-sdk')));
|
|
450
|
+
// Common models per provider (not exhaustive)
|
|
451
|
+
const commonModels = {
|
|
452
|
+
openai: ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'gpt-3.5-turbo', 'o1', 'o1-mini'],
|
|
453
|
+
anthropic: ['claude-3-5-sonnet-latest', 'claude-3-5-haiku-latest', 'claude-3-opus-latest'],
|
|
454
|
+
google: ['gemini-2.0-flash', 'gemini-1.5-pro', 'gemini-1.5-flash'],
|
|
455
|
+
groq: ['llama-3.3-70b-versatile', 'llama-3.1-8b-instant', 'mixtral-8x7b-32768'],
|
|
456
|
+
mistral: ['mistral-large-latest', 'mistral-small-latest', 'codestral-latest'],
|
|
457
|
+
cohere: ['command-r-plus', 'command-r', 'command-light'],
|
|
458
|
+
deepseek: ['deepseek-chat', 'deepseek-coder'],
|
|
459
|
+
xai: ['grok-2', 'grok-2-mini'],
|
|
460
|
+
};
|
|
461
|
+
const providers = listSupportedProviders();
|
|
462
|
+
const modelsData = providers.map((id) => ({
|
|
463
|
+
provider: id,
|
|
464
|
+
models: commonModels[id] || ['(check provider docs)'],
|
|
465
|
+
package: AISDK_PROVIDERS[id]?.package || 'custom'
|
|
466
|
+
}));
|
|
467
|
+
if (outputFormat === 'json') {
|
|
468
|
+
outputJson(formatSuccess({
|
|
469
|
+
note: 'This is not an exhaustive list. Check provider documentation for all available models.',
|
|
470
|
+
providers: modelsData
|
|
471
|
+
}));
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
await pretty_logger_1.PrettyLogger.heading('Common Models by Provider');
|
|
475
|
+
await pretty_logger_1.PrettyLogger.dim('Note: This is not exhaustive. Check provider docs for all models.\n');
|
|
476
|
+
for (const p of modelsData) {
|
|
477
|
+
await pretty_logger_1.PrettyLogger.plain(` ${p.provider}:`);
|
|
478
|
+
for (const model of p.models) {
|
|
479
|
+
await pretty_logger_1.PrettyLogger.dim(` - ${model}`);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
483
|
+
await pretty_logger_1.PrettyLogger.info('Usage: overai llm run "prompt" --model provider/model');
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
handleError(error, outputFormat, 'Failed to list models');
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Show resolved configuration (redacted)
|
|
492
|
+
*/
|
|
493
|
+
async function configCommand(args, options, outputFormat) {
|
|
494
|
+
try {
|
|
495
|
+
const { SAFE_DEFAULTS, AISDK_PROVIDERS, PROVIDER_ALIASES } = await Promise.resolve().then(() => __importStar(require('../../llm/providers/ai-sdk')));
|
|
496
|
+
// Gather environment config (redacted)
|
|
497
|
+
const envConfig = {};
|
|
498
|
+
for (const [id, info] of Object.entries(AISDK_PROVIDERS)) {
|
|
499
|
+
const envKey = info.envKey;
|
|
500
|
+
if (envKey && process.env[envKey]) {
|
|
501
|
+
envConfig[envKey] = '****' + process.env[envKey].slice(-4);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
const config = {
|
|
505
|
+
defaults: SAFE_DEFAULTS,
|
|
506
|
+
aliases: PROVIDER_ALIASES,
|
|
507
|
+
environment: envConfig,
|
|
508
|
+
model: options.model || 'openai/gpt-4o-mini',
|
|
509
|
+
timeout: options.timeout || SAFE_DEFAULTS.timeout,
|
|
510
|
+
};
|
|
511
|
+
if (outputFormat === 'json') {
|
|
512
|
+
outputJson(formatSuccess(config));
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
await pretty_logger_1.PrettyLogger.heading('AI SDK Configuration');
|
|
516
|
+
await pretty_logger_1.PrettyLogger.plain(' Defaults:');
|
|
517
|
+
await pretty_logger_1.PrettyLogger.dim(` timeout: ${SAFE_DEFAULTS.timeout}ms`);
|
|
518
|
+
await pretty_logger_1.PrettyLogger.dim(` maxRetries: ${SAFE_DEFAULTS.maxRetries}`);
|
|
519
|
+
await pretty_logger_1.PrettyLogger.dim(` maxOutputTokens: ${SAFE_DEFAULTS.maxOutputTokens}`);
|
|
520
|
+
await pretty_logger_1.PrettyLogger.dim(` redactLogs: ${SAFE_DEFAULTS.redactLogs}`);
|
|
521
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
522
|
+
await pretty_logger_1.PrettyLogger.plain(' Provider Aliases:');
|
|
523
|
+
for (const [alias, target] of Object.entries(PROVIDER_ALIASES)) {
|
|
524
|
+
await pretty_logger_1.PrettyLogger.dim(` ${alias} → ${target}`);
|
|
525
|
+
}
|
|
526
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
527
|
+
await pretty_logger_1.PrettyLogger.plain(' Environment (redacted):');
|
|
528
|
+
if (Object.keys(envConfig).length === 0) {
|
|
529
|
+
await pretty_logger_1.PrettyLogger.dim(' No API keys detected');
|
|
530
|
+
}
|
|
531
|
+
else {
|
|
532
|
+
for (const [key, value] of Object.entries(envConfig)) {
|
|
533
|
+
await pretty_logger_1.PrettyLogger.dim(` ${key}: ${value}`);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
catch (error) {
|
|
539
|
+
handleError(error, outputFormat, 'Failed to show config');
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Demo trace/attribution headers
|
|
544
|
+
*/
|
|
545
|
+
async function traceCommand(args, options, outputFormat) {
|
|
546
|
+
try {
|
|
547
|
+
const { createAISDKBackend, createAttributionMiddleware } = await Promise.resolve().then(() => __importStar(require('../../llm/providers/ai-sdk')));
|
|
548
|
+
const modelString = options.model || 'openai/gpt-4o-mini';
|
|
549
|
+
// Generate demo attribution context
|
|
550
|
+
const attribution = {
|
|
551
|
+
agentId: `agent-${Date.now().toString(36)}`,
|
|
552
|
+
runId: `run-${Math.random().toString(36).slice(2, 10)}`,
|
|
553
|
+
traceId: `trace-${Math.random().toString(36).slice(2, 10)}`,
|
|
554
|
+
sessionId: options.verbose ? `session-demo` : undefined,
|
|
555
|
+
};
|
|
556
|
+
if (outputFormat !== 'json') {
|
|
557
|
+
await pretty_logger_1.PrettyLogger.heading('Attribution Trace Demo');
|
|
558
|
+
await pretty_logger_1.PrettyLogger.info(`Running with model: ${modelString}`);
|
|
559
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
560
|
+
await pretty_logger_1.PrettyLogger.plain(' Attribution Context:');
|
|
561
|
+
await pretty_logger_1.PrettyLogger.dim(` agentId: ${attribution.agentId}`);
|
|
562
|
+
await pretty_logger_1.PrettyLogger.dim(` runId: ${attribution.runId}`);
|
|
563
|
+
await pretty_logger_1.PrettyLogger.dim(` traceId: ${attribution.traceId}`);
|
|
564
|
+
if (attribution.sessionId) {
|
|
565
|
+
await pretty_logger_1.PrettyLogger.dim(` sessionId: ${attribution.sessionId}`);
|
|
566
|
+
}
|
|
567
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
568
|
+
await pretty_logger_1.PrettyLogger.plain(' Headers injected:');
|
|
569
|
+
await pretty_logger_1.PrettyLogger.dim(` X-Agent-Id: ${attribution.agentId}`);
|
|
570
|
+
await pretty_logger_1.PrettyLogger.dim(` X-Run-Id: ${attribution.runId}`);
|
|
571
|
+
await pretty_logger_1.PrettyLogger.dim(` X-Trace-Id: ${attribution.traceId}`);
|
|
572
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
573
|
+
}
|
|
574
|
+
const backend = createAISDKBackend(modelString, {
|
|
575
|
+
timeout: options.timeout || 30000,
|
|
576
|
+
attribution,
|
|
577
|
+
});
|
|
578
|
+
const startTime = Date.now();
|
|
579
|
+
const result = await backend.generateText({
|
|
580
|
+
messages: [{ role: 'user', content: 'Say "Trace OK" and nothing else.' }],
|
|
581
|
+
maxTokens: 10,
|
|
582
|
+
});
|
|
583
|
+
const duration = Date.now() - startTime;
|
|
584
|
+
if (outputFormat === 'json') {
|
|
585
|
+
outputJson(formatSuccess({
|
|
586
|
+
attribution,
|
|
587
|
+
headers: {
|
|
588
|
+
'X-Agent-Id': attribution.agentId,
|
|
589
|
+
'X-Run-Id': attribution.runId,
|
|
590
|
+
'X-Trace-Id': attribution.traceId,
|
|
591
|
+
},
|
|
592
|
+
response: result.text,
|
|
593
|
+
duration_ms: duration,
|
|
594
|
+
}));
|
|
595
|
+
}
|
|
596
|
+
else {
|
|
597
|
+
await pretty_logger_1.PrettyLogger.success(`Response: ${result.text.trim()} (${duration}ms)`);
|
|
598
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
599
|
+
await pretty_logger_1.PrettyLogger.info('Attribution headers are automatically injected into LLM requests.');
|
|
600
|
+
await pretty_logger_1.PrettyLogger.dim('Use --verbose for session ID.');
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
catch (error) {
|
|
604
|
+
handleError(error, outputFormat, 'Failed to run trace demo');
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Demo tool calling - shows how tools work with AI SDK
|
|
609
|
+
* Note: AI SDK requires Zod schemas for tools, which requires runtime setup
|
|
610
|
+
*/
|
|
611
|
+
async function toolsCommand(args, options, outputFormat) {
|
|
612
|
+
try {
|
|
613
|
+
const modelString = options.model || 'openai/gpt-4o-mini';
|
|
614
|
+
if (outputFormat !== 'json') {
|
|
615
|
+
await pretty_logger_1.PrettyLogger.heading('Tool Calling Demo');
|
|
616
|
+
await pretty_logger_1.PrettyLogger.info(`Model: ${modelString}`);
|
|
617
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
618
|
+
await pretty_logger_1.PrettyLogger.plain(' AI SDK Tool Calling requires Zod schemas.');
|
|
619
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
620
|
+
await pretty_logger_1.PrettyLogger.plain(' Example code:');
|
|
621
|
+
await pretty_logger_1.PrettyLogger.dim(` import { generateText, tool } from 'ai';`);
|
|
622
|
+
await pretty_logger_1.PrettyLogger.dim(` import { openai } from '@ai-sdk/openai';`);
|
|
623
|
+
await pretty_logger_1.PrettyLogger.dim(` import { z } from 'zod';`);
|
|
624
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
625
|
+
await pretty_logger_1.PrettyLogger.dim(` const tools = {`);
|
|
626
|
+
await pretty_logger_1.PrettyLogger.dim(` get_weather: tool({`);
|
|
627
|
+
await pretty_logger_1.PrettyLogger.dim(` description: 'Get weather for a city',`);
|
|
628
|
+
await pretty_logger_1.PrettyLogger.dim(` inputSchema: z.object({`);
|
|
629
|
+
await pretty_logger_1.PrettyLogger.dim(` city: z.string().describe('City name'),`);
|
|
630
|
+
await pretty_logger_1.PrettyLogger.dim(` }),`);
|
|
631
|
+
await pretty_logger_1.PrettyLogger.dim(` }),`);
|
|
632
|
+
await pretty_logger_1.PrettyLogger.dim(` };`);
|
|
633
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
634
|
+
await pretty_logger_1.PrettyLogger.dim(` const result = await generateText({`);
|
|
635
|
+
await pretty_logger_1.PrettyLogger.dim(` model: openai('gpt-4o-mini'),`);
|
|
636
|
+
await pretty_logger_1.PrettyLogger.dim(` messages: [{ role: 'user', content: 'Weather in Paris?' }],`);
|
|
637
|
+
await pretty_logger_1.PrettyLogger.dim(` tools,`);
|
|
638
|
+
await pretty_logger_1.PrettyLogger.dim(` });`);
|
|
639
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
640
|
+
await pretty_logger_1.PrettyLogger.info('See examples/ai-sdk/tool-calling.ts for a complete example.');
|
|
641
|
+
}
|
|
642
|
+
else {
|
|
643
|
+
outputJson(formatSuccess({
|
|
644
|
+
model: modelString,
|
|
645
|
+
note: 'AI SDK tool calling requires Zod schemas at runtime',
|
|
646
|
+
example: {
|
|
647
|
+
import: "import { generateText, tool } from 'ai'; import { z } from 'zod';",
|
|
648
|
+
tool: "tool({ description: '...', inputSchema: z.object({ city: z.string() }) })",
|
|
649
|
+
},
|
|
650
|
+
docs: 'See examples/ai-sdk/tool-calling.ts',
|
|
651
|
+
}));
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
catch (error) {
|
|
655
|
+
handleError(error, outputFormat, 'Failed to run tools demo');
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Demo structured output (JSON schema) - shows how to use generateObject
|
|
660
|
+
* Note: AI SDK requires Zod schemas for structured output
|
|
661
|
+
*/
|
|
662
|
+
async function jsonCommand(args, options, outputFormat) {
|
|
663
|
+
try {
|
|
664
|
+
const modelString = options.model || 'openai/gpt-4o-mini';
|
|
665
|
+
if (outputFormat !== 'json') {
|
|
666
|
+
await pretty_logger_1.PrettyLogger.heading('Structured Output (JSON) Demo');
|
|
667
|
+
await pretty_logger_1.PrettyLogger.info(`Model: ${modelString}`);
|
|
668
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
669
|
+
await pretty_logger_1.PrettyLogger.plain(' AI SDK Structured Output requires Zod schemas.');
|
|
670
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
671
|
+
await pretty_logger_1.PrettyLogger.plain(' Example code:');
|
|
672
|
+
await pretty_logger_1.PrettyLogger.dim(` import { generateObject } from 'ai';`);
|
|
673
|
+
await pretty_logger_1.PrettyLogger.dim(` import { openai } from '@ai-sdk/openai';`);
|
|
674
|
+
await pretty_logger_1.PrettyLogger.dim(` import { z } from 'zod';`);
|
|
675
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
676
|
+
await pretty_logger_1.PrettyLogger.dim(` const schema = z.object({`);
|
|
677
|
+
await pretty_logger_1.PrettyLogger.dim(` name: z.string(),`);
|
|
678
|
+
await pretty_logger_1.PrettyLogger.dim(` age: z.number(),`);
|
|
679
|
+
await pretty_logger_1.PrettyLogger.dim(` city: z.string(),`);
|
|
680
|
+
await pretty_logger_1.PrettyLogger.dim(` });`);
|
|
681
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
682
|
+
await pretty_logger_1.PrettyLogger.dim(` const result = await generateObject({`);
|
|
683
|
+
await pretty_logger_1.PrettyLogger.dim(` model: openai('gpt-4o-mini'),`);
|
|
684
|
+
await pretty_logger_1.PrettyLogger.dim(` schema,`);
|
|
685
|
+
await pretty_logger_1.PrettyLogger.dim(` prompt: 'Generate a fictional person profile.',`);
|
|
686
|
+
await pretty_logger_1.PrettyLogger.dim(` });`);
|
|
687
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
688
|
+
await pretty_logger_1.PrettyLogger.dim(` console.log(result.object); // { name: '...', age: 25, city: '...' }`);
|
|
689
|
+
await pretty_logger_1.PrettyLogger.newline();
|
|
690
|
+
await pretty_logger_1.PrettyLogger.info('See examples/ai-sdk/structured-output.ts for a complete example.');
|
|
691
|
+
}
|
|
692
|
+
else {
|
|
693
|
+
outputJson(formatSuccess({
|
|
694
|
+
model: modelString,
|
|
695
|
+
note: 'AI SDK structured output requires Zod schemas at runtime',
|
|
696
|
+
example: {
|
|
697
|
+
import: "import { generateObject } from 'ai'; import { z } from 'zod';",
|
|
698
|
+
schema: "z.object({ name: z.string(), age: z.number(), city: z.string() })",
|
|
699
|
+
},
|
|
700
|
+
docs: 'See examples/ai-sdk/structured-output.ts',
|
|
701
|
+
}));
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
catch (error) {
|
|
705
|
+
handleError(error, outputFormat, 'Failed to run JSON demo');
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
/**
|
|
709
|
+
* Handle errors with proper exit codes and formatting
|
|
710
|
+
*/
|
|
711
|
+
async function handleError(error, outputFormat, context) {
|
|
712
|
+
const { AISDKError } = await Promise.resolve().then(() => __importStar(require('../../llm/providers/ai-sdk')));
|
|
713
|
+
let exitCode = LLM_EXIT_CODES.GENERAL_ERROR;
|
|
714
|
+
let errorCode = 'UNKNOWN_ERROR';
|
|
715
|
+
let message = context;
|
|
716
|
+
if (error instanceof AISDKError) {
|
|
717
|
+
message = `${context}: ${error.message}`;
|
|
718
|
+
errorCode = error.code;
|
|
719
|
+
switch (error.code) {
|
|
720
|
+
case 'AUTHENTICATION':
|
|
721
|
+
exitCode = 3; // AUTH_ERROR
|
|
722
|
+
break;
|
|
723
|
+
case 'PROVIDER_NOT_FOUND':
|
|
724
|
+
case 'MODEL_NOT_FOUND':
|
|
725
|
+
exitCode = 4; // PROVIDER_NOT_FOUND
|
|
726
|
+
break;
|
|
727
|
+
case 'NETWORK':
|
|
728
|
+
exitCode = 5; // NETWORK_ERROR
|
|
729
|
+
break;
|
|
730
|
+
case 'TIMEOUT':
|
|
731
|
+
exitCode = 6; // TIMEOUT
|
|
732
|
+
break;
|
|
733
|
+
case 'INVALID_REQUEST':
|
|
734
|
+
exitCode = 2; // INVALID_ARGS
|
|
735
|
+
break;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
else if (error instanceof Error) {
|
|
739
|
+
message = `${context}: ${error.message}`;
|
|
740
|
+
}
|
|
741
|
+
if (outputFormat === 'json') {
|
|
742
|
+
outputJson(formatError(errorCode, message));
|
|
743
|
+
}
|
|
744
|
+
else {
|
|
745
|
+
await pretty_logger_1.PrettyLogger.error(message);
|
|
746
|
+
}
|
|
747
|
+
process.exit(exitCode);
|
|
748
|
+
}
|