@bluefly/openstandardagents 0.2.4
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/.env.example +41 -0
- package/.eslintrc.cjs +43 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +39 -0
- package/.github/dependabot.yml +58 -0
- package/.github/workflows/ci.yml +154 -0
- package/.github/workflows/codeql.yml +41 -0
- package/.github/workflows/dependabot-auto-merge.yml +28 -0
- package/.github/workflows/release.yml +103 -0
- package/.prettierignore +7 -0
- package/.prettierrc.json +10 -0
- package/.redocly.yaml +9 -0
- package/.releaserc.json +84 -0
- package/.releaserc.json.disabled +81 -0
- package/CHANGELOG.md +152 -0
- package/CONTRIBUTING.md +249 -0
- package/LICENSE +190 -0
- package/README.md +280 -0
- package/bin/ossa +8 -0
- package/bin/validate-ossa-0.2.2.ts +244 -0
- package/dist/di-container.d.ts +18 -0
- package/dist/di-container.d.ts.map +1 -0
- package/dist/di-container.js +43 -0
- package/dist/di-container.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/manifest.repository.d.ts +26 -0
- package/dist/repositories/manifest.repository.d.ts.map +1 -0
- package/dist/repositories/manifest.repository.js +90 -0
- package/dist/repositories/manifest.repository.js.map +1 -0
- package/dist/repositories/schema.repository.d.ts +30 -0
- package/dist/repositories/schema.repository.d.ts.map +1 -0
- package/dist/repositories/schema.repository.js +143 -0
- package/dist/repositories/schema.repository.js.map +1 -0
- package/dist/services/generation.service.d.ts +54 -0
- package/dist/services/generation.service.d.ts.map +1 -0
- package/dist/services/generation.service.js +298 -0
- package/dist/services/generation.service.js.map +1 -0
- package/dist/services/migration.service.d.ts +30 -0
- package/dist/services/migration.service.d.ts.map +1 -0
- package/dist/services/migration.service.js +231 -0
- package/dist/services/migration.service.js.map +1 -0
- package/dist/services/runtime/openai.adapter.d.ts +94 -0
- package/dist/services/runtime/openai.adapter.d.ts.map +1 -0
- package/dist/services/runtime/openai.adapter.js +209 -0
- package/dist/services/runtime/openai.adapter.js.map +1 -0
- package/dist/services/validation.service.d.ts +45 -0
- package/dist/services/validation.service.d.ts.map +1 -0
- package/dist/services/validation.service.js +362 -0
- package/dist/services/validation.service.js.map +1 -0
- package/dist/services/validators/anthropic.validator.d.ts +9 -0
- package/dist/services/validators/anthropic.validator.d.ts.map +1 -0
- package/dist/services/validators/anthropic.validator.js +105 -0
- package/dist/services/validators/anthropic.validator.js.map +1 -0
- package/dist/services/validators/autogen.validator.d.ts +9 -0
- package/dist/services/validators/autogen.validator.d.ts.map +1 -0
- package/dist/services/validators/autogen.validator.js +111 -0
- package/dist/services/validators/autogen.validator.js.map +1 -0
- package/dist/services/validators/crewai.validator.d.ts +9 -0
- package/dist/services/validators/crewai.validator.d.ts.map +1 -0
- package/dist/services/validators/crewai.validator.js +117 -0
- package/dist/services/validators/crewai.validator.js.map +1 -0
- package/dist/services/validators/cursor.validator.d.ts +9 -0
- package/dist/services/validators/cursor.validator.d.ts.map +1 -0
- package/dist/services/validators/cursor.validator.js +88 -0
- package/dist/services/validators/cursor.validator.js.map +1 -0
- package/dist/services/validators/index.d.ts +15 -0
- package/dist/services/validators/index.d.ts.map +1 -0
- package/dist/services/validators/index.js +15 -0
- package/dist/services/validators/index.js.map +1 -0
- package/dist/services/validators/langchain.validator.d.ts +9 -0
- package/dist/services/validators/langchain.validator.d.ts.map +1 -0
- package/dist/services/validators/langchain.validator.js +103 -0
- package/dist/services/validators/langchain.validator.js.map +1 -0
- package/dist/services/validators/langflow.validator.d.ts +9 -0
- package/dist/services/validators/langflow.validator.d.ts.map +1 -0
- package/dist/services/validators/langflow.validator.js +92 -0
- package/dist/services/validators/langflow.validator.js.map +1 -0
- package/dist/services/validators/langgraph.validator.d.ts +9 -0
- package/dist/services/validators/langgraph.validator.d.ts.map +1 -0
- package/dist/services/validators/langgraph.validator.js +123 -0
- package/dist/services/validators/langgraph.validator.js.map +1 -0
- package/dist/services/validators/llamaindex.validator.d.ts +9 -0
- package/dist/services/validators/llamaindex.validator.d.ts.map +1 -0
- package/dist/services/validators/llamaindex.validator.js +121 -0
- package/dist/services/validators/llamaindex.validator.js.map +1 -0
- package/dist/services/validators/openai.validator.d.ts +9 -0
- package/dist/services/validators/openai.validator.d.ts.map +1 -0
- package/dist/services/validators/openai.validator.js +126 -0
- package/dist/services/validators/openai.validator.js.map +1 -0
- package/dist/services/validators/vercel-ai.validator.d.ts +9 -0
- package/dist/services/validators/vercel-ai.validator.d.ts.map +1 -0
- package/dist/services/validators/vercel-ai.validator.js +99 -0
- package/dist/services/validators/vercel-ai.validator.js.map +1 -0
- package/dist/spec/v0.1.9/agent-autonomous-extensions.json +234 -0
- package/dist/spec/v0.1.9/ecosystem-compliance.json +235 -0
- package/dist/spec/v0.1.9/ossa-v0.1.9.schema.json +695 -0
- package/dist/spec/v0.1.9/ossa-v0.1.9.schema.json.backup +695 -0
- package/dist/spec/v0.1.9/reasoning-compliance.json +654 -0
- package/dist/spec/v0.2.2/kagent-enhancements.json +395 -0
- package/dist/spec/v0.2.2/ossa-0.2.2.schema.json +906 -0
- package/dist/spec/v0.2.2/ossa-0.2.2.yaml +448 -0
- package/dist/spec/v0.2.2/ossa-reasoning-compliance-1.0.schema.json +424 -0
- package/dist/spec/v0.2.3/CHANGELOG.md +176 -0
- package/dist/spec/v0.2.3/README.md +154 -0
- package/dist/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +343 -0
- package/dist/spec/v0.2.3/ossa-0.2.3.schema.json +1397 -0
- package/dist/spec/v0.2.3/ossa-0.2.3.yaml +448 -0
- package/dist/spec/v0.2.4-dev/CHANGELOG.md +403 -0
- package/dist/spec/v0.2.4-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/dist/spec/v0.2.4-dev/ossa-0.2.4-dev.schema.json +1696 -0
- package/dist/spec/v0.2.4-dev/ossa-0.2.4-dev.yaml +581 -0
- package/dist/spec/v0.2.5-dev/CHANGELOG.md +171 -0
- package/dist/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +362 -0
- package/dist/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +464 -0
- package/dist/spec/v0.2.5-dev/examples/research-team.ossa.yaml +440 -0
- package/dist/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +317 -0
- package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.schema.json +1732 -0
- package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +409 -0
- package/dist/types/index.d.ts +178 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi-extensions.d.ts +164 -0
- package/dist/types/openapi-extensions.d.ts.map +1 -0
- package/dist/types/openapi-extensions.js +6 -0
- package/dist/types/openapi-extensions.js.map +1 -0
- package/docs/OSSA-COMPLIANT-BADGE.md +248 -0
- package/docs/README.md +31 -0
- package/docs/VERSIONING.md +284 -0
- package/docs/agent-openapi-spec.yml +942 -0
- package/docs/getting-started.md +87 -0
- package/docs/migration/general-agent-schema.yml +255 -0
- package/docs/migration/migration-manifest.json +64 -0
- package/docs/openapi-extensions.md +930 -0
- package/docs/schemas/openapi-extensions.schema.json +486 -0
- package/examples/adk-integration/code-review-workflow.yml +136 -0
- package/examples/adk-integration/customer-support.yml +263 -0
- package/examples/adk-integration/data-pipeline.yml +173 -0
- package/examples/advanced/patterns/compliance-context-production.json +53 -0
- package/examples/advanced/patterns/model-router.ts +274 -0
- package/examples/advanced/patterns/smart-model-routing.ts +248 -0
- package/examples/advanced/workflows/hybrid-model-strategy.yaml +232 -0
- package/examples/agent-manifests/critics/critic-agent.yaml +149 -0
- package/examples/agent-manifests/governors/governor-agent.yaml +128 -0
- package/examples/agent-manifests/integrators/integrator-agent.yaml +103 -0
- package/examples/agent-manifests/judges/judge-agent.yaml +153 -0
- package/examples/agent-manifests/monitors/monitor-agent.yaml +122 -0
- package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +247 -0
- package/examples/agent-manifests/sample-compliant-agent.yaml +147 -0
- package/examples/agent-manifests/workers/worker-agent.yaml +82 -0
- package/examples/anthropic/claude-assistant.ossa.json +45 -0
- package/examples/architecture/model-configuration/ollama-integration.ts +110 -0
- package/examples/autogen/multi-agent.ossa.json +37 -0
- package/examples/bridge-configurations.yaml +346 -0
- package/examples/bridges/Dockerfile.production +87 -0
- package/examples/bridges/__pycache__/aiflow-bridge-enhanced.cpython-313.pyc +0 -0
- package/examples/bridges/__pycache__/aiflow-phoenix-tracing.cpython-313.pyc +0 -0
- package/examples/bridges/__pycache__/test_aiflow_integration.cpython-313.pyc +0 -0
- package/examples/bridges/aiflow-bridge-enhanced.py +462 -0
- package/examples/bridges/aiflow-bridge-example.yml +310 -0
- package/examples/bridges/aiflow-phoenix-tracing.py +310 -0
- package/examples/bridges/aiflow-registration-api.openapi.yml +439 -0
- package/examples/bridges/k8s/configmap.yaml +121 -0
- package/examples/bridges/k8s/deployment-simple.yaml +34 -0
- package/examples/bridges/k8s/deployment.yaml +275 -0
- package/examples/bridges/k8s/hpa.yaml +126 -0
- package/examples/bridges/k8s/ingress.yaml +155 -0
- package/examples/bridges/kagent-bridge-example.yml +94 -0
- package/examples/bridges/load-tests/Dockerfile +28 -0
- package/examples/bridges/load-tests/k6-load-test.js +302 -0
- package/examples/bridges/load-tests/requirements.txt +20 -0
- package/examples/bridges/loadtest/k6-scenarios.js +270 -0
- package/examples/bridges/phase4/SLO-SLA.yaml +249 -0
- package/examples/bridges/phase4/chaos-tests.yaml +226 -0
- package/examples/bridges/requirements.txt +24 -0
- package/examples/bridges/test_aiflow_integration.py +341 -0
- package/examples/common_npm/agent-router.ossa.yaml +182 -0
- package/examples/common_npm/agent-router.v0.2.2.ossa.yaml +60 -0
- package/examples/compliance-agent.yml +155 -0
- package/examples/crewai/research-team.ossa.json +36 -0
- package/examples/cursor/code-review-agent.ossa.json +47 -0
- package/examples/drupal/gitlab-ml-recommender.ossa.yaml +609 -0
- package/examples/drupal/gitlab-ml-recommender.v0.2.2.ossa.yaml +68 -0
- package/examples/enterprise/agent.yml +452 -0
- package/examples/extensions/drupal-v1.yml +266 -0
- package/examples/extensions/kagent-v1.yml +167 -0
- package/examples/getting-started/hello-world-complete.ossa.yaml +266 -0
- package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +376 -0
- package/examples/kagent/README.md +31 -0
- package/examples/kagent/compliance-validator.ossa.yaml +111 -0
- package/examples/kagent/cost-optimizer.ossa.yaml +93 -0
- package/examples/kagent/documentation-agent.ossa.yaml +91 -0
- package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +269 -0
- package/examples/kagent/k8s-troubleshooter-v1.v0.2.2.ossa.yaml +106 -0
- package/examples/kagent/k8s-troubleshooter.ossa.yaml +257 -0
- package/examples/kagent/security-scanner.ossa.yaml +140 -0
- package/examples/langchain/chain-agent.ossa.json +42 -0
- package/examples/langflow/workflow-agent.ossa.json +39 -0
- package/examples/langgraph/state-machine-agent.ossa.json +59 -0
- package/examples/llamaindex/rag-agent.ossa.json +41 -0
- package/examples/migration-guides/from-langchain-to-ossa.yaml +309 -0
- package/examples/minimal/agent.yml +152 -0
- package/examples/minimal/openapi.yaml +95 -0
- package/examples/openai/swarm-agent.ossa.json +59 -0
- package/examples/openapi-extensions/README.md +87 -0
- package/examples/openapi-extensions/minimal-agent-api.openapi.yml +288 -0
- package/examples/openapi-extensions/orchestrator-agent-api.openapi.yml +633 -0
- package/examples/openapi-extensions/worker-agent-api.openapi.yml +533 -0
- package/examples/production/agent.yml +713 -0
- package/examples/production/document-analyzer-openai.yml +134 -0
- package/examples/quickstart/support-agent.ossa.yaml +59 -0
- package/examples/service-registry-usage.ts +423 -0
- package/examples/spec-examples/audit-agent.yml +147 -0
- package/examples/spec-examples/chat-agent.yml +189 -0
- package/examples/spec-examples/compliance-agent.yml +204 -0
- package/examples/spec-examples/data-processing-agent.yml +132 -0
- package/examples/spec-examples/development-agent.yml +138 -0
- package/examples/spec-examples/edge-agent.yml +101 -0
- package/examples/spec-examples/integration-agent.yml +129 -0
- package/examples/spec-examples/monitoring-agent.yml +130 -0
- package/examples/spec-examples/serverless-agent.yml +82 -0
- package/examples/spec-examples/workflow-agent.yml +223 -0
- package/examples/templates/ossa-compliance.yaml +56 -0
- package/examples/typescript/advanced/demo-registry.ts +168 -0
- package/examples/typescript/mcpb-agent-example.ts +358 -0
- package/examples/vercel/edge-agent.ossa.json +43 -0
- package/infrastructure/docker-compose.yml +33 -0
- package/junit.xml +1 -0
- package/openapi/drupal-agent-api.openapi.yaml +348 -0
- package/openapi/gitlab-orchestrator.openapi.yaml +330 -0
- package/openapi/helm-generator.openapi.yaml +389 -0
- package/openapi/ossa-core-api.openapi.yaml +1448 -0
- package/openapi/ossa-registry-api.openapi.yaml +980 -0
- package/openapi/ossa-registry.openapi.yaml +782 -0
- package/openapi/self-evolving-ecosystem.openapi.yaml +1530 -0
- package/openapi/unified-agent-gateway.openapi.yaml +833 -0
- package/ossa-website-swarm-tasks.json +105 -0
- package/package.json +132 -0
- package/release.config.js +64 -0
- package/spec/v0.1.9/agent-autonomous-extensions.json +234 -0
- package/spec/v0.1.9/ecosystem-compliance.json +235 -0
- package/spec/v0.1.9/ossa-v0.1.9.schema.json +695 -0
- package/spec/v0.1.9/ossa-v0.1.9.schema.json.backup +695 -0
- package/spec/v0.1.9/reasoning-compliance.json +654 -0
- package/spec/v0.2.2/kagent-enhancements.json +395 -0
- package/spec/v0.2.2/ossa-0.2.2.schema.json +906 -0
- package/spec/v0.2.2/ossa-0.2.2.yaml +448 -0
- package/spec/v0.2.2/ossa-reasoning-compliance-1.0.schema.json +424 -0
- package/spec/v0.2.3/CHANGELOG.md +176 -0
- package/spec/v0.2.3/README.md +154 -0
- package/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +343 -0
- package/spec/v0.2.3/ossa-0.2.3.schema.json +1397 -0
- package/spec/v0.2.3/ossa-0.2.3.yaml +448 -0
- package/spec/v0.2.4-dev/CHANGELOG.md +403 -0
- package/spec/v0.2.4-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/v0.2.4-dev/ossa-0.2.4-dev.schema.json +1696 -0
- package/spec/v0.2.4-dev/ossa-0.2.4-dev.yaml +581 -0
- package/spec/v0.2.5-dev/CHANGELOG.md +171 -0
- package/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +362 -0
- package/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +464 -0
- package/spec/v0.2.5-dev/examples/research-team.ossa.yaml +440 -0
- package/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +317 -0
- package/spec/v0.2.5-dev/ossa-0.2.5-dev.schema.json +1732 -0
- package/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +409 -0
- package/test-results.xml +1 -0
- package/website/.lighthouserc.js +20 -0
- package/website/.prettierrc +10 -0
- package/website/Dockerfile +17 -0
- package/website/app/about/page.tsx +295 -0
- package/website/app/api/validate/route.ts +88 -0
- package/website/app/blog/[slug]/page.tsx +167 -0
- package/website/app/blog/page.tsx +162 -0
- package/website/app/docs/[[...slug]]/page.tsx +349 -0
- package/website/app/docs/core-concepts/project-structure/page.tsx +349 -0
- package/website/app/ecosystem/page.tsx +375 -0
- package/website/app/examples/page.tsx +123 -0
- package/website/app/globals.css +108 -0
- package/website/app/layout.tsx +106 -0
- package/website/app/page.tsx +409 -0
- package/website/app/playground/page.tsx +507 -0
- package/website/app/robots.ts +19 -0
- package/website/app/rss.xml/route.ts +74 -0
- package/website/app/schema/page.tsx +970 -0
- package/website/app/sitemap.ts +56 -0
- package/website/app/specification/page.tsx +211 -0
- package/website/components/InstallCommand.tsx +96 -0
- package/website/components/Logo.tsx +24 -0
- package/website/components/StructuredData.tsx +65 -0
- package/website/components/docs/DocsSearch.tsx +104 -0
- package/website/components/docs/DocsSidebar.tsx +118 -0
- package/website/components/docs/MarkdownContent.tsx +183 -0
- package/website/components/docs/VersionSelector.tsx +49 -0
- package/website/components/examples/ExamplesViewer.tsx +293 -0
- package/website/components/layout/Footer.tsx +111 -0
- package/website/components/layout/Header.tsx +170 -0
- package/website/components/schema/SchemaExplorer.tsx +213 -0
- package/website/content/blog/OpenAPI-AI-Agents-Standard.md +285 -0
- package/website/content/blog/Why-Formal-Standards-Matter-Now.md +209 -0
- package/website/content/blog/introducing-ossa-framework.md +328 -0
- package/website/content/blog/ossa-production-results.md +279 -0
- package/website/content/blog/welcome-to-ossa.md +43 -0
- package/website/content/blog/why-ai-agents-need-open-standard.md +98 -0
- package/website/content/docs/00-HOME.md +160 -0
- package/website/content/docs/AIFlow-Framework-Integration-with-OSSA.md +107 -0
- package/website/content/docs/OpenAPI-Extensions.md +498 -0
- package/website/content/docs/architecture/execution-flow.md +335 -0
- package/website/content/docs/architecture/multi-agent-systems.md +737 -0
- package/website/content/docs/architecture/overview.md +121 -0
- package/website/content/docs/architecture/stack-integration.md +461 -0
- package/website/content/docs/changelog.md +246 -0
- package/website/content/docs/contributing.md +599 -0
- package/website/content/docs/core-concepts/project-structure.md +348 -0
- package/website/content/docs/ecosystem/framework-support.md +821 -0
- package/website/content/docs/ecosystem/overview.md +366 -0
- package/website/content/docs/examples/Migration-Guides.md +214 -0
- package/website/content/docs/examples.md +71 -0
- package/website/content/docs/for-audiences/Enterprises.md +256 -0
- package/website/content/docs/for-audiences/Students-Researchers.md +122 -0
- package/website/content/docs/for-audiences/architects.md +224 -0
- package/website/content/docs/for-audiences/developers.md +220 -0
- package/website/content/docs/getting-started/5-minute-overview.md +85 -0
- package/website/content/docs/getting-started/Hello-World.md +184 -0
- package/website/content/docs/getting-started/first-agent.md +196 -0
- package/website/content/docs/getting-started/installation.md +155 -0
- package/website/content/docs/getting-started/running-agents.md +107 -0
- package/website/content/docs/integrations/aiflow.md +104 -0
- package/website/content/docs/integrations/drupal.md +105 -0
- package/website/content/docs/migration-guides/00-index.md +76 -0
- package/website/content/docs/migration-guides/README.md +133 -0
- package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +1750 -0
- package/website/content/docs/migration-guides/crewai-to-ossa.md +274 -0
- package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +2017 -0
- package/website/content/docs/migration-guides/index.md +133 -0
- package/website/content/docs/migration-guides/langchain-to-ossa.md +1714 -0
- package/website/content/docs/migration-guides/langflow-to-ossa.md +2075 -0
- package/website/content/docs/migration-guides/openai-to-ossa.md +1202 -0
- package/website/content/docs/openapi-extensions/examples.md +550 -0
- package/website/content/docs/openapi-extensions/index.md +495 -0
- package/website/content/docs/openapi-extensions/operation-extensions.md +398 -0
- package/website/content/docs/openapi-extensions/root-extensions.md +364 -0
- package/website/content/docs/pre-release/index.md +175 -0
- package/website/content/docs/quick-reference.md +17 -0
- package/website/content/docs/schema-reference/agent-spec.md +406 -0
- package/website/content/docs/schema-reference/autonomy.md +568 -0
- package/website/content/docs/schema-reference/constraints.md +543 -0
- package/website/content/docs/schema-reference/index.md +176 -0
- package/website/content/docs/schema-reference/llm-config.md +445 -0
- package/website/content/docs/schema-reference/observability.md +654 -0
- package/website/content/docs/schema-reference/ossa-manifest.md +309 -0
- package/website/content/docs/schema-reference/taxonomy.md +509 -0
- package/website/content/docs/schema-reference/tools.md +628 -0
- package/website/content/docs/templates/blog-post.md +43 -0
- package/website/content/docs/use-cases/00-index.md +395 -0
- package/website/content/docs/use-cases/cicd-code-review.md +1236 -0
- package/website/content/docs/use-cases/customer-support.md +1234 -0
- package/website/content/docs/use-cases/enterprise-compliance.md +1208 -0
- package/website/content/docs/use-cases/research-multi-agent.md +1161 -0
- package/website/lib/version.ts +18 -0
- package/website/next.config.js +17 -0
- package/website/next.config.ts +16 -0
- package/website/nginx.conf +32 -0
- package/website/package-lock.json +9145 -0
- package/website/package.json +53 -0
- package/website/postcss.config.js +7 -0
- package/website/postcss.config.mjs +9 -0
- package/website/scripts/sync-version.js +44 -0
- package/website/scripts/sync-wiki.ts +261 -0
- package/website/tailwind.config.js +58 -0
- package/website/tailwind.config.ts +65 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSSA Model Router Pattern
|
|
3
|
+
* =========================
|
|
4
|
+
*
|
|
5
|
+
* This example demonstrates the Model Router pattern for OSSA agents, which allows
|
|
6
|
+
* dynamic selection of language models based on task requirements, cost constraints,
|
|
7
|
+
* and performance needs.
|
|
8
|
+
*
|
|
9
|
+
* Key Features:
|
|
10
|
+
* - Dynamic model selection based on task requirements
|
|
11
|
+
* - Cost-aware routing
|
|
12
|
+
* - Performance optimization
|
|
13
|
+
* - Fallback strategies
|
|
14
|
+
*
|
|
15
|
+
* Directory Structure:
|
|
16
|
+
* examples/advanced/patterns/
|
|
17
|
+
* ├── model-router.ts # This file
|
|
18
|
+
* └── README.md # Documentation
|
|
19
|
+
*
|
|
20
|
+
* Prerequisites:
|
|
21
|
+
* - Node.js 18+
|
|
22
|
+
* - TypeScript 5.0+
|
|
23
|
+
* - Ollama running locally (for local models)
|
|
24
|
+
* - API keys for cloud providers (if used)
|
|
25
|
+
*
|
|
26
|
+
* Usage:
|
|
27
|
+
* 1. Install dependencies: `npm install @ossa/core dotenv`
|
|
28
|
+
* 2. Start Ollama: `ollama serve`
|
|
29
|
+
* 3. Pull models: `ollama pull llama3`
|
|
30
|
+
* 4. Run: `npx ts-node model-router.ts`
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import { Agent, AgentConfig, AgentContext, AgentResponse } from '@ossa/core';
|
|
34
|
+
import dotenv from 'dotenv';
|
|
35
|
+
|
|
36
|
+
dotenv.config();
|
|
37
|
+
|
|
38
|
+
// Define model configurations
|
|
39
|
+
const MODEL_CONFIGS = {
|
|
40
|
+
llama3: {
|
|
41
|
+
provider: 'ollama',
|
|
42
|
+
model: 'llama3',
|
|
43
|
+
costPerToken: 0.000002,
|
|
44
|
+
avgLatencyMs: 1200,
|
|
45
|
+
maxTokens: 8192,
|
|
46
|
+
capabilities: ['text-generation', 'summarization', 'qna'],
|
|
47
|
+
},
|
|
48
|
+
mixtral: {
|
|
49
|
+
provider: 'ollama',
|
|
50
|
+
model: 'mixtral',
|
|
51
|
+
costPerToken: 0.000003,
|
|
52
|
+
avgLatencyMs: 1800,
|
|
53
|
+
maxTokens: 32000,
|
|
54
|
+
capabilities: ['text-generation', 'code', 'reasoning'],
|
|
55
|
+
},
|
|
56
|
+
'gpt-4': {
|
|
57
|
+
provider: 'openai',
|
|
58
|
+
model: 'gpt-4-turbo',
|
|
59
|
+
costPerToken: 0.00001,
|
|
60
|
+
avgLatencyMs: 2500,
|
|
61
|
+
maxTokens: 128000,
|
|
62
|
+
capabilities: ['text-generation', 'code', 'reasoning', 'vision'],
|
|
63
|
+
},
|
|
64
|
+
'claude-3-opus': {
|
|
65
|
+
provider: 'anthropic',
|
|
66
|
+
model: 'claude-3-opus-20240229',
|
|
67
|
+
costPerToken: 0.000015,
|
|
68
|
+
avgLatencyMs: 3000,
|
|
69
|
+
maxTokens: 200000,
|
|
70
|
+
capabilities: ['text-generation', 'analysis', 'summarization'],
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
type ModelKey = keyof typeof MODEL_CONFIGS;
|
|
75
|
+
|
|
76
|
+
interface ModelRequest {
|
|
77
|
+
prompt: string;
|
|
78
|
+
context?: Record<string, any>;
|
|
79
|
+
requirements?: {
|
|
80
|
+
maxCostPerToken?: number;
|
|
81
|
+
maxLatencyMs?: number;
|
|
82
|
+
minCapabilities?: string[];
|
|
83
|
+
minContextLength?: number;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
class ModelRouterAgent extends Agent {
|
|
88
|
+
private models: Record<string, any> = MODEL_CONFIGS;
|
|
89
|
+
|
|
90
|
+
constructor() {
|
|
91
|
+
super({
|
|
92
|
+
name: 'model-router',
|
|
93
|
+
version: '1.0.0',
|
|
94
|
+
description: 'Intelligent model routing for OSSA agents',
|
|
95
|
+
capabilities: [
|
|
96
|
+
'model-routing',
|
|
97
|
+
'cost-optimization',
|
|
98
|
+
'performance-monitoring',
|
|
99
|
+
],
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Select the best model based on requirements
|
|
105
|
+
*/
|
|
106
|
+
private selectModel(
|
|
107
|
+
requirements: ModelRequest['requirements'] = {}
|
|
108
|
+
): ModelKey {
|
|
109
|
+
const {
|
|
110
|
+
maxCostPerToken = Infinity,
|
|
111
|
+
maxLatencyMs = 5000,
|
|
112
|
+
minCapabilities = [],
|
|
113
|
+
minContextLength = 0,
|
|
114
|
+
} = requirements;
|
|
115
|
+
|
|
116
|
+
// Filter models by requirements
|
|
117
|
+
const suitableModels = Object.entries(this.models)
|
|
118
|
+
.filter(([_, config]) => {
|
|
119
|
+
// Check cost constraints
|
|
120
|
+
if (config.costPerToken > maxCostPerToken) return false;
|
|
121
|
+
|
|
122
|
+
// Check latency constraints
|
|
123
|
+
if (config.avgLatencyMs > maxLatencyMs) return false;
|
|
124
|
+
|
|
125
|
+
// Check context length
|
|
126
|
+
if (config.maxTokens < minContextLength) return false;
|
|
127
|
+
|
|
128
|
+
// Check required capabilities
|
|
129
|
+
return minCapabilities.every((cap) =>
|
|
130
|
+
config.capabilities.includes(cap)
|
|
131
|
+
);
|
|
132
|
+
})
|
|
133
|
+
.sort((a, b) => {
|
|
134
|
+
// Prioritize lower cost, then lower latency
|
|
135
|
+
const costDiff = a[1].costPerToken - b[1].costPerToken;
|
|
136
|
+
if (costDiff !== 0) return costDiff;
|
|
137
|
+
return a[1].avgLatencyMs - b[1].avgLatencyMs;
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
if (suitableModels.length === 0) {
|
|
141
|
+
throw new Error('No suitable models found for the given requirements');
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return suitableModels[0][0] as ModelKey;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Process a request using the best available model
|
|
149
|
+
*/
|
|
150
|
+
async process(
|
|
151
|
+
request: ModelRequest,
|
|
152
|
+
context: AgentContext
|
|
153
|
+
): Promise<AgentResponse> {
|
|
154
|
+
try {
|
|
155
|
+
// Select the best model
|
|
156
|
+
const modelKey = this.selectModel(request.requirements);
|
|
157
|
+
const modelConfig = this.models[modelKey];
|
|
158
|
+
|
|
159
|
+
this.logger.info(`Selected model: ${modelKey}`, { model: modelKey });
|
|
160
|
+
|
|
161
|
+
// Process the request with the selected model
|
|
162
|
+
const result = await this.callModel(modelKey, request.prompt, context);
|
|
163
|
+
|
|
164
|
+
return {
|
|
165
|
+
success: true,
|
|
166
|
+
data: {
|
|
167
|
+
response: result,
|
|
168
|
+
model: modelKey,
|
|
169
|
+
metadata: {
|
|
170
|
+
cost: request.prompt.length * modelConfig.costPerToken,
|
|
171
|
+
latency: modelConfig.avgLatencyMs,
|
|
172
|
+
provider: modelConfig.provider,
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
} catch (error) {
|
|
177
|
+
this.logger.error('Model routing failed', { error });
|
|
178
|
+
return {
|
|
179
|
+
success: false,
|
|
180
|
+
error: {
|
|
181
|
+
code: 'MODEL_ROUTING_ERROR',
|
|
182
|
+
message: error.message,
|
|
183
|
+
details: error.stack,
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Call the actual model (implementation would vary by provider)
|
|
191
|
+
*/
|
|
192
|
+
private async callModel(
|
|
193
|
+
modelKey: string,
|
|
194
|
+
prompt: string,
|
|
195
|
+
context: AgentContext
|
|
196
|
+
): Promise<string> {
|
|
197
|
+
const model = this.models[modelKey];
|
|
198
|
+
|
|
199
|
+
// In a real implementation, this would call the actual model APIs
|
|
200
|
+
// This is a simplified example
|
|
201
|
+
switch (model.provider) {
|
|
202
|
+
case 'ollama':
|
|
203
|
+
return this.callOllama(model.model, prompt);
|
|
204
|
+
case 'openai':
|
|
205
|
+
return this.callOpenAI(model.model, prompt);
|
|
206
|
+
case 'anthropic':
|
|
207
|
+
return this.callAnthropic(model.model, prompt);
|
|
208
|
+
default:
|
|
209
|
+
throw new Error(`Unsupported provider: ${model.provider}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Stub implementations for model providers
|
|
214
|
+
private async callOllama(model: string, prompt: string): Promise<string> {
|
|
215
|
+
// Implementation would call Ollama's API
|
|
216
|
+
return `Response from Ollama (${model}) for prompt: ${prompt.substring(0, 50)}...`;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
private async callOpenAI(model: string, prompt: string): Promise<string> {
|
|
220
|
+
// Implementation would call OpenAI's API
|
|
221
|
+
return `Response from OpenAI (${model}) for prompt: ${prompt.substring(0, 50)}...`;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
private async callAnthropic(model: string, prompt: string): Promise<string> {
|
|
225
|
+
// Implementation would call Anthropic's API
|
|
226
|
+
return `Response from Anthropic (${model}) for prompt: ${prompt.substring(0, 50)}...`;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Example usage
|
|
231
|
+
async function main() {
|
|
232
|
+
const router = new ModelRouterAgent();
|
|
233
|
+
|
|
234
|
+
// Example 1: Fast, low-cost response
|
|
235
|
+
const response1 = await router.process(
|
|
236
|
+
{
|
|
237
|
+
prompt: 'Explain quantum computing in simple terms',
|
|
238
|
+
requirements: {
|
|
239
|
+
maxCostPerToken: 0.000005,
|
|
240
|
+
maxLatencyMs: 2000,
|
|
241
|
+
minCapabilities: ['text-generation'],
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
{}
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
console.log('Example 1 - Fast, low-cost response:');
|
|
248
|
+
console.log(response1);
|
|
249
|
+
|
|
250
|
+
// Example 2: Complex reasoning with higher budget
|
|
251
|
+
const response2 = await router.process(
|
|
252
|
+
{
|
|
253
|
+
prompt:
|
|
254
|
+
'Write a detailed analysis of the latest AI safety research papers',
|
|
255
|
+
requirements: {
|
|
256
|
+
maxCostPerToken: 0.00002,
|
|
257
|
+
maxLatencyMs: 10000,
|
|
258
|
+
minCapabilities: ['analysis', 'reasoning'],
|
|
259
|
+
minContextLength: 16000,
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
{}
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
console.log('\nExample 2 - Complex analysis:');
|
|
266
|
+
console.log(response2);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Run the example if this file is executed directly
|
|
270
|
+
if (require.main === module) {
|
|
271
|
+
main().catch(console.error);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export { ModelRouterAgent };
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSSA Smart Model Router
|
|
3
|
+
* ========================
|
|
4
|
+
*
|
|
5
|
+
* This example demonstrates an advanced model routing pattern that dynamically selects
|
|
6
|
+
* the most appropriate language model based on task requirements, cost constraints,
|
|
7
|
+
* and performance needs.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { Agent, AgentContext, AgentResponse } from '@ossa/core';
|
|
11
|
+
import axios from 'axios';
|
|
12
|
+
import dotenv from 'dotenv';
|
|
13
|
+
|
|
14
|
+
dotenv.config();
|
|
15
|
+
|
|
16
|
+
// Types and Interfaces
|
|
17
|
+
interface ModelConfig {
|
|
18
|
+
provider: 'ollama' | 'openai' | 'anthropic';
|
|
19
|
+
model: string;
|
|
20
|
+
costPerToken: number;
|
|
21
|
+
avgLatencyMs: number;
|
|
22
|
+
maxTokens: number;
|
|
23
|
+
capabilities: string[];
|
|
24
|
+
baseUrl?: string;
|
|
25
|
+
apiKeyEnv?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface ModelRequest {
|
|
29
|
+
prompt: string;
|
|
30
|
+
context?: Record<string, any>;
|
|
31
|
+
requirements?: {
|
|
32
|
+
maxCostPerToken?: number;
|
|
33
|
+
maxLatencyMs?: number;
|
|
34
|
+
minCapabilities?: string[];
|
|
35
|
+
minContextLength?: number;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type ModelKey = keyof typeof MODEL_CONFIGS;
|
|
40
|
+
|
|
41
|
+
// Configuration
|
|
42
|
+
const MODEL_CONFIGS: Record<string, ModelConfig> = {
|
|
43
|
+
llama3: {
|
|
44
|
+
provider: 'ollama',
|
|
45
|
+
model: 'llama3',
|
|
46
|
+
costPerToken: 0.000002,
|
|
47
|
+
avgLatencyMs: 1200,
|
|
48
|
+
maxTokens: 8192,
|
|
49
|
+
capabilities: ['text-generation', 'summarization', 'qna'],
|
|
50
|
+
baseUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434',
|
|
51
|
+
},
|
|
52
|
+
mixtral: {
|
|
53
|
+
provider: 'ollama',
|
|
54
|
+
model: 'mixtral',
|
|
55
|
+
costPerToken: 0.000003,
|
|
56
|
+
avgLatencyMs: 1800,
|
|
57
|
+
maxTokens: 32000,
|
|
58
|
+
capabilities: ['text-generation', 'code', 'reasoning'],
|
|
59
|
+
baseUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434',
|
|
60
|
+
},
|
|
61
|
+
'gpt-4': {
|
|
62
|
+
provider: 'openai',
|
|
63
|
+
model: 'gpt-4-turbo',
|
|
64
|
+
costPerToken: 0.00001,
|
|
65
|
+
avgLatencyMs: 2500,
|
|
66
|
+
maxTokens: 128000,
|
|
67
|
+
capabilities: ['text-generation', 'code', 'reasoning', 'vision'],
|
|
68
|
+
apiKeyEnv: 'OPENAI_API_KEY',
|
|
69
|
+
},
|
|
70
|
+
'claude-3-opus': {
|
|
71
|
+
provider: 'anthropic',
|
|
72
|
+
model: 'claude-3-opus-20240229',
|
|
73
|
+
costPerToken: 0.000015,
|
|
74
|
+
avgLatencyMs: 3000,
|
|
75
|
+
maxTokens: 200000,
|
|
76
|
+
capabilities: ['text-generation', 'analysis', 'summarization'],
|
|
77
|
+
apiKeyEnv: 'ANTHROPIC_API_KEY',
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
class SmartModelRouter extends Agent {
|
|
82
|
+
private models: Record<string, ModelConfig> = MODEL_CONFIGS;
|
|
83
|
+
private http = axios.create();
|
|
84
|
+
|
|
85
|
+
constructor() {
|
|
86
|
+
super({
|
|
87
|
+
name: 'smart-model-router',
|
|
88
|
+
version: '1.0.0',
|
|
89
|
+
description: 'Intelligent model routing for OSSA agents',
|
|
90
|
+
capabilities: [
|
|
91
|
+
'model-routing',
|
|
92
|
+
'cost-optimization',
|
|
93
|
+
'performance-monitoring',
|
|
94
|
+
'fallback-handling',
|
|
95
|
+
],
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Process a request using the best available model
|
|
101
|
+
*/
|
|
102
|
+
async process(
|
|
103
|
+
request: ModelRequest,
|
|
104
|
+
context: AgentContext = {}
|
|
105
|
+
): Promise<AgentResponse> {
|
|
106
|
+
try {
|
|
107
|
+
// Select the best model based on requirements
|
|
108
|
+
const modelKey = this.selectModel(request.requirements);
|
|
109
|
+
const modelConfig = this.models[modelKey];
|
|
110
|
+
|
|
111
|
+
this.logger.info(`Routing to ${modelKey} (${modelConfig.provider})`);
|
|
112
|
+
|
|
113
|
+
// Process the request using the selected model
|
|
114
|
+
const startTime = Date.now();
|
|
115
|
+
const response = await this.routeToModel(modelKey, request, context);
|
|
116
|
+
const latency = Date.now() - startTime;
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
success: true,
|
|
120
|
+
data: {
|
|
121
|
+
model: modelKey,
|
|
122
|
+
response,
|
|
123
|
+
metadata: {
|
|
124
|
+
provider: modelConfig.provider,
|
|
125
|
+
latency,
|
|
126
|
+
cost: this.calculateCost(
|
|
127
|
+
response.usage?.total_tokens || 0,
|
|
128
|
+
modelConfig
|
|
129
|
+
),
|
|
130
|
+
tokens: response.usage?.total_tokens || 0,
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
} catch (error) {
|
|
135
|
+
this.logger.error('Error processing request:', error);
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Select the best model based on requirements
|
|
145
|
+
*/
|
|
146
|
+
private selectModel(
|
|
147
|
+
requirements: ModelRequest['requirements'] = {}
|
|
148
|
+
): ModelKey {
|
|
149
|
+
const {
|
|
150
|
+
maxCostPerToken = Infinity,
|
|
151
|
+
maxLatencyMs = 5000,
|
|
152
|
+
minCapabilities = [],
|
|
153
|
+
minContextLength = 0,
|
|
154
|
+
} = requirements;
|
|
155
|
+
|
|
156
|
+
// Filter models by requirements
|
|
157
|
+
const suitableModels = Object.entries(this.models)
|
|
158
|
+
.filter(([_, config]) => {
|
|
159
|
+
// Check cost constraints
|
|
160
|
+
if (config.costPerToken > maxCostPerToken) return false;
|
|
161
|
+
|
|
162
|
+
// Check latency constraints
|
|
163
|
+
if (config.avgLatencyMs > maxLatencyMs) return false;
|
|
164
|
+
|
|
165
|
+
// Check context length
|
|
166
|
+
if (config.maxTokens < minContextLength) return false;
|
|
167
|
+
|
|
168
|
+
// Check API key availability for cloud providers
|
|
169
|
+
if (config.apiKeyEnv && !process.env[config.apiKeyEnv]) {
|
|
170
|
+
this.logger.warn(`Skipping ${config.model} - missing API key`);
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Check required capabilities
|
|
175
|
+
return minCapabilities.every((cap) =>
|
|
176
|
+
config.capabilities.includes(cap)
|
|
177
|
+
);
|
|
178
|
+
})
|
|
179
|
+
.sort((a, b) => {
|
|
180
|
+
// Prioritize lower cost, then lower latency
|
|
181
|
+
const costDiff = a[1].costPerToken - b[1].costPerToken;
|
|
182
|
+
if (costDiff !== 0) return costDiff;
|
|
183
|
+
return a[1].avgLatencyMs - b[1].avgLatencyMs;
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
if (suitableModels.length === 0) {
|
|
187
|
+
throw new Error('No suitable models found for the given requirements');
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return suitableModels[0][0] as ModelKey;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Route the request to the appropriate model provider
|
|
195
|
+
*/
|
|
196
|
+
private async routeToModel(
|
|
197
|
+
modelKey: string,
|
|
198
|
+
request: ModelRequest,
|
|
199
|
+
context: AgentContext = {}
|
|
200
|
+
): Promise<any> {
|
|
201
|
+
const model = this.models[modelKey];
|
|
202
|
+
|
|
203
|
+
try {
|
|
204
|
+
switch (model.provider) {
|
|
205
|
+
case 'ollama':
|
|
206
|
+
return await this.callOllama(model, request);
|
|
207
|
+
case 'openai':
|
|
208
|
+
return await this.callOpenAI(model, request);
|
|
209
|
+
case 'anthropic':
|
|
210
|
+
return await this.callAnthropic(model, request);
|
|
211
|
+
default:
|
|
212
|
+
throw new Error(`Unsupported provider: ${model.provider}`);
|
|
213
|
+
}
|
|
214
|
+
} catch (error) {
|
|
215
|
+
this.logger.error(`Error calling ${model.provider}:`, error);
|
|
216
|
+
throw error;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Calculate cost based on token usage
|
|
222
|
+
*/
|
|
223
|
+
private calculateCost(tokenCount: number, modelConfig: ModelConfig): number {
|
|
224
|
+
return (tokenCount * modelConfig.costPerToken) / 1000; // Convert to cost per 1k tokens
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Provider-specific implementations will be added in the next step
|
|
228
|
+
private async callOllama(
|
|
229
|
+
model: ModelConfig,
|
|
230
|
+
request: ModelRequest
|
|
231
|
+
): Promise<any> {
|
|
232
|
+
throw new Error('Not implemented');
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
private async callOpenAI(
|
|
236
|
+
model: ModelConfig,
|
|
237
|
+
request: ModelRequest
|
|
238
|
+
): Promise<any> {
|
|
239
|
+
throw new Error('Not implemented');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
private async callAnthropic(
|
|
243
|
+
model: ModelConfig,
|
|
244
|
+
request: ModelRequest
|
|
245
|
+
): Promise<any> {
|
|
246
|
+
throw new Error('Not implemented');
|
|
247
|
+
}
|
|
248
|
+
}
|