LocalMode
Core

Question Answering

Extract answers from text context using extractive QA models.

Extract precise answers from a given context using extractive question answering models. The model identifies the span of text in the context that best answers the question.

See it in action

Try QA Bot for a working demo of these APIs.

answerQuestion()

Answer a question given a context:

import { answerQuestion } from '@localmode/core';
import { transformers } from '@localmode/transformers';

const model = transformers.questionAnswering('Xenova/distilbert-base-cased-distilled-squad');

const { answer, score, start, end } = await answerQuestion({
  model,
  question: 'What is the capital of France?',
  context: 'France is a country in Europe. The capital of France is Paris. It is known for the Eiffel Tower.',
});

console.log(answer); // 'Paris'
console.log(score);  // 0.98
console.log(start);  // 51
console.log(end);    // 56
const controller = new AbortController();

setTimeout(() => controller.abort(), 5000);

const { answer } = await answerQuestion({
  model,
  question: 'What is the capital of France?',
  context: 'The capital of France is Paris.',
  abortSignal: controller.signal,
});

AnswerQuestionOptions

Prop

Type

AnswerQuestionResult

Prop

Type

answerQuestionMany()

Answer multiple questions:

import { answerQuestionMany } from '@localmode/core';

const { answers } = await answerQuestionMany({
  model,
  questions: [
    { question: 'What is the capital?', context: 'The capital of France is Paris.' },
    { question: 'What is it known for?', context: 'Paris is known for the Eiffel Tower.' },
  ],
});

answers.forEach((answerSet) => {
  answerSet.forEach((a) => console.log(`${a.answer} (${a.score.toFixed(2)})`));
});

Custom Provider

Implement the QuestionAnsweringModel interface:

import type {
  QuestionAnsweringModel,
  DoAnswerQuestionOptions,
  DoAnswerQuestionResult,
} from '@localmode/core';

class MyQAModel implements QuestionAnsweringModel {
  readonly modelId = 'custom:my-qa';
  readonly provider = 'custom';

  async doAnswer(options: DoAnswerQuestionOptions): Promise<DoAnswerQuestionResult> {
    const { questions } = options;

    // Your QA logic here
    const answers = questions.map(({ question, context }) => [
      { answer: 'example', score: 0.9, start: 0, end: 7 },
    ]);

    return {
      answers,
      usage: { inputTokens: 0, durationMs: 0 },
    };
  }
}

For recommended models, provider-specific options, and practical recipes, see the Transformers Question Answering guide.

Next Steps

Showcase Apps

AppDescriptionLinks
QA BotAnswer questions from provided contextDemo · Source

On this page