Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
59 KiB
JSON

{"repo": "bage2014/study", "files": {"study-ai-dev-flow/ai-pipeline-core/src/main/resources/application.yml": {"e8449e671f453111d21bb38d72841f353dcbac61": {"t": 1785745236.4251595, "n": 998, "h": "e8579417cf250c0a", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-core\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_REQUIREMENT_MODEL_PROVIDER:deepseek}\n codegen-model-provider: ${AI_CODEGEN_MODEL_PROVIDER:deepseek}\n requirement-model: ${AI_REQUIREMENT_MODEL:deepseek-chat}\n codegen-model: ${AI_CODEGEN_MODEL:deepseek-chat}\n deepseek:\n api-key: ${AI_DEEPSEEK_API_KEY:}\n base-url: ${AI_DEEPSEEK_BASE_URL:https://api.deepseek.com/v1}\n openai:\n api-key: ${AI_OPENAI_API_KEY:}\n anthropic:\n api-key: ${AI_ANTHROPIC_API_KEY:}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN\n"}, "99ec9299c22443fda6a8c67cf8b75db75c2e052e": {"t": 1785749081.4934063, "n": 998, "h": "e8579417cf250c0a", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-core\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_REQUIREMENT_MODEL_PROVIDER:deepseek}\n codegen-model-provider: ${AI_CODEGEN_MODEL_PROVIDER:deepseek}\n requirement-model: ${AI_REQUIREMENT_MODEL:deepseek-chat}\n codegen-model: ${AI_CODEGEN_MODEL:deepseek-chat}\n deepseek:\n api-key: ${AI_DEEPSEEK_API_KEY:}\n base-url: ${AI_DEEPSEEK_BASE_URL:https://api.deepseek.com/v1}\n openai:\n api-key: ${AI_OPENAI_API_KEY:}\n anthropic:\n api-key: ${AI_ANTHROPIC_API_KEY:}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN\n"}, "55de1e5157e5c27c2afe562fa0ac4c17d184aa96": {"t": 1785749082.7338927, "n": 607, "h": "c8b34cbd69df9157", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-core\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: mock\n codegen-model-provider: mock\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN\n"}, "f967e5d48c098fd3eefc0207b3e596222ff1c607": {"t": 1786067318.1263509, "n": 998, "h": "e8579417cf250c0a", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-core\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_REQUIREMENT_MODEL_PROVIDER:deepseek}\n codegen-model-provider: ${AI_CODEGEN_MODEL_PROVIDER:deepseek}\n requirement-model: ${AI_REQUIREMENT_MODEL:deepseek-chat}\n codegen-model: ${AI_CODEGEN_MODEL:deepseek-chat}\n deepseek:\n api-key: ${AI_DEEPSEEK_API_KEY:}\n base-url: ${AI_DEEPSEEK_BASE_URL:https://api.deepseek.com/v1}\n openai:\n api-key: ${AI_OPENAI_API_KEY:}\n anthropic:\n api-key: ${AI_ANTHROPIC_API_KEY:}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN\n"}, "2ae32c1dffc23fd1d350fe6005015a29d077f958": {"t": 1786068220.5722692, "n": 998, "h": "e8579417cf250c0a", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-core\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_REQUIREMENT_MODEL_PROVIDER:deepseek}\n codegen-model-provider: ${AI_CODEGEN_MODEL_PROVIDER:deepseek}\n requirement-model: ${AI_REQUIREMENT_MODEL:deepseek-chat}\n codegen-model: ${AI_CODEGEN_MODEL:deepseek-chat}\n deepseek:\n api-key: ${AI_DEEPSEEK_API_KEY:}\n base-url: ${AI_DEEPSEEK_BASE_URL:https://api.deepseek.com/v1}\n openai:\n api-key: ${AI_OPENAI_API_KEY:}\n anthropic:\n api-key: ${AI_ANTHROPIC_API_KEY:}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN\n"}}, "study-ai-dev-flow/ai-pipeline-agent/src/main/java/com/bage/ai/pipeline/agent/config/ModelGatewayConfig.java": {"e8449e671f453111d21bb38d72841f353dcbac61": {"t": 1785745655.337555, "n": 3156, "h": "489a2dd1717869a7", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.chat.DisabledChatLanguageModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Slf4j\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.deepseek.api-key:}\")\n private String deepseekApiKey;\n\n @Value(\"${ai.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:deepseek}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:deepseek}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:deepseek-chat}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:deepseek-chat}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n log.info(\"Building requirement model with provider: {}, model: {}\", requirementProvider, requirementModelName);\n ChatLanguageModel model = buildModel(requirementProvider, requirementModelName, 4096);\n log.info(\"Requirement model built successfully: {}\", model.getClass().getSimpleName());\n return model;\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n log.info(\"Building codegen model with provider: {}, model: {}\", codeGenProvider, codeGenModelName);\n ChatLanguageModel model = buildModel(codeGenProvider, codeGenModelName, 8192);\n log.info(\"Codegen model built successfully: {}\", model.getClass().getSimpleName());\n return model;\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"openai\", \"deepseek\" -> buildDeepSeekModel(modelName, maxTokens);\n case \"none\" -> {\n log.warn(\"AI provider is set to 'none', using DisabledChatLanguageModel\");\n yield new DisabledChatLanguageModel();\n }\n default -> throw new IllegalStateException(\"Unknown AI provider: \" + provider + \". Supported providers: openai, deepseek, none\");\n };\n }\n\n private ChatLanguageModel buildDeepSeekModel(String modelName, int maxTokens) {\n if (deepseekApiKey == null || deepseekApiKey.isEmpty()) {\n throw new IllegalStateException(\"DeepSeek API key is not configured. \" +\n \"Please set AI_DEEPSEEK_API_KEY in .env file or environment variable.\");\n }\n log.info(\"Creating DeepSeek model: {} with baseUrl: {}, maxTokens: {}\", \n modelName, deepseekBaseUrl, maxTokens);\n OpenAiChatModel.OpenAiChatModelBuilder builder = OpenAiChatModel.builder()\n .apiKey(deepseekApiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .baseUrl(deepseekBaseUrl);\n return builder.build();\n }\n}"}, "f77966e58c42c9f607b2880972e87e59297ce96c": {"t": 1785749082.3676605, "n": 3156, "h": "489a2dd1717869a7", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.chat.DisabledChatLanguageModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Slf4j\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.deepseek.api-key:}\")\n private String deepseekApiKey;\n\n @Value(\"${ai.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:deepseek}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:deepseek}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:deepseek-chat}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:deepseek-chat}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n log.info(\"Building requirement model with provider: {}, model: {}\", requirementProvider, requirementModelName);\n ChatLanguageModel model = buildModel(requirementProvider, requirementModelName, 4096);\n log.info(\"Requirement model built successfully: {}\", model.getClass().getSimpleName());\n return model;\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n log.info(\"Building codegen model with provider: {}, model: {}\", codeGenProvider, codeGenModelName);\n ChatLanguageModel model = buildModel(codeGenProvider, codeGenModelName, 8192);\n log.info(\"Codegen model built successfully: {}\", model.getClass().getSimpleName());\n return model;\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"openai\", \"deepseek\" -> buildDeepSeekModel(modelName, maxTokens);\n case \"none\" -> {\n log.warn(\"AI provider is set to 'none', using DisabledChatLanguageModel\");\n yield new DisabledChatLanguageModel();\n }\n default -> throw new IllegalStateException(\"Unknown AI provider: \" + provider + \". Supported providers: openai, deepseek, none\");\n };\n }\n\n private ChatLanguageModel buildDeepSeekModel(String modelName, int maxTokens) {\n if (deepseekApiKey == null || deepseekApiKey.isEmpty()) {\n throw new IllegalStateException(\"DeepSeek API key is not configured. \" +\n \"Please set AI_DEEPSEEK_API_KEY in .env file or environment variable.\");\n }\n log.info(\"Creating DeepSeek model: {} with baseUrl: {}, maxTokens: {}\", \n modelName, deepseekBaseUrl, maxTokens);\n OpenAiChatModel.OpenAiChatModelBuilder builder = OpenAiChatModel.builder()\n .apiKey(deepseekApiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .baseUrl(deepseekBaseUrl);\n return builder.build();\n }\n}"}, "2ae37d9e93525fff0c12c6675d40475d3a6f86b7": {"t": 1785749083.660593, "n": 3577, "h": "4b2552ce60b95faf", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.anthropic.AnthropicChatModel;\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.chat.DisabledChatLanguageModel;\nimport dev.langchain4j.model.ollama.OllamaChatModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.anthropic.api-key:}\")\n private String anthropicApiKey;\n\n @Value(\"${ai.openai.api-key:}\")\n private String openAiApiKey;\n\n @Value(\"${ai.deepseek.api-key:}\")\n private String deepseekApiKey;\n\n @Value(\"${ai.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${ai.ollama.base-url:http://localhost:11434}\")\n private String ollamaBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:none}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:none}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:deepseek-chat}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:deepseek-chat}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n return buildModel(requirementProvider, requirementModelName, 4096);\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n return buildModel(codeGenProvider, codeGenModelName, 8192);\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"openai\" -> buildOpenAiModel(openAiApiKey, null, modelName, maxTokens);\n case \"deepseek\" -> buildOpenAiModel(deepseekApiKey, deepseekBaseUrl, modelName, maxTokens);\n case \"ollama\" -> OllamaChatModel.builder()\n .baseUrl(ollamaBaseUrl)\n .modelName(modelName)\n .build();\n case \"none\" -> new DisabledChatLanguageModel();\n default -> throw new IllegalStateException(\"Unknown AI provider: \" + provider + \". Supported providers: openai, deepseek, ollama, none\");\n };\n }\n\n private ChatLanguageModel buildOpenAiModel(String apiKey, String baseUrl, String modelName, int maxTokens) {\n if (apiKey == null || apiKey.isEmpty()) {\n throw new IllegalStateException(\"AI API key is not configured. Please set DEEPSEEK_API_KEY environment variable or configure ai.deepseek.api-key in application.yml.\");\n }\n OpenAiChatModel.OpenAiChatModelBuilder builder = OpenAiChatModel.builder()\n .apiKey(apiKey)\n .modelName(modelName)\n .maxTokens(maxTokens);\n if (baseUrl != null && !baseUrl.isEmpty()) {\n builder.baseUrl(baseUrl);\n }\n return builder.build();\n }\n\n private ChatLanguageModel buildAnthropicModel(String apiKey, String modelName, int maxTokens) {\n if (apiKey == null || apiKey.isEmpty()) {\n throw new IllegalStateException(\"AI API key is not configured. Please set ANTHROPIC_API_KEY environment variable or configure ai.anthropic.api-key in application.yml.\");\n }\n return AnthropicChatModel.builder()\n .apiKey(apiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .build();\n }\n}"}, "2029186d266a226136952aa9acfd8e203756ab84": {"t": 1785749085.2002285, "n": 3458, "h": "298acde6153f187e", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.anthropic.AnthropicChatModel;\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.ollama.OllamaChatModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.anthropic.api-key:}\")\n private String anthropicApiKey;\n\n @Value(\"${ai.openai.api-key:}\")\n private String openAiApiKey;\n\n @Value(\"${ai.deepseek.api-key:}\")\n private String deepseekApiKey;\n\n @Value(\"${ai.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${ai.ollama.base-url:http://localhost:11434}\")\n private String ollamaBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:deepseek}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:deepseek}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:deepseek-chat}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:deepseek-chat}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n return buildModel(requirementProvider, requirementModelName, 4096);\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n return buildModel(codeGenProvider, codeGenModelName, 8192);\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"openai\" -> buildOpenAiModel(openAiApiKey, null, modelName, maxTokens);\n case \"deepseek\" -> buildOpenAiModel(deepseekApiKey, deepseekBaseUrl, modelName, maxTokens);\n case \"ollama\" -> OllamaChatModel.builder()\n .baseUrl(ollamaBaseUrl)\n .modelName(modelName)\n .build();\n default -> throw new IllegalStateException(\"Unknown AI provider: \" + provider + \". Supported providers: openai, deepseek, ollama\");\n };\n }\n\n private ChatLanguageModel buildOpenAiModel(String apiKey, String baseUrl, String modelName, int maxTokens) {\n if (apiKey == null || apiKey.isEmpty()) {\n throw new IllegalStateException(\"AI API key is not configured. Please set DEEPSEEK_API_KEY environment variable or configure ai.deepseek.api-key in application.yml.\");\n }\n OpenAiChatModel.OpenAiChatModelBuilder builder = OpenAiChatModel.builder()\n .apiKey(apiKey)\n .modelName(modelName)\n .maxTokens(maxTokens);\n if (baseUrl != null && !baseUrl.isEmpty()) {\n builder.baseUrl(baseUrl);\n }\n return builder.build();\n }\n\n private ChatLanguageModel buildAnthropicModel(String apiKey, String modelName, int maxTokens) {\n if (apiKey == null || apiKey.isEmpty()) {\n throw new IllegalStateException(\"AI API key is not configured. Please set ANTHROPIC_API_KEY environment variable or configure ai.anthropic.api-key in application.yml.\");\n }\n return AnthropicChatModel.builder()\n .apiKey(apiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .build();\n }\n}"}, "8a2b0faa50ae0bd13d3b58219cd7a7dba2d70270": {"t": 1785749086.6392448, "n": 3453, "h": "14f4ccc57d0c7cc1", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.anthropic.AnthropicChatModel;\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.ollama.OllamaChatModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.anthropic.api-key:}\")\n private String anthropicApiKey;\n\n @Value(\"${ai.openai.api-key:}\")\n private String openAiApiKey;\n\n @Value(\"${ai.deepseek.api-key:}\")\n private String deepseekApiKey;\n\n @Value(\"${ai.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${ai.ollama.base-url:http://localhost:11434}\")\n private String ollamaBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:deepseek}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:deepseek}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:deepseek-chat}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:deepseek-chat}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n return buildModel(requirementProvider, requirementModelName, 4096);\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n return buildModel(codeGenProvider, codeGenModelName, 8192);\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"mock\" -> new MockChatLanguageModel();\n case \"openai\" -> buildOpenAiModel(openAiApiKey, null, modelName, maxTokens);\n case \"deepseek\" -> buildOpenAiModel(deepseekApiKey, deepseekBaseUrl, modelName, maxTokens);\n case \"ollama\" -> OllamaChatModel.builder()\n .baseUrl(ollamaBaseUrl)\n .modelName(modelName)\n .build();\n default -> buildAnthropicModel(anthropicApiKey, modelName, maxTokens);\n };\n }\n\n private ChatLanguageModel buildOpenAiModel(String apiKey, String baseUrl, String modelName, int maxTokens) {\n if (apiKey == null || apiKey.isEmpty()) {\n throw new IllegalStateException(\"AI API key is not configured. Please set DEEPSEEK_API_KEY environment variable or configure ai.deepseek.api-key in application.yml.\");\n }\n OpenAiChatModel.OpenAiChatModelBuilder builder = OpenAiChatModel.builder()\n .apiKey(apiKey)\n .modelName(modelName)\n .maxTokens(maxTokens);\n if (baseUrl != null && !baseUrl.isEmpty()) {\n builder.baseUrl(baseUrl);\n }\n return builder.build();\n }\n\n private ChatLanguageModel buildAnthropicModel(String apiKey, String modelName, int maxTokens) {\n if (apiKey == null || apiKey.isEmpty()) {\n throw new IllegalStateException(\"AI API key is not configured. Please set ANTHROPIC_API_KEY environment variable or configure ai.anthropic.api-key in application.yml.\");\n }\n return AnthropicChatModel.builder()\n .apiKey(apiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .build();\n }\n}"}, "99ec9299c22443fda6a8c67cf8b75db75c2e052e": {"t": 1785749087.7798686, "n": 3187, "h": "03657332c4d63ed8", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.anthropic.AnthropicChatModel;\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.ollama.OllamaChatModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.anthropic.api-key:}\")\n private String anthropicApiKey;\n\n @Value(\"${ai.openai.api-key:}\")\n private String openAiApiKey;\n\n @Value(\"${ai.deepseek.api-key:}\")\n private String deepseekApiKey;\n\n @Value(\"${ai.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${ai.ollama.base-url:http://localhost:11434}\")\n private String ollamaBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:deepseek}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:deepseek}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:deepseek-chat}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:deepseek-chat}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n return buildModel(requirementProvider, requirementModelName, 4096);\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n return buildModel(codeGenProvider, codeGenModelName, 8192);\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"mock\" -> new MockChatLanguageModel();\n case \"openai\" -> buildOpenAiModel(openAiApiKey, null, modelName, maxTokens);\n case \"deepseek\" -> buildOpenAiModel(deepseekApiKey, deepseekBaseUrl, modelName, maxTokens);\n case \"ollama\" -> OllamaChatModel.builder()\n .baseUrl(ollamaBaseUrl)\n .modelName(modelName)\n .build();\n default -> buildAnthropicModel(anthropicApiKey, modelName, maxTokens);\n };\n }\n\n private ChatLanguageModel buildOpenAiModel(String apiKey, String baseUrl, String modelName, int maxTokens) {\n if (apiKey == null || apiKey.isEmpty()) {\n return new MockChatLanguageModel();\n }\n OpenAiChatModel.OpenAiChatModelBuilder builder = OpenAiChatModel.builder()\n .apiKey(apiKey)\n .modelName(modelName)\n .maxTokens(maxTokens);\n if (baseUrl != null && !baseUrl.isEmpty()) {\n builder.baseUrl(baseUrl);\n }\n return builder.build();\n }\n\n private ChatLanguageModel buildAnthropicModel(String apiKey, String modelName, int maxTokens) {\n if (apiKey == null || apiKey.isEmpty()) {\n return new MockChatLanguageModel();\n }\n return AnthropicChatModel.builder()\n .apiKey(apiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .build();\n }\n}"}, "bfddcf52482146bf97ae326c88d4cd872367ee18": {"t": 1785749088.8512006, "n": 2172, "h": "b80a98b99e74fc8f", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.anthropic.AnthropicChatModel;\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.ollama.OllamaChatModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.anthropic.api-key:}\")\n private String anthropicApiKey;\n\n @Value(\"${ai.openai.api-key:}\")\n private String openAiApiKey;\n\n @Value(\"${ai.ollama.base-url:http://localhost:11434}\")\n private String ollamaBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:claude}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:claude}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:claude-sonnet-4-6}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:claude-sonnet-4-6}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n return buildModel(requirementProvider, requirementModelName, 4096);\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n return buildModel(codeGenProvider, codeGenModelName, 8192);\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"mock\" -> new MockChatLanguageModel();\n case \"openai\" -> OpenAiChatModel.builder()\n .apiKey(openAiApiKey)\n .modelName(modelName)\n .build();\n case \"ollama\" -> OllamaChatModel.builder()\n .baseUrl(ollamaBaseUrl)\n .modelName(modelName)\n .build();\n default -> AnthropicChatModel.builder()\n .apiKey(anthropicApiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .build();\n };\n }\n}"}, "dd1f5787a2f571dad2c8565206f8f95ee854023d": {"t": 1785749089.9599073, "n": 2116, "h": "994e9978110615a9", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.anthropic.AnthropicChatModel;\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.ollama.OllamaChatModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.anthropic.api-key:}\")\n private String anthropicApiKey;\n\n @Value(\"${ai.openai.api-key:}\")\n private String openAiApiKey;\n\n @Value(\"${ai.ollama.base-url:http://localhost:11434}\")\n private String ollamaBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:claude}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:claude}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:claude-sonnet-4-6}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:claude-sonnet-4-6}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n return buildModel(requirementProvider, requirementModelName, 4096);\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n return buildModel(codeGenProvider, codeGenModelName, 8192);\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"openai\" -> OpenAiChatModel.builder()\n .apiKey(openAiApiKey)\n .modelName(modelName)\n .build();\n case \"ollama\" -> OllamaChatModel.builder()\n .baseUrl(ollamaBaseUrl)\n .modelName(modelName)\n .build();\n default -> AnthropicChatModel.builder()\n .apiKey(anthropicApiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .build();\n };\n }\n}"}, "f967e5d48c098fd3eefc0207b3e596222ff1c607": {"t": 1786067428.5847604, "n": 3156, "h": "489a2dd1717869a7", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.chat.DisabledChatLanguageModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Slf4j\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.deepseek.api-key:}\")\n private String deepseekApiKey;\n\n @Value(\"${ai.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:deepseek}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:deepseek}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:deepseek-chat}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:deepseek-chat}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n log.info(\"Building requirement model with provider: {}, model: {}\", requirementProvider, requirementModelName);\n ChatLanguageModel model = buildModel(requirementProvider, requirementModelName, 4096);\n log.info(\"Requirement model built successfully: {}\", model.getClass().getSimpleName());\n return model;\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n log.info(\"Building codegen model with provider: {}, model: {}\", codeGenProvider, codeGenModelName);\n ChatLanguageModel model = buildModel(codeGenProvider, codeGenModelName, 8192);\n log.info(\"Codegen model built successfully: {}\", model.getClass().getSimpleName());\n return model;\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"openai\", \"deepseek\" -> buildDeepSeekModel(modelName, maxTokens);\n case \"none\" -> {\n log.warn(\"AI provider is set to 'none', using DisabledChatLanguageModel\");\n yield new DisabledChatLanguageModel();\n }\n default -> throw new IllegalStateException(\"Unknown AI provider: \" + provider + \". Supported providers: openai, deepseek, none\");\n };\n }\n\n private ChatLanguageModel buildDeepSeekModel(String modelName, int maxTokens) {\n if (deepseekApiKey == null || deepseekApiKey.isEmpty()) {\n throw new IllegalStateException(\"DeepSeek API key is not configured. \" +\n \"Please set AI_DEEPSEEK_API_KEY in .env file or environment variable.\");\n }\n log.info(\"Creating DeepSeek model: {} with baseUrl: {}, maxTokens: {}\", \n modelName, deepseekBaseUrl, maxTokens);\n OpenAiChatModel.OpenAiChatModelBuilder builder = OpenAiChatModel.builder()\n .apiKey(deepseekApiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .baseUrl(deepseekBaseUrl);\n return builder.build();\n }\n}"}, "2ae32c1dffc23fd1d350fe6005015a29d077f958": {"t": 1786068300.1580417, "n": 3156, "h": "489a2dd1717869a7", "c": "package com.bage.ai.pipeline.agent.config;\n\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.chat.DisabledChatLanguageModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Slf4j\n@Configuration\npublic class ModelGatewayConfig {\n\n @Value(\"${ai.deepseek.api-key:}\")\n private String deepseekApiKey;\n\n @Value(\"${ai.deepseek.base-url:https://api.deepseek.com/v1}\")\n private String deepseekBaseUrl;\n\n @Value(\"${ai.requirement-model-provider:deepseek}\")\n private String requirementProvider;\n\n @Value(\"${ai.codegen-model-provider:deepseek}\")\n private String codeGenProvider;\n\n @Value(\"${ai.requirement-model:deepseek-chat}\")\n private String requirementModelName;\n\n @Value(\"${ai.codegen-model:deepseek-chat}\")\n private String codeGenModelName;\n\n @Bean(\"requirementModel\")\n public ChatLanguageModel requirementModel() {\n log.info(\"Building requirement model with provider: {}, model: {}\", requirementProvider, requirementModelName);\n ChatLanguageModel model = buildModel(requirementProvider, requirementModelName, 4096);\n log.info(\"Requirement model built successfully: {}\", model.getClass().getSimpleName());\n return model;\n }\n\n @Bean(\"codeGenModel\")\n public ChatLanguageModel codeGenModel() {\n log.info(\"Building codegen model with provider: {}, model: {}\", codeGenProvider, codeGenModelName);\n ChatLanguageModel model = buildModel(codeGenProvider, codeGenModelName, 8192);\n log.info(\"Codegen model built successfully: {}\", model.getClass().getSimpleName());\n return model;\n }\n\n private ChatLanguageModel buildModel(String provider, String modelName, int maxTokens) {\n return switch (provider.toLowerCase()) {\n case \"openai\", \"deepseek\" -> buildDeepSeekModel(modelName, maxTokens);\n case \"none\" -> {\n log.warn(\"AI provider is set to 'none', using DisabledChatLanguageModel\");\n yield new DisabledChatLanguageModel();\n }\n default -> throw new IllegalStateException(\"Unknown AI provider: \" + provider + \". Supported providers: openai, deepseek, none\");\n };\n }\n\n private ChatLanguageModel buildDeepSeekModel(String modelName, int maxTokens) {\n if (deepseekApiKey == null || deepseekApiKey.isEmpty()) {\n throw new IllegalStateException(\"DeepSeek API key is not configured. \" +\n \"Please set AI_DEEPSEEK_API_KEY in .env file or environment variable.\");\n }\n log.info(\"Creating DeepSeek model: {} with baseUrl: {}, maxTokens: {}\", \n modelName, deepseekBaseUrl, maxTokens);\n OpenAiChatModel.OpenAiChatModelBuilder builder = OpenAiChatModel.builder()\n .apiKey(deepseekApiKey)\n .modelName(modelName)\n .maxTokens(maxTokens)\n .baseUrl(deepseekBaseUrl);\n return builder.build();\n }\n}"}}, "study-ai-dev-flow/ai-pipeline-api/src/main/java/com/bage/ai/pipeline/api/PipelineApiApplication.java": {"e8449e671f453111d21bb38d72841f353dcbac61": {"t": 1785745655.462869, "n": 2193, "h": "cc09097f151d1a9b", "c": "package com.bage.ai.pipeline.api;\n\nimport io.github.cdimascio.dotenv.Dotenv;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication(scanBasePackages = {\"com.bage.ai.pipeline\"})\npublic class PipelineApiApplication {\n\n public static void main(String[] args) {\n loadEnvVariables();\n SpringApplication.run(PipelineApiApplication.class, args);\n }\n\n private static void loadEnvVariables() {\n try {\n String userDir = System.getProperty(\"user.dir\");\n java.io.File envFile = new java.io.File(userDir, \".env\");\n if (!envFile.exists()) {\n envFile = new java.io.File(userDir + \"/..\", \".env\");\n }\n if (!envFile.exists()) {\n envFile = new java.io.File(userDir + \"/../..\", \".env\");\n }\n \n Dotenv dotenv;\n if (envFile.exists()) {\n dotenv = Dotenv.configure().directory(envFile.getParent()).ignoreIfMissing().load();\n System.out.println(\"Loaded .env file from: \" + envFile.getAbsolutePath());\n } else {\n dotenv = Dotenv.configure().ignoreIfMissing().load();\n System.out.println(\".env file not found, using system environment variables\");\n }\n \n System.setProperty(\"AI_DEEPSEEK_API_KEY\", dotenv.get(\"AI_DEEPSEEK_API_KEY\", \"\"));\n System.setProperty(\"AI_DEEPSEEK_BASE_URL\", dotenv.get(\"AI_DEEPSEEK_BASE_URL\", \"https://api.deepseek.com/v1\"));\n System.setProperty(\"AI_REQUIREMENT_MODEL_PROVIDER\", dotenv.get(\"AI_REQUIREMENT_MODEL_PROVIDER\", \"deepseek\"));\n System.setProperty(\"AI_CODEGEN_MODEL_PROVIDER\", dotenv.get(\"AI_CODEGEN_MODEL_PROVIDER\", \"deepseek\"));\n System.setProperty(\"AI_REQUIREMENT_MODEL\", dotenv.get(\"AI_REQUIREMENT_MODEL\", \"deepseek-chat\"));\n System.setProperty(\"AI_CODEGEN_MODEL\", dotenv.get(\"AI_CODEGEN_MODEL\", \"deepseek-chat\"));\n } catch (Exception e) {\n System.err.println(\"Failed to load .env file, using system environment variables: \" + e.getMessage());\n }\n }\n}"}, "f77966e58c42c9f607b2880972e87e59297ce96c": {"t": 1785749081.576333, "n": 2193, "h": "cc09097f151d1a9b", "c": "package com.bage.ai.pipeline.api;\n\nimport io.github.cdimascio.dotenv.Dotenv;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication(scanBasePackages = {\"com.bage.ai.pipeline\"})\npublic class PipelineApiApplication {\n\n public static void main(String[] args) {\n loadEnvVariables();\n SpringApplication.run(PipelineApiApplication.class, args);\n }\n\n private static void loadEnvVariables() {\n try {\n String userDir = System.getProperty(\"user.dir\");\n java.io.File envFile = new java.io.File(userDir, \".env\");\n if (!envFile.exists()) {\n envFile = new java.io.File(userDir + \"/..\", \".env\");\n }\n if (!envFile.exists()) {\n envFile = new java.io.File(userDir + \"/../..\", \".env\");\n }\n \n Dotenv dotenv;\n if (envFile.exists()) {\n dotenv = Dotenv.configure().directory(envFile.getParent()).ignoreIfMissing().load();\n System.out.println(\"Loaded .env file from: \" + envFile.getAbsolutePath());\n } else {\n dotenv = Dotenv.configure().ignoreIfMissing().load();\n System.out.println(\".env file not found, using system environment variables\");\n }\n \n System.setProperty(\"AI_DEEPSEEK_API_KEY\", dotenv.get(\"AI_DEEPSEEK_API_KEY\", \"\"));\n System.setProperty(\"AI_DEEPSEEK_BASE_URL\", dotenv.get(\"AI_DEEPSEEK_BASE_URL\", \"https://api.deepseek.com/v1\"));\n System.setProperty(\"AI_REQUIREMENT_MODEL_PROVIDER\", dotenv.get(\"AI_REQUIREMENT_MODEL_PROVIDER\", \"deepseek\"));\n System.setProperty(\"AI_CODEGEN_MODEL_PROVIDER\", dotenv.get(\"AI_CODEGEN_MODEL_PROVIDER\", \"deepseek\"));\n System.setProperty(\"AI_REQUIREMENT_MODEL\", dotenv.get(\"AI_REQUIREMENT_MODEL\", \"deepseek-chat\"));\n System.setProperty(\"AI_CODEGEN_MODEL\", dotenv.get(\"AI_CODEGEN_MODEL\", \"deepseek-chat\"));\n } catch (Exception e) {\n System.err.println(\"Failed to load .env file, using system environment variables: \" + e.getMessage());\n }\n }\n}"}, "dd1f5787a2f571dad2c8565206f8f95ee854023d": {"t": 1785749082.667309, "n": 382, "h": "d63cb630850d29d7", "c": "package com.bage.ai.pipeline.api;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication(scanBasePackages = {\"com.bage.ai.pipeline\"})\npublic class PipelineApiApplication {\n\n public static void main(String[] args) {\n SpringApplication.run(PipelineApiApplication.class, args);\n }\n}"}, "f967e5d48c098fd3eefc0207b3e596222ff1c607": {"t": 1786067428.6915743, "n": 2193, "h": "cc09097f151d1a9b", "c": "package com.bage.ai.pipeline.api;\n\nimport io.github.cdimascio.dotenv.Dotenv;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication(scanBasePackages = {\"com.bage.ai.pipeline\"})\npublic class PipelineApiApplication {\n\n public static void main(String[] args) {\n loadEnvVariables();\n SpringApplication.run(PipelineApiApplication.class, args);\n }\n\n private static void loadEnvVariables() {\n try {\n String userDir = System.getProperty(\"user.dir\");\n java.io.File envFile = new java.io.File(userDir, \".env\");\n if (!envFile.exists()) {\n envFile = new java.io.File(userDir + \"/..\", \".env\");\n }\n if (!envFile.exists()) {\n envFile = new java.io.File(userDir + \"/../..\", \".env\");\n }\n \n Dotenv dotenv;\n if (envFile.exists()) {\n dotenv = Dotenv.configure().directory(envFile.getParent()).ignoreIfMissing().load();\n System.out.println(\"Loaded .env file from: \" + envFile.getAbsolutePath());\n } else {\n dotenv = Dotenv.configure().ignoreIfMissing().load();\n System.out.println(\".env file not found, using system environment variables\");\n }\n \n System.setProperty(\"AI_DEEPSEEK_API_KEY\", dotenv.get(\"AI_DEEPSEEK_API_KEY\", \"\"));\n System.setProperty(\"AI_DEEPSEEK_BASE_URL\", dotenv.get(\"AI_DEEPSEEK_BASE_URL\", \"https://api.deepseek.com/v1\"));\n System.setProperty(\"AI_REQUIREMENT_MODEL_PROVIDER\", dotenv.get(\"AI_REQUIREMENT_MODEL_PROVIDER\", \"deepseek\"));\n System.setProperty(\"AI_CODEGEN_MODEL_PROVIDER\", dotenv.get(\"AI_CODEGEN_MODEL_PROVIDER\", \"deepseek\"));\n System.setProperty(\"AI_REQUIREMENT_MODEL\", dotenv.get(\"AI_REQUIREMENT_MODEL\", \"deepseek-chat\"));\n System.setProperty(\"AI_CODEGEN_MODEL\", dotenv.get(\"AI_CODEGEN_MODEL\", \"deepseek-chat\"));\n } catch (Exception e) {\n System.err.println(\"Failed to load .env file, using system environment variables: \" + e.getMessage());\n }\n }\n}"}, "2ae32c1dffc23fd1d350fe6005015a29d077f958": {"t": 1786068300.1007874, "n": 2193, "h": "cc09097f151d1a9b", "c": "package com.bage.ai.pipeline.api;\n\nimport io.github.cdimascio.dotenv.Dotenv;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication(scanBasePackages = {\"com.bage.ai.pipeline\"})\npublic class PipelineApiApplication {\n\n public static void main(String[] args) {\n loadEnvVariables();\n SpringApplication.run(PipelineApiApplication.class, args);\n }\n\n private static void loadEnvVariables() {\n try {\n String userDir = System.getProperty(\"user.dir\");\n java.io.File envFile = new java.io.File(userDir, \".env\");\n if (!envFile.exists()) {\n envFile = new java.io.File(userDir + \"/..\", \".env\");\n }\n if (!envFile.exists()) {\n envFile = new java.io.File(userDir + \"/../..\", \".env\");\n }\n \n Dotenv dotenv;\n if (envFile.exists()) {\n dotenv = Dotenv.configure().directory(envFile.getParent()).ignoreIfMissing().load();\n System.out.println(\"Loaded .env file from: \" + envFile.getAbsolutePath());\n } else {\n dotenv = Dotenv.configure().ignoreIfMissing().load();\n System.out.println(\".env file not found, using system environment variables\");\n }\n \n System.setProperty(\"AI_DEEPSEEK_API_KEY\", dotenv.get(\"AI_DEEPSEEK_API_KEY\", \"\"));\n System.setProperty(\"AI_DEEPSEEK_BASE_URL\", dotenv.get(\"AI_DEEPSEEK_BASE_URL\", \"https://api.deepseek.com/v1\"));\n System.setProperty(\"AI_REQUIREMENT_MODEL_PROVIDER\", dotenv.get(\"AI_REQUIREMENT_MODEL_PROVIDER\", \"deepseek\"));\n System.setProperty(\"AI_CODEGEN_MODEL_PROVIDER\", dotenv.get(\"AI_CODEGEN_MODEL_PROVIDER\", \"deepseek\"));\n System.setProperty(\"AI_REQUIREMENT_MODEL\", dotenv.get(\"AI_REQUIREMENT_MODEL\", \"deepseek-chat\"));\n System.setProperty(\"AI_CODEGEN_MODEL\", dotenv.get(\"AI_CODEGEN_MODEL\", \"deepseek-chat\"));\n } catch (Exception e) {\n System.err.println(\"Failed to load .env file, using system environment variables: \" + e.getMessage());\n }\n }\n}"}}, "study-ai-dev-flow/ai-pipeline-api/src/main/resources/application.yml": {"e8449e671f453111d21bb38d72841f353dcbac61": {"t": 1785746354.1445467, "n": 949, "h": "604a959e1cb2a6a6", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_REQUIREMENT_MODEL_PROVIDER:deepseek}\n codegen-model-provider: ${AI_CODEGEN_MODEL_PROVIDER:deepseek}\n requirement-model: ${AI_REQUIREMENT_MODEL:deepseek-chat}\n codegen-model: ${AI_CODEGEN_MODEL:deepseek-chat}\n deepseek:\n api-key: ${AI_DEEPSEEK_API_KEY:}\n base-url: ${AI_DEEPSEEK_BASE_URL:https://api.deepseek.com/v1}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}, "f77966e58c42c9f607b2880972e87e59297ce96c": {"t": 1785749082.311057, "n": 949, "h": "604a959e1cb2a6a6", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_REQUIREMENT_MODEL_PROVIDER:deepseek}\n codegen-model-provider: ${AI_CODEGEN_MODEL_PROVIDER:deepseek}\n requirement-model: ${AI_REQUIREMENT_MODEL:deepseek-chat}\n codegen-model: ${AI_CODEGEN_MODEL:deepseek-chat}\n deepseek:\n api-key: ${AI_DEEPSEEK_API_KEY:}\n base-url: ${AI_DEEPSEEK_BASE_URL:https://api.deepseek.com/v1}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}, "4604b09627ff42b8e8e5435c0f10c0b1f42b87b9": {"t": 1785749083.3825016, "n": 838, "h": "f993d00cf6710ef6", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_PROVIDER:none}\n codegen-model-provider: ${AI_PROVIDER:none}\n deepseek:\n api-key: ${DEEPSEEK_API_KEY:}\n base-url: https://api.deepseek.com/v1\n ollama:\n base-url: ${OLLAMA_BASE_URL:http://localhost:11434}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}, "2ae37d9e93525fff0c12c6675d40475d3a6f86b7": {"t": 1785749084.6457288, "n": 842, "h": "34e5f8dadbc339cc", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_PROVIDER:ollama}\n codegen-model-provider: ${AI_PROVIDER:ollama}\n deepseek:\n api-key: ${DEEPSEEK_API_KEY:}\n base-url: https://api.deepseek.com/v1\n ollama:\n base-url: ${OLLAMA_BASE_URL:http://localhost:11434}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}, "8a2b0faa50ae0bd13d3b58219cd7a7dba2d70270": {"t": 1785749085.75411, "n": 750, "h": "6b5a8dc38006c107", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: deepseek\n codegen-model-provider: deepseek\n deepseek:\n api-key: ${DEEPSEEK_API_KEY:}\n base-url: https://api.deepseek.com/v1\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}, "bfddcf52482146bf97ae326c88d4cd872367ee18": {"t": 1785749087.0240335, "n": 654, "h": "aac5a125f432e8f5", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: mock\n codegen-model-provider: mock\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}, "dd1f5787a2f571dad2c8565206f8f95ee854023d": {"t": 1785749088.0972881, "n": 761, "h": "8c5040ce0390865c", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ollama\n codegen-model-provider: ollama\n requirement-model: llama3.2\n codegen-model: llama3.2\n ollama:\n base-url: http://localhost:11434\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}, "f967e5d48c098fd3eefc0207b3e596222ff1c607": {"t": 1786067708.1437218, "n": 949, "h": "604a959e1cb2a6a6", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_REQUIREMENT_MODEL_PROVIDER:deepseek}\n codegen-model-provider: ${AI_CODEGEN_MODEL_PROVIDER:deepseek}\n requirement-model: ${AI_REQUIREMENT_MODEL:deepseek-chat}\n codegen-model: ${AI_CODEGEN_MODEL:deepseek-chat}\n deepseek:\n api-key: ${AI_DEEPSEEK_API_KEY:}\n base-url: ${AI_DEEPSEEK_BASE_URL:https://api.deepseek.com/v1}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}, "2ae32c1dffc23fd1d350fe6005015a29d077f958": {"t": 1786068429.69615, "n": 949, "h": "604a959e1cb2a6a6", "c": "server:\n port: 8080\n\nspring:\n application:\n name: ai-pipeline-api\n datasource:\n url: jdbc:h2:mem:pipeline_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE\n username: sa\n password:\n driver-class-name: org.h2.Driver\n h2:\n console:\n enabled: true\n path: /h2-console\n jpa:\n hibernate:\n ddl-auto: update\n show-sql: false\n properties:\n hibernate:\n format_sql: true\n dialect: org.hibernate.dialect.H2Dialect\n\ntemporal:\n service:\n address: localhost:7233\n\nai:\n requirement-model-provider: ${AI_REQUIREMENT_MODEL_PROVIDER:deepseek}\n codegen-model-provider: ${AI_CODEGEN_MODEL_PROVIDER:deepseek}\n requirement-model: ${AI_REQUIREMENT_MODEL:deepseek-chat}\n codegen-model: ${AI_CODEGEN_MODEL:deepseek-chat}\n deepseek:\n api-key: ${AI_DEEPSEEK_API_KEY:}\n base-url: ${AI_DEEPSEEK_BASE_URL:https://api.deepseek.com/v1}\n\nlogging:\n level:\n com.bage.ai.pipeline: INFO\n io.temporal: WARN"}}, "study-ai-dev-flow/ai-pipeline-agent/src/test/java/com/bage/ai/pipeline/agent/service/RequirementAgentServiceTest.java": {"2ae32c1dffc23fd1d350fe6005015a29d077f958": {"t": 1786068306.6992555, "n": 1860, "h": "67958e6db8753bfa", "c": "package com.bage.ai.pipeline.agent.service;\n\nimport dev.langchain4j.model.chat.ChatLanguageModel;\nimport dev.langchain4j.model.openai.OpenAiChatModel;\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Tag;\nimport org.junit.jupiter.api.Test;\n\nimport static org.junit.jupiter.api.Assertions.*;\n\n@Tag(\"integration\")\nclass RequirementAgentServiceTest {\n\n private RequirementAgentService requirementAgentService;\n\n @BeforeEach\n void setUp() {\n String deepseekApiKey = System.getenv(\"AI_DEEPSEEK_API_KEY\");\n String deepseekBaseUrl = System.getenv(\"AI_DEEPSEEK_BASE_URL\");\n \n ChatLanguageModel model;\n if (deepseekApiKey != null && !deepseekApiKey.isEmpty()) {\n model = OpenAiChatModel.builder()\n .apiKey(deepseekApiKey)\n .baseUrl(deepseekBaseUrl != null ? deepseekBaseUrl : \"https://api.deepseek.com/v1\")\n .modelName(\"deepseek-chat\")\n .maxTokens(4096)\n .build();\n } else {\n fail(\"AI_DEEPSEEK_API_KEY environment variable is not set\");\n return;\n }\n \n requirementAgentService = new RequirementAgentService(model);\n }\n\n @Test\n void testAnalyzeWithDeepseek() {\n String prd = \"Generate API documentation for a user management system with CRUD operations.\";\n \n String result = requirementAgentService.analyze(prd);\n \n assertNotNull(result, \"Result should not be null\");\n assertFalse(result.isEmpty(), \"Result should not be empty\");\n \n System.out.println(\"LLM Response:\");\n System.out.println(result);\n \n assertTrue(result.contains(\"summary\") || result.contains(\"features\"), \n \"Result should contain structured JSON with summary or features\");\n }\n}\n"}}}}