Ctrl K
ComunidadGuías…

examples/query-router-host-hooks.mjs

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env node
// Example: QueryRouter with host-injected graph/rerank/research hooks
//
// Usage:
//   export OPENAI_API_KEY="sk-..."   # Required (used for embeddings + LLM)
//   node examples/query-router-host-hooks.mjs
//
// Note: If OPENROUTER_API_KEY is also set, it may be auto-detected first.
// OpenRouter doesn't support embeddings, so unset it or ensure OPENAI_API_KEY is set.

import { QueryRouter } from '../dist/index.js';

async function main() {
  const router = new QueryRouter({
    knowledgeCorpus: ['./docs', './packages/agentos/docs'],
    availableTools: ['web_search', 'deep_research'],
    graphEnabled: true,
    deepResearchEnabled: true,
    graphExpand: async (seedChunks) => {
      return [
        ...seedChunks,
        {
          id: 'host-graph-1',
          heading: 'Graph-related context',
          content: 'This chunk was added by a host-provided graph expansion hook.',
          sourcePath: '/virtual/graph-hook',
          relevanceScore: 0.73,
          matchType: 'graph',
        },
      ];
    },
    rerank: async (_query, chunks, topN) => {
      return [...chunks]
        .sort((left, right) => right.relevanceScore - left.relevanceScore)
        .slice(0, topN);
    },
    deepResearch: async (query, sources) => {
      return {
        synthesis: `Host-provided deep research synthesis for "${query}" using ${sources.join(', ')}.`,
        sources: [
          {
            id: 'host-research-1',
            heading: 'External research synthesis',
            content: 'This source came from a host-provided deep research hook.',
            sourcePath: '/virtual/deep-research-hook',
            relevanceScore: 0.84,
            matchType: 'research',
          },
        ],
      };
    },
  });

  await router.init();

  console.log('\n=== corpus stats ===\n');
  console.log(router.getCorpusStats());

  const result = await router.route(
    'Compare AgentOS memory architecture to more basic retrieval-only assistants.'
  );

  console.log('\n=== answer ===\n');
  console.log(result.answer);

  console.log('\n=== routing metadata ===\n');
  console.log('classified tier:', result.classification.tier);
  console.log('tiers used:', result.tiersUsed);
  console.log('fallbacks used:', result.fallbacksUsed);

  console.log('\n=== sources ===\n');
  for (const source of result.sources) {
    console.log(`- ${source.heading} (${source.path})`);
  }

  await router.close();
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});