kibana/x-pack/solutions/observability/packages/kbn-genai-cli/utils/run_recipe.ts
Dario Gieselaar dd7ed50d9b
[Inference] Run EIS locally (#215475)
1. Make sure you're connected to [Infra
Vault](https://docs.elastic.dev/vault/infra-vault/home) using oidc:
`$ VAULT_ADDR={...} vault login -method oidc`

2. Run the `eis` script:
`$ node scripts/eis.js`

2a. After it's started, run ES with:
`$ yarn es snapshot --license trial -E
xpack.inference.elastic.url=http://localhost:8443`
2b. The command will output credentials for a preconfigured EIS
connector. Paste it into kibana(.dev).yml.

3. Start Kibana as usual. 

4. Run:
`yarn run ts-node --transpile-only
x-pack/solutions/observability/packages/kbn-genai-cli/recipes/hello_world.ts`

This should output:

```
 ~/dev/kibana  eis-connector-cli *219  yarn run ts-node --transpile-only x-pack/solutions/observability/packages/kbn-genai-cli/recipes/hello_world.ts
yarn run v1.22.22
$ /Users/dariogieselaar/dev/kibana/node_modules/.bin/ts-node --transpile-only x-pack/solutions/observability/packages/kbn-genai-cli/recipes/hello_world.ts 
 info Discovered kibana running at: http://elastic:changeme@127.0.0.1:5601/kbn
 info {
        id: 'extract_personal_details',
        content: '',
        output: { name: 'Sarah', age: 29, city: 'San Francisco' }
      }
  Done in 5.47s.
```

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Dima Arnautov <arnautov.dima@gmail.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
2025-04-23 08:08:33 +02:00

54 lines
1.4 KiB
TypeScript

/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { run } from '@kbn/dev-cli-runner';
import { createInferenceClient, InferenceCliClient } from '@kbn/inference-cli';
import { ToolingLog } from '@kbn/tooling-log';
import { createKibanaClient, KibanaClient } from '@kbn/kibana-api-cli';
type RunRecipeCallback = (options: {
inferenceClient: InferenceCliClient;
kibanaClient: KibanaClient;
log: ToolingLog;
signal: AbortSignal;
}) => Promise<void>;
export function runRecipe(callback: RunRecipeCallback) {
run(
async ({ log, addCleanupTask, flags }) => {
const controller = new AbortController();
const signal = controller.signal;
addCleanupTask(() => {
controller.abort();
});
const kibanaClient = await createKibanaClient({ log, signal });
const inferenceClient = await createInferenceClient({
log,
signal,
kibanaClient,
connectorId: flags.connectorId as string | undefined,
});
return await callback({
inferenceClient,
kibanaClient,
log,
signal,
});
},
{
flags: {
boolean: ['connectorId'],
help: `
--connectorId Use a specific connector id
`,
},
}
);
}