feat: Add typed stuff
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
import {
|
||||
createClaudeProvider,
|
||||
createResponseType,
|
||||
validateResponseType,
|
||||
parseAndValidateResponseType,
|
||||
AIProviderError,
|
||||
AIErrorType
|
||||
} from '../src/index.js';
|
||||
@@ -137,7 +137,7 @@ async function demonstrateUserProfileGeneration() {
|
||||
await claude.initialize();
|
||||
|
||||
try {
|
||||
const response = await claude.complete({
|
||||
const response = await claude.complete<UserProfile>({
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
@@ -149,23 +149,16 @@ async function demonstrateUserProfileGeneration() {
|
||||
temperature: 0.7
|
||||
});
|
||||
|
||||
console.log('Raw response:', response.content);
|
||||
console.log('Raw response:', response.rawContent);
|
||||
|
||||
// Validate and parse the response
|
||||
const validation = validateResponseType(response.content, userProfileType);
|
||||
|
||||
if (validation.isValid) {
|
||||
const userProfile = validation.data as UserProfile;
|
||||
console.log('\nParsed User Profile:');
|
||||
console.log(`Name: ${userProfile.name}`);
|
||||
console.log(`Age: ${userProfile.age}`);
|
||||
console.log(`Email: ${userProfile.email}`);
|
||||
console.log(`Theme Preference: ${userProfile.preferences.theme}`);
|
||||
console.log(`Notifications: ${userProfile.preferences.notifications}`);
|
||||
console.log(`Skills: ${userProfile.skills.join(', ')}`);
|
||||
} else {
|
||||
console.error('Validation failed:', validation.error);
|
||||
}
|
||||
const userProfile = response.content;
|
||||
console.log('\nParsed User Profile:');
|
||||
console.log(`Name: ${userProfile.name}`);
|
||||
console.log(`Age: ${userProfile.age}`);
|
||||
console.log(`Email: ${userProfile.email}`);
|
||||
console.log(`Theme Preference: ${userProfile.preferences.theme}`);
|
||||
console.log(`Notifications: ${userProfile.preferences.notifications}`);
|
||||
console.log(`Skills: ${userProfile.skills.join(', ')}`);
|
||||
|
||||
} catch (error) {
|
||||
if (error instanceof AIProviderError) {
|
||||
@@ -183,7 +176,7 @@ async function demonstrateProductAnalysis() {
|
||||
await claude.initialize();
|
||||
|
||||
try {
|
||||
const response = await claude.complete({
|
||||
const response = await claude.complete<ProductAnalysis>({
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
@@ -195,24 +188,18 @@ async function demonstrateProductAnalysis() {
|
||||
temperature: 0.5
|
||||
});
|
||||
|
||||
console.log('Raw response:', response.content);
|
||||
console.log('Raw response:', response.rawContent);
|
||||
|
||||
const validation = validateResponseType(response.content, productAnalysisType);
|
||||
|
||||
if (validation.isValid) {
|
||||
const analysis = validation.data as ProductAnalysis;
|
||||
console.log('\nProduct Analysis:');
|
||||
console.log(`Product: ${analysis.productName}`);
|
||||
console.log(`Category: ${analysis.category}`);
|
||||
console.log(`Price Range: ${analysis.priceRange}`);
|
||||
console.log(`Overall Rating: ${analysis.overallRating}/10`);
|
||||
console.log(`Recommendation: ${analysis.recommendation}`);
|
||||
console.log(`Pros: ${analysis.pros.join(', ')}`);
|
||||
console.log(`Cons: ${analysis.cons.join(', ')}`);
|
||||
console.log(`Reasoning: ${analysis.reasoning}`);
|
||||
} else {
|
||||
console.error('Validation failed:', validation.error);
|
||||
}
|
||||
const analysis = response.content;
|
||||
console.log('\nProduct Analysis:');
|
||||
console.log(`Product: ${analysis.productName}`);
|
||||
console.log(`Category: ${analysis.category}`);
|
||||
console.log(`Price Range: ${analysis.priceRange}`);
|
||||
console.log(`Overall Rating: ${analysis.overallRating}/10`);
|
||||
console.log(`Recommendation: ${analysis.recommendation}`);
|
||||
console.log(`Pros: ${analysis.pros.join(', ')}`);
|
||||
console.log(`Cons: ${analysis.cons.join(', ')}`);
|
||||
console.log(`Reasoning: ${analysis.reasoning}`);
|
||||
|
||||
} catch (error) {
|
||||
if (error instanceof AIProviderError) {
|
||||
@@ -248,39 +235,36 @@ function processPayment(amount, cardNumber) {
|
||||
`;
|
||||
|
||||
try {
|
||||
const response = await claude.complete({
|
||||
const response = await claude.complete<CodeReview>({
|
||||
messages: [
|
||||
{
|
||||
role: 'user',
|
||||
content: `Please review this JavaScript code and provide a comprehensive analysis:\n\n\`\`\`javascript\n${sampleCode}\n\`\`\``
|
||||
}
|
||||
content: `Please review this JavaScript code and provide a comprehensive analysis:\n\n\
|
||||
`${sampleCode}
|
||||
\
|
||||
``` `
|
||||
}
|
||||
],
|
||||
responseType: codeReviewType,
|
||||
maxTokens: 1000,
|
||||
temperature: 0.3
|
||||
});
|
||||
|
||||
console.log('Raw response:', response.content);
|
||||
console.log('Raw response:', response.rawContent);
|
||||
|
||||
const validation = validateResponseType(response.content, codeReviewType);
|
||||
|
||||
if (validation.isValid) {
|
||||
const review = validation.data as CodeReview;
|
||||
console.log('\nCode Review:');
|
||||
console.log(`Overall Score: ${review.overallScore}/10`);
|
||||
console.log(`Summary: ${review.summary}`);
|
||||
console.log(`\nStrengths:`);
|
||||
review.strengths.forEach(strength => console.log(` • ${strength}`));
|
||||
console.log(`\nImprovements:`);
|
||||
review.improvements.forEach(improvement => console.log(` • ${improvement}`));
|
||||
console.log(`\nIssues:`);
|
||||
review.issues.forEach(issue => {
|
||||
const lineInfo = issue.line ? ` (line ${issue.line})` : '';
|
||||
console.log(` • [${issue.severity.toUpperCase()}] ${issue.type}: ${issue.message}${lineInfo}`);
|
||||
});
|
||||
} else {
|
||||
console.error('Validation failed:', validation.error);
|
||||
}
|
||||
const review = response.content;
|
||||
console.log('\nCode Review:');
|
||||
console.log(`Overall Score: ${review.overallScore}/10`);
|
||||
console.log(`Summary: ${review.summary}`);
|
||||
console.log(`\nStrengths:`);
|
||||
review.strengths.forEach(strength => console.log(` • ${strength}`));
|
||||
console.log(`\nImprovements:`);
|
||||
review.improvements.forEach(improvement => console.log(` • ${improvement}`));
|
||||
console.log(`\nIssues:`);
|
||||
review.issues.forEach(issue => {
|
||||
const lineInfo = issue.line ? ` (line ${issue.line})` : '';
|
||||
console.log(` • [${issue.severity.toUpperCase()}] ${issue.type}: ${issue.message}${lineInfo}`);
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
if (error instanceof AIProviderError) {
|
||||
@@ -319,11 +303,12 @@ async function demonstrateStreamingWithResponseType() {
|
||||
console.log('\n\nStream completed. Usage:', chunk.usage);
|
||||
|
||||
// Validate the complete streamed response
|
||||
const validation = validateResponseType(fullResponse, productAnalysisType);
|
||||
if (validation.isValid) {
|
||||
try {
|
||||
const analysis = parseAndValidateResponseType(fullResponse, productAnalysisType);
|
||||
console.log('\nStreamed response validation: SUCCESS');
|
||||
} else {
|
||||
console.log('\nStreamed response validation: FAILED -', validation.error);
|
||||
console.log(`Product: ${analysis.productName}`);
|
||||
} catch (e) {
|
||||
console.log('\nStreamed response validation: FAILED -', (e as Error).message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user