Skip to content

Commit 27ee1fd

Browse files
committed
feat: Implement GitHub Models Service for microblog content generation
- Added GitHubModelsService to handle content generation using OpenAI's GPT-4o model. - Introduced tone guidelines for generating content in different styles (technical, casual, motivational). - Created methods for generating microblog content, validating environment variables, and handling retries. - Implemented a factory pattern for LangChain services to manage instances and configurations. - Developed LangChainMicroblogService for generating microblog content with structured output parsing. - Added error handling and validation utilities for API requests and content generation. - Established rate limiting and retry mechanisms to enhance API reliability. - Created prompt services to standardize system and user prompts for content generation. - Added utility functions for formatting hashtags and managing character counts. - Enhanced error classification and retry management for robust error handling.
1 parent 4fe1fb0 commit 27ee1fd

25 files changed

+18
-27
lines changed

src/app/api/generate/route.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { NextRequest, NextResponse } from 'next/server';
2-
import { getContentGenerationService } from '@/lib/services/content-generation.service';
3-
import { validateApiRequest } from '@/lib/utils/api-validation';
4-
import { checkRateLimit } from '../../../lib/utils/rate-limiting';
5-
import { handleApiError } from '@/lib/utils/error-handler';
2+
import { getContentGenerationService } from '@/shared/services/content-generation.service';
3+
import { validateApiRequest } from '../../../shared/utils/api-validation';
4+
import { checkRateLimit } from '../../../shared/utils/rate-limiting';
5+
import { handleApiError } from '../../../shared/utils/error-handler';
66
import type { GenerateApiRequest, GenerateApiResponse } from '@/types';
77

88
export async function POST(request: NextRequest) {

src/app/api/migration-status/route.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NextResponse } from 'next/server';
2-
import { LangChainService } from '../../../lib/services/langchain.factory';
3-
import { getContentGenerationService } from '../../../lib/services/content-generation.service';
2+
import { LangChainService } from '../../../shared/services/langchain.factory';
3+
import { getContentGenerationService } from '../../../shared/services/content-generation.service';
44

55
export async function GET() {
66
try {

src/app/api/test-migration/route.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NextResponse } from 'next/server';
2-
import { LangChainService } from '../../../lib/services/langchain.factory';
3-
import { getContentGenerationService } from '../../../lib/services/content-generation.service';
2+
import { LangChainService } from '../../../shared/services/langchain.factory';
3+
import { getContentGenerationService } from '../../../shared/services/content-generation.service';
44

55
export async function GET() {
66
try {

src/app/components/PreviewCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import React from 'react';
44
import { GeneratedContent } from '@/types';
5-
import { formatHashtags, createFullContent } from '@/lib/utils/formatting';
5+
import { formatHashtags, createFullContent } from '../../shared/utils/formatting';
66
import { useCopyToClipboard } from '../../hooks/useCopyToClipboard';
77
import { ContentSection } from './preview/ContentSection';
88
import { HashtagsDisplay } from './preview/HashtagsDisplay';

src/app/components/generation/GenerationForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import React from 'react';
44
import { FormState, ToneOfVoice, GenerateApiRequest } from '@/types';
55
import { MICROBLOG_LIMITS } from '@/lib/constants/app';
66
import EnhancedTextInput from '../EnhancedTextInput';
7-
import ToneSelector from '../ToneSelector';
7+
import ToneSelector from '../../components/tone/ToneSelector';
88
import CharacterCounter from '../CharacterCounter';
99

1010
interface GenerationFormProps {

src/app/components/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ export { default as EnhancedTextInput } from './EnhancedTextInput';
55
export { default as LoadingOverlay } from './LoadingOverlay';
66
export { default as PreviewCard } from './PreviewCard';
77
export { default as SuccessNotification } from './SuccessNotification';
8-
export { default as ToneSelector } from './ToneSelector';
9-
10-
// Preview components
8+
export { default as ToneSelector } from '../components/tone/ToneSelector';
119
export * from './preview/CopyButton';
1210
export * from './preview/ContentSection';
1311
export * from './preview/HashtagsDisplay';

src/hooks/useFormValidation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useState, useCallback } from 'react';
2-
import { validateFormData, ValidationResult } from '@/lib/utils/validation';
2+
import { validateFormData, ValidationResult } from '../shared/utils/validation';
33
import { FormState, ToneOfVoice } from '@/types';
44

55
interface UseFormValidationReturn {

src/lib/index.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,9 @@ export * from './constants/tones';
55
// Data
66
export * from './data/features';
77

8-
// Utils
9-
export * from './utils/validation';
10-
export * from './utils/formatting';
11-
export * from './utils/api-validation';
12-
export * from './utils/rate-limiting';
13-
export * from './utils/error-handler';
14-
158
// Services
16-
export * from './services/content-generation.service';
17-
export * from './services/prompt.services';
9+
export * from '../shared/services/content-generation.service';
10+
export * from '../shared/services/prompt.services';
1811

1912
// Errors
2013
export * from './errors/app-errors';
File renamed without changes.

0 commit comments

Comments
 (0)