2025-10-27 11:09:12 +09:00

186 lines
5.2 KiB
YAML

spring:
application:
name: ai-service
# Redis Configuration
data:
redis:
host: ${REDIS_HOST:20.214.210.71}
port: ${REDIS_PORT:6379}
password: ${REDIS_PASSWORD:}
database: ${REDIS_DATABASE:3} # AI Service uses database 3
timeout: ${REDIS_TIMEOUT:3000}
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 2
max-wait: -1ms
# Kafka Consumer Configuration
kafka:
bootstrap-servers: ${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
consumer:
group-id: ai-service-consumers
auto-offset-reset: earliest
enable-auto-commit: false
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
properties:
spring.json.trusted.packages: "*"
max.poll.records: ${KAFKA_MAX_POLL_RECORDS:10}
session.timeout.ms: ${KAFKA_SESSION_TIMEOUT:30000}
listener:
ack-mode: manual
# JPA Configuration (Not used but included for consistency)
jpa:
open-in-view: false
show-sql: false
properties:
hibernate:
format_sql: true
use_sql_comments: false
# Database Configuration (Not used but included for consistency)
datasource:
url: jdbc:postgresql://${DB_HOST:4.230.112.141}:${DB_PORT:5432}/${DB_NAME:aidb}
username: ${DB_USERNAME:eventuser}
password: ${DB_PASSWORD:}
driver-class-name: org.postgresql.Driver
hikari:
maximum-pool-size: 10
minimum-idle: 2
connection-timeout: 30000
# Server Configuration
server:
port: ${SERVER_PORT:8083}
servlet:
context-path: /
encoding:
charset: UTF-8
enabled: true
force: true
# JWT Configuration
jwt:
secret: ${JWT_SECRET:}
access-token-validity: ${JWT_ACCESS_TOKEN_VALIDITY:1800}
refresh-token-validity: ${JWT_REFRESH_TOKEN_VALIDITY:86400}
# CORS Configuration
cors:
allowed-origins: ${CORS_ALLOWED_ORIGINS:http://localhost:3000,http://localhost:8080}
allowed-methods: ${CORS_ALLOWED_METHODS:GET,POST,PUT,DELETE,OPTIONS,PATCH}
allowed-headers: ${CORS_ALLOWED_HEADERS:*}
allow-credentials: ${CORS_ALLOW_CREDENTIALS:true}
max-age: ${CORS_MAX_AGE:3600}
# Actuator Configuration
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
endpoint:
health:
show-details: always
health:
redis:
enabled: true
kafka:
enabled: true
# OpenAPI Documentation Configuration
springdoc:
api-docs:
path: /v3/api-docs
enabled: true
swagger-ui:
path: /swagger-ui.html
enabled: true
operations-sorter: method
tags-sorter: alpha
display-request-duration: true
doc-expansion: none
show-actuator: false
default-consumes-media-type: application/json
default-produces-media-type: application/json
# Logging Configuration
logging:
level:
root: INFO
com.kt.ai: DEBUG
org.springframework.kafka: INFO
org.springframework.data.redis: INFO
io.github.resilience4j: DEBUG
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
# Kafka Topics Configuration
kafka:
topics:
ai-job: ${KAFKA_TOPIC_AI_JOB:ai-event-generation-job}
ai-job-dlq: ${KAFKA_TOPIC_AI_JOB_DLQ:ai-event-generation-job-dlq}
# AI External API Configuration
ai:
claude:
api-url: ${CLAUDE_API_URL:https://api.anthropic.com/v1/messages}
api-key: ${CLAUDE_API_KEY:}
model: ${CLAUDE_MODEL:claude-3-5-sonnet-20241022}
max-tokens: ${CLAUDE_MAX_TOKENS:4096}
timeout: ${CLAUDE_TIMEOUT:300000} # 5 minutes
gpt4:
api-url: ${GPT4_API_URL:https://api.openai.com/v1/chat/completions}
api-key: ${GPT4_API_KEY:}
model: ${GPT4_MODEL:gpt-4-turbo-preview}
max-tokens: ${GPT4_MAX_TOKENS:4096}
timeout: ${GPT4_TIMEOUT:300000} # 5 minutes
provider: ${AI_PROVIDER:CLAUDE} # CLAUDE or GPT4
# Circuit Breaker Configuration
resilience4j:
circuitbreaker:
configs:
default:
failure-rate-threshold: 50
slow-call-rate-threshold: 50
slow-call-duration-threshold: 60s
permitted-number-of-calls-in-half-open-state: 3
max-wait-duration-in-half-open-state: 0
sliding-window-type: COUNT_BASED
sliding-window-size: 10
minimum-number-of-calls: 5
wait-duration-in-open-state: 60s
automatic-transition-from-open-to-half-open-enabled: true
instances:
claudeApi:
base-config: default
failure-rate-threshold: 50
wait-duration-in-open-state: 60s
gpt4Api:
base-config: default
failure-rate-threshold: 50
wait-duration-in-open-state: 60s
timelimiter:
configs:
default:
timeout-duration: 300s # 5 minutes
instances:
claudeApi:
timeout-duration: 300s
gpt4Api:
timeout-duration: 300s
# Redis Cache TTL Configuration (seconds)
cache:
ttl:
recommendation: ${CACHE_TTL_RECOMMENDATION:86400} # 24 hours
job-status: ${CACHE_TTL_JOB_STATUS:86400} # 24 hours
trend: ${CACHE_TTL_TREND:3600} # 1 hour
fallback: ${CACHE_TTL_FALLBACK:604800} # 7 days