form-genie
v2.0.0
Published
A tool that lets you prefill forms based on arbitrary user input.
Downloads
123
Readme
Form Genie
Use LLMs to prefill forms.
Currently supports Google Forms and JotForm. You can also define your own custom form providers using the FormProvider interface.
Installation
npm install form-genie
# or
yarn add form-genie
Usage
Basic Usage with Multiple Providers
import { FormGenie, GoogleFormProvider, JotFormProvider } from 'form-genie';
const formGenie = new FormGenie({
formProviders: [
new GoogleFormProvider(),
new JotFormProvider(process.env.JOTFORM_API_KEY),
],
openAISecret: 'sk-proj-...',
});
// Example 1: Get form parameters
const googleFormParameters = await formGenie.getUrlParameters('https://docs.google.com/forms/d/e/1FAIpQLScdKjyHqtiUA7_wZX0Tt5GZw7JUSoRVlnHHR3i2j0pPKH-o_A/viewform');
console.log('Google Form parameters:', googleFormParameters);
const jotFormParameters = await formGenie.getUrlParameters('https://form.jotform.com/24261751757616');
console.log('JotForm parameters:', jotFormParameters);
// Example 2: Transform user data to parameters
const userData = 'John Doe, 30 years old, software engineer';
const transformedGoogleData = await formGenie.transformUserDataToParameters(
googleFormParameters,
userData,
'https://docs.google.com/forms/d/e/1FAIpQLScdKjyHqtiUA7_wZX0Tt5GZw7JUSoRVlnHHR3i2j0pPKH-o_A/viewform',
);
console.log('Transformed Google Form data:', transformedGoogleData);
// Example 3: Create a prefilled form link
const prefilledGoogleUrl = await formGenie.createPrefilledFormLink(
'https://docs.google.com/forms/d/e/1FAIpQLScdKjyHqtiUA7_wZX0Tt5GZw7JUSoRVlnHHR3i2j0pPKH-o_A/viewform',
userData
);
console.log('Prefilled Google Form URL:', prefilledGoogleUrl);
const prefilledJotFormUrl = await formGenie.createPrefilledFormLink(
'https://form.jotform.com/24261751757616',
userData
);
console.log('Prefilled JotForm URL:', prefilledJotFormUrl);
Custom Form Provider
You can create your own custom form provider by implementing the FormProvider interface:
import { FormGenie, FormProvider } from 'form-genie';
import { Parameter } from 'form-genie/types/parameter';
class CustomFormProvider implements FormProvider {
formProviderName = 'Custom Form Provider';
canHandle(formUrl: string): boolean {
// Implement logic to determine if this provider can handle the given URL
return formUrl.includes('custom-form-provider.com');
}
async getFormParametersFromUrl(formUrl: string): Promise<Parameter[]> {
// Implement your own logic to get form parameters from the URL
return [];
}
createPrefilledLink(formUrl: string, parameters: Record<string, string>): string {
// Implement your own logic to create a prefilled form link
return '';
}
}
const formGenie = new FormGenie({
formProviders: [new CustomFormProvider()],
openAISecret: 'sk-proj-...',
});
TODO
- [ ] Add more form providers
- [ ] Support non-OpenAI providers (Anthropic, Groq, etc.)
- [ ] Add more examples
- [ ] Add more tests
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.