├── .editorconfig ├── .gitattributes ├── .gitignore ├── .gitmodules ├── .mvn └── wrapper │ └── maven-wrapper.properties ├── LICENSE ├── README.md ├── README_EN.md ├── docs ├── docker-start.sh ├── docker │ ├── .env.example │ ├── docker-compose.yml │ ├── dockerfile-server │ └── dockerfile-ui ├── imgs │ ├── app_detail.jpg │ ├── app_list.jpg │ ├── app_preview.jpg │ ├── app_prompt.jpg │ ├── dataset_datastruct.jpg │ ├── dataset_detail.jpg │ ├── dataset_embedding.jpg │ ├── dataset_list.jpg │ ├── dataset_paragraph.jpg │ ├── dataset_rule.jpg │ ├── dataset_testing.jpg │ └── model.jpg ├── init.sql └── nginx │ └── nginx.conf ├── llmchat-common ├── llmchat-common-bom │ └── pom.xml ├── llmchat-common-core │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ai │ │ │ └── llmchat │ │ │ └── common │ │ │ └── core │ │ │ ├── CommonCoreAutoConfiguration.java │ │ │ ├── config │ │ │ ├── DateFormatConfiguration.java │ │ │ ├── JacksonFormatConfiguration.java │ │ │ └── TaskPoolConfiguration.java │ │ │ ├── databind │ │ │ └── DataBind.java │ │ │ ├── enums │ │ │ ├── BaseEnum.java │ │ │ ├── BooleanEnum.java │ │ │ └── StatusEnum.java │ │ │ ├── exception │ │ │ ├── AuthenticationException.java │ │ │ ├── DataExistsException.java │ │ │ ├── PermissionException.java │ │ │ └── ServiceException.java │ │ │ ├── package-info.java │ │ │ ├── sensitive │ │ │ ├── DataSensitive.java │ │ │ ├── SensitiveSerialize.java │ │ │ └── SensitiveType.java │ │ │ ├── util │ │ │ ├── BeanMapUtils.java │ │ │ ├── ExcelUtils.java │ │ │ ├── HostUtils.java │ │ │ ├── I18nUtils.java │ │ │ ├── IPUtils.java │ │ │ ├── KeyFormatUtils.java │ │ │ ├── SpringUtils.java │ │ │ ├── StringFormats.java │ │ │ └── TreeNodeUtils.java │ │ │ └── wrapper │ │ │ ├── PageResult.java │ │ │ ├── Result.java │ │ │ ├── data │ │ │ ├── PageData.java │ │ │ ├── SelectGroupNode.java │ │ │ ├── SelectNode.java │ │ │ └── TreeNode.java │ │ │ └── param │ │ │ └── PageParam.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── llmchat-common-langchain │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ai │ │ │ └── llmchat │ │ │ └── common │ │ │ └── langchain │ │ │ ├── CommonLangchainConfiguration.java │ │ │ ├── config │ │ │ ├── ContentStoreConfiguration.java │ │ │ ├── ContentStoreProperties.java │ │ │ └── ModelProviderConfiguration.java │ │ │ ├── document │ │ │ ├── Paragraph.java │ │ │ ├── ParagraphParser.java │ │ │ ├── ParagraphParserFactory.java │ │ │ ├── StructuredParagraphParser.java │ │ │ ├── UnstructuredParagraphParser.java │ │ │ ├── splitter │ │ │ │ └── DocumentSplitterFactory.java │ │ │ └── transformer │ │ │ │ └── DocumentCleanTransformer.java │ │ │ ├── enums │ │ │ ├── CleanPatternEnum.java │ │ │ ├── ModelProviderEnum.java │ │ │ ├── ModelTypeEnum.java │ │ │ ├── ResponseFormatEnum.java │ │ │ ├── SearchModeEnum.java │ │ │ └── SplitPatternEnum.java │ │ │ ├── model │ │ │ ├── ModelProvider.java │ │ │ ├── ModelProviderFactory.java │ │ │ ├── impl │ │ │ │ ├── AzureOpenAiModelProvider.java │ │ │ │ ├── ChatGlmModelProvider.java │ │ │ │ ├── DefaultModelProviderFactory.java │ │ │ │ ├── DisabledScoringModel.java │ │ │ │ ├── HuggingFaceModelProvider.java │ │ │ │ ├── LocalAiModelProvider.java │ │ │ │ ├── OllamaModelProvider.java │ │ │ │ ├── OpenAiModelProvider.java │ │ │ │ ├── QianfanModelProvider.java │ │ │ │ ├── QwenModelProvider.java │ │ │ │ ├── XinferenceModelProvider.java │ │ │ │ └── ZhipuAiModelProvider.java │ │ │ └── options │ │ │ │ ├── EmbeddingModelOptions.java │ │ │ │ ├── ImageModelOptions.java │ │ │ │ ├── LanguageModelOptions.java │ │ │ │ ├── ModelOptions.java │ │ │ │ ├── ModerationModelOptions.java │ │ │ │ └── ScoringModelOptions.java │ │ │ ├── package-info.java │ │ │ ├── rag │ │ │ ├── AIAssistant.java │ │ │ ├── AIAssistantService.java │ │ │ ├── PromptConstants.java │ │ │ ├── StreamingChatService.java │ │ │ ├── content │ │ │ │ ├── ContentSearchOptions.java │ │ │ │ ├── ContentStore.java │ │ │ │ ├── ContentStoreIngestor.java │ │ │ │ ├── IngestionResult.java │ │ │ │ ├── retriever │ │ │ │ │ └── ContentStoreRetriever.java │ │ │ │ └── weaviate │ │ │ │ │ ├── WeaviateContentStore.java │ │ │ │ │ └── WeaviateFilterMapper.java │ │ │ ├── loader │ │ │ │ ├── StructuredDataLoader.java │ │ │ │ ├── TextSegmentLoader.java │ │ │ │ └── UnstructuredDataLoader.java │ │ │ ├── memory │ │ │ │ └── RedisChatMemoryStore.java │ │ │ ├── options │ │ │ │ ├── ChatOptions.java │ │ │ │ ├── ContentOptions.java │ │ │ │ ├── PromptOptions.java │ │ │ │ ├── RetrievalOptions.java │ │ │ │ └── SuggestedOptions.java │ │ │ ├── output │ │ │ │ ├── Citation.java │ │ │ │ ├── Message.java │ │ │ │ ├── PPTOutline.java │ │ │ │ ├── PPTSlide.java │ │ │ │ ├── Prompt.java │ │ │ │ ├── Segment.java │ │ │ │ ├── Suggestion.java │ │ │ │ └── Usage.java │ │ │ ├── splitter │ │ │ │ └── DocumentSplitterFactory.java │ │ │ └── transformer │ │ │ │ ├── DocumentCleanTransformer.java │ │ │ │ └── RewriteQueryTransformer.java │ │ │ └── util │ │ │ └── LangchainConstants.java │ │ └── resources │ │ ├── META-INF │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── static │ │ └── icons │ │ ├── azure_openai.svg │ │ ├── chat_glm.svg │ │ ├── huggingface.svg │ │ ├── localai.svg │ │ ├── ollama.svg │ │ ├── openai.svg │ │ ├── qianfan.png │ │ ├── qwen.png │ │ ├── xinference.svg │ │ └── zhipuai.svg ├── llmchat-common-mybatis │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ai │ │ │ └── llmchat │ │ │ └── common │ │ │ └── mybatis │ │ │ ├── CommonMybatisPlusConfiguration.java │ │ │ ├── annotation │ │ │ └── DataScope.java │ │ │ ├── exception │ │ │ ├── DataScopeException.java │ │ │ └── ExceptionFactory.java │ │ │ ├── generator │ │ │ └── MybatisPlusGenerator.java │ │ │ ├── handler │ │ │ ├── MybatisPlusDataPermissionHandler.java │ │ │ └── MybatisPlusMetaObjectHandler.java │ │ │ ├── package-info.java │ │ │ └── util │ │ │ └── DataScopeUtils.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── llmchat-common-redis │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ai │ │ │ └── llmchat │ │ │ └── common │ │ │ └── redis │ │ │ ├── CommonRedisAutoConfiguration.java │ │ │ ├── config │ │ │ ├── RedisStreamConfiguration.java │ │ │ ├── RedisStreamProperties.java │ │ │ └── RedisTemplateConfiguration.java │ │ │ ├── core │ │ │ ├── Action.java │ │ │ ├── Message.java │ │ │ ├── MessageStreamConsumer.java │ │ │ ├── MessageStreamListener.java │ │ │ ├── MessageStreamPublisher.java │ │ │ ├── PendingMessageScheduler.java │ │ │ ├── SendResult.java │ │ │ └── StreamConstants.java │ │ │ ├── package-info.java │ │ │ └── util │ │ │ └── InstanceUtils.java │ │ └── resources │ │ ├── META-INF │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── redis.lua ├── llmchat-common-security │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ai │ │ │ └── llmchat │ │ │ └── common │ │ │ └── security │ │ │ ├── CommonSecurityAutoConfiguration.java │ │ │ ├── SecurityClaims.java │ │ │ ├── SecurityUtils.java │ │ │ ├── config │ │ │ ├── SecurityConfiguration.java │ │ │ ├── SecurityConfigurationProperties.java │ │ │ └── WebSecurityConfiguration.java │ │ │ ├── endpoint │ │ │ └── SecurityEndpoint.java │ │ │ ├── handler │ │ │ └── TokenSecurityInterceptor.java │ │ │ ├── service │ │ │ ├── PasswordEncryptService.java │ │ │ ├── SecurityClaimsService.java │ │ │ ├── TokenStoreService.java │ │ │ └── impl │ │ │ │ ├── PasswordEncryptServiceImpl.java │ │ │ │ └── TokenStoreServiceImpl.java │ │ │ ├── util │ │ │ └── RequestUtils.java │ │ │ └── web │ │ │ ├── RequestLoggingFilter.java │ │ │ └── RestExceptionHandler.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports └── pom.xml ├── llmchat-server ├── llmchat-server-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── ai │ │ └── llmchat │ │ └── server │ │ └── api │ │ ├── enums │ │ ├── MenuTypeEnum.java │ │ └── StateEnum.java │ │ ├── package-info.java │ │ ├── param │ │ ├── AppChatVO.java │ │ ├── AppDatasetParam.java │ │ ├── AppParam.java │ │ ├── ChatParam.java │ │ ├── ChatStramingParam.java │ │ ├── ChatTestingParam.java │ │ ├── CommonPageParam.java │ │ ├── DataScopeParam.java │ │ ├── DatasetParam.java │ │ ├── DocumentPageParam.java │ │ ├── DocumentParam.java │ │ ├── EnabledParam.java │ │ ├── FileParam.java │ │ ├── HitTestingParam.java │ │ ├── MenuScopeParam.java │ │ ├── ModelPageParam.java │ │ ├── OauthUserPageParam.java │ │ ├── OauthUserParam.java │ │ ├── OptimizeParam.java │ │ ├── ParagraphPageParam.java │ │ ├── RatingParam.java │ │ ├── UserRolePageParam.java │ │ └── UserRoleParam.java │ │ └── vo │ │ ├── AppDatasetVO.java │ │ ├── AppVO.java │ │ ├── ChatVO.java │ │ ├── CitationVO.java │ │ ├── DatasetItemVO.java │ │ ├── DatasetVO.java │ │ ├── DocumentItemVO.java │ │ ├── DocumentVO.java │ │ ├── HitTestingVO.java │ │ ├── MessageVO.java │ │ ├── ModelOptionsVO.java │ │ ├── ModelProviderVO.java │ │ ├── ModelVO.java │ │ ├── OauthRoleVO.java │ │ ├── OauthUserVO.java │ │ ├── ParagraphExportVO.java │ │ ├── PromptVO.java │ │ ├── RouteMetaVO.java │ │ ├── RouteRecordVO.java │ │ ├── SegmentVO.java │ │ ├── SelectOption.java │ │ ├── UsageVO.java │ │ └── UserDetailsVO.java ├── llmchat-server-repository │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── ai │ │ │ │ └── llmchat │ │ │ │ └── server │ │ │ │ └── repository │ │ │ │ ├── dataobject │ │ │ │ ├── AppDatasetDO.java │ │ │ │ ├── CitationDO.java │ │ │ │ ├── DatasetDO.java │ │ │ │ ├── DatasetItemDO.java │ │ │ │ ├── DocumentItemDO.java │ │ │ │ ├── ModelOptionsDO.java │ │ │ │ ├── ParagraphDO.java │ │ │ │ └── SegmentDO.java │ │ │ │ ├── entity │ │ │ │ ├── AiApp.java │ │ │ │ ├── AiAppDataset.java │ │ │ │ ├── AiChat.java │ │ │ │ ├── AiChatMessage.java │ │ │ │ ├── AiDataset.java │ │ │ │ ├── AiDocument.java │ │ │ │ ├── AiModel.java │ │ │ │ ├── AiParagraph.java │ │ │ │ ├── DictData.java │ │ │ │ ├── FileDetail.java │ │ │ │ ├── OauthDept.java │ │ │ │ ├── OauthMenu.java │ │ │ │ ├── OauthPost.java │ │ │ │ ├── OauthRole.java │ │ │ │ ├── OauthRoleDept.java │ │ │ │ ├── OauthRoleMenu.java │ │ │ │ ├── OauthUser.java │ │ │ │ ├── OauthUserPost.java │ │ │ │ └── OauthUserRole.java │ │ │ │ ├── mapper │ │ │ │ ├── AiAppDatasetMapper.java │ │ │ │ ├── AiAppMapper.java │ │ │ │ ├── AiChatMapper.java │ │ │ │ ├── AiChatMessageMapper.java │ │ │ │ ├── AiDatasetMapper.java │ │ │ │ ├── AiDocumentMapper.java │ │ │ │ ├── AiModelMapper.java │ │ │ │ ├── AiParagraphMapper.java │ │ │ │ ├── DictDataMapper.java │ │ │ │ ├── FileDetailMapper.java │ │ │ │ ├── OauthDeptMapper.java │ │ │ │ ├── OauthMenuMapper.java │ │ │ │ ├── OauthPostMapper.java │ │ │ │ ├── OauthRoleDeptMapper.java │ │ │ │ ├── OauthRoleMapper.java │ │ │ │ ├── OauthRoleMenuMapper.java │ │ │ │ ├── OauthUserMapper.java │ │ │ │ ├── OauthUserPostMapper.java │ │ │ │ └── OauthUserRoleMapper.java │ │ │ │ └── package-info.java │ │ └── resources │ │ │ └── mapper │ │ │ ├── AiAppDatasetMapper.xml │ │ │ ├── AiAppMapper.xml │ │ │ ├── AiChatMapper.xml │ │ │ ├── AiChatMessageMapper.xml │ │ │ ├── AiDatasetMapper.xml │ │ │ ├── AiDocumentMapper.xml │ │ │ ├── AiModelMapper.xml │ │ │ ├── AiParagraphMapper.xml │ │ │ ├── DictDataMapper.xml │ │ │ ├── FileDetailMapper.xml │ │ │ ├── OauthDeptMapper.xml │ │ │ ├── OauthMenuMapper.xml │ │ │ ├── OauthPostMapper.xml │ │ │ ├── OauthRoleDeptMapper.xml │ │ │ ├── OauthRoleMapper.xml │ │ │ ├── OauthRoleMenuMapper.xml │ │ │ ├── OauthUserMapper.xml │ │ │ ├── OauthUserPostMapper.xml │ │ │ └── OauthUserRoleMapper.xml │ │ └── test │ │ ├── java │ │ └── ai │ │ │ └── llmchat │ │ │ └── server │ │ │ └── repository │ │ │ └── MybatisGeneratorTest.java │ │ └── resources │ │ └── application.yml ├── llmchat-server-service │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── ai │ │ └── llmchat │ │ └── server │ │ └── service │ │ ├── AiAppDatasetService.java │ │ ├── AiAppService.java │ │ ├── AiChatMessageService.java │ │ ├── AiChatService.java │ │ ├── AiDatasetService.java │ │ ├── AiDocumentService.java │ │ ├── AiModelService.java │ │ ├── AiParagraphService.java │ │ ├── DictDataService.java │ │ ├── FileDetailService.java │ │ ├── OauthDeptService.java │ │ ├── OauthMenuService.java │ │ ├── OauthPostService.java │ │ ├── OauthRoleDeptService.java │ │ ├── OauthRoleMenuService.java │ │ ├── OauthRoleService.java │ │ ├── OauthUserPostService.java │ │ ├── OauthUserRoleService.java │ │ ├── OauthUserService.java │ │ ├── consumer │ │ ├── DocumentConsumer.java │ │ ├── EmbeddingConsumer.java │ │ └── MessageConstants.java │ │ ├── converter │ │ ├── AiAppConverter.java │ │ ├── AiAppDatasetConverter.java │ │ ├── AiChatConverter.java │ │ ├── AiDatasetConverter.java │ │ ├── AiDocumentConverter.java │ │ ├── AiModelsConverter.java │ │ ├── FileDetailConverter.java │ │ ├── OauthRoleConverter.java │ │ └── OauthUserConverter.java │ │ └── impl │ │ ├── AiAppDatasetServiceImpl.java │ │ ├── AiAppServiceImpl.java │ │ ├── AiChatMessageServiceImpl.java │ │ ├── AiChatServiceImpl.java │ │ ├── AiDatasetServiceImpl.java │ │ ├── AiDocumentServiceImpl.java │ │ ├── AiModelServiceImpl.java │ │ ├── AiParagraphServiceImpl.java │ │ ├── DictDataServiceImpl.java │ │ ├── FileDetailServiceImpl.java │ │ ├── OauthDeptServiceImpl.java │ │ ├── OauthMenuServiceImpl.java │ │ ├── OauthPostServiceImpl.java │ │ ├── OauthRoleDeptServiceImpl.java │ │ ├── OauthRoleMenuServiceImpl.java │ │ ├── OauthRoleServiceImpl.java │ │ ├── OauthUserPostServiceImpl.java │ │ ├── OauthUserRoleServiceImpl.java │ │ └── OauthUserServiceImpl.java ├── llmchat-server-start │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ai │ │ │ └── llmchat │ │ │ └── server │ │ │ ├── BootstrapApplication.java │ │ │ ├── controller │ │ │ ├── AccountController.java │ │ │ ├── AiAppController.java │ │ │ ├── AiChatController.java │ │ │ ├── AiDatasetController.java │ │ │ ├── AiDocumentController.java │ │ │ ├── AiModelController.java │ │ │ ├── AiParagraphController.java │ │ │ ├── DictDataController.java │ │ │ ├── OauthDeptController.java │ │ │ ├── OauthMenuController.java │ │ │ ├── OauthPostController.java │ │ │ ├── OauthRoleController.java │ │ │ └── OauthUserController.java │ │ │ └── init │ │ │ └── ApplicationInitializer.java │ │ └── resources │ │ ├── application-dev.yml │ │ ├── application-prod.yml │ │ ├── application.yml │ │ └── logback-config.xml └── pom.xml ├── makefile ├── mvnw ├── mvnw.cmd └── pom.xml /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.java] 4 | indent_style = tab 5 | indent_size = 4 6 | continuation_indent_size = 8 7 | 8 | [*.groovy] 9 | indent_style = tab 10 | indent_size = 4 11 | continuation_indent_size = 8 12 | 13 | [*.xml] 14 | indent_style = tab 15 | indent_size = 4 16 | continuation_indent_size = 8 17 | 18 | [*.yml] 19 | indent_style = space 20 | indent_size = 2 21 | 22 | [*.yaml] 23 | indent_style = space 24 | indent_size = 2 25 | 26 | [*.sh] 27 | indent_style = space 28 | indent_size = 4 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Ensure that .sh scripts use LF as line separator, even if they are checked out 2 | # to Windows(NTFS) file-system, by a user of Docker for Window. 3 | # These .sh scripts will be run from the Container after `docker compose up -d`. 4 | # If they appear to be CRLF style, Dash from the Container will fail to execute 5 | # them. 6 | 7 | *.sh text eol=lf 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | !**/src/main/**/target/ 4 | !**/src/test/**/target/ 5 | 6 | ### IntelliJ IDEA ### 7 | .idea/modules.xml 8 | .idea/jarRepositories.xml 9 | .idea/compiler.xml 10 | .idea/libraries/ 11 | *.iws 12 | *.iml 13 | *.ipr 14 | 15 | ### Eclipse ### 16 | .apt_generated 17 | .classpath 18 | .factorypath 19 | .project 20 | .settings 21 | .springBeans 22 | .sts4-cache 23 | 24 | ### NetBeans ### 25 | /nbproject/private/ 26 | /nbbuild/ 27 | /dist/ 28 | /nbdist/ 29 | /.nb-gradle/ 30 | build/ 31 | !**/src/main/**/build/ 32 | !**/src/test/**/build/ 33 | 34 | ### VS Code ### 35 | .vscode/ 36 | 37 | ### Mac OS ### 38 | .DS_Store 39 | logs 40 | .idea 41 | .flattened-pom.xml 42 | volumes 43 | .env 44 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "llmchat-ui"] 2 | path = llmchat-ui 3 | url = git@github.com:alvinlee518/llmchat-ui.git 4 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip 18 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar -------------------------------------------------------------------------------- /docs/docker/.env.example: -------------------------------------------------------------------------------- 1 | DB_USERNAME=postgres 2 | DB_PASSWORD=llmchat123456 3 | DB_DATABASE=llmchat 4 | DB_DATA=/var/lib/postgresql/data/pgdata 5 | POSTGRES_MAX_CONNECTIONS=100 6 | POSTGRES_SHARED_BUFFERS=128MB 7 | POSTGRES_WORK_MEM=4MB 8 | POSTGRES_MAINTENANCE_WORK_MEM=64MB 9 | POSTGRES_EFFECTIVE_CACHE_SIZE=4096MB 10 | 11 | WEAVIATE_PERSISTENCE_DATA_PATH='/var/lib/weaviate' 12 | WEAVIATE_QUERY_DEFAULTS_LIMIT=25 13 | WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true 14 | WEAVIATE_DEFAULT_VECTORIZER_MODULE=none 15 | WEAVIATE_CLUSTER_HOSTNAME=node1 16 | WEAVIATE_AUTHENTICATION_APIKEY_ENABLED=true 17 | WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS=RgAbHv1w8Zh62GUzIq0ojWMQdaxiut5l3LmJ 18 | WEAVIATE_AUTHENTICATION_APIKEY_USERS=llmchat 19 | WEAVIATE_ASYNC_INDEXING=true 20 | WEAVIATE_AUTHORIZATION_ADMINLIST_USERS=llmchat 21 | 22 | MINIO_ROOT_USER=minio 23 | MINIO_ROOT_PASSWORD=llmchat123456 24 | 25 | REDIS_PASSWORD=llmchat123456 -------------------------------------------------------------------------------- /docs/docker/dockerfile-server: -------------------------------------------------------------------------------- 1 | FROM openjdk:17-alpine 2 | LABEL authors="lixw" 3 | ENV SPRING_PROFILES_ACTIVE=prod \ 4 | SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/llmchat?useUnicode/=true&characterEncoding/=utf8&zeroDateTimeBehavior/=convertToNull&useSSL/=false&serverTimezone/=GMT%2B8 \ 5 | SPRING_DATASOURCE_USERNAME=postgres \ 6 | SPRING_DATASOURCE_PASSWORD=llmchat123456 \ 7 | SPRING_REDIS_URL=redis://:llmchat123456@redis:6379 \ 8 | SPRING_MINIO_ACCESS_KEY=minio \ 9 | SPRING_MINIO_SECRET_KEY=llmchat123456 \ 10 | SPRING_MINIO_END_POINT=http://minio:9000 \ 11 | SPRING_MINIO_DOMAIN_HOST=http://127.0.0.1:9000/llmchat/ \ 12 | SPRING_EMBEDDING_API_KEY=RgAbHv1w8Zh62GUzIq0ojWMQdaxiut5l3LmJ \ 13 | SPRING_EMBEDDING_SCHEME=http \ 14 | SPRING_EMBEDDING_HOST=weaviate:58080 15 | EXPOSE 8080 16 | WORKDIR /app 17 | ADD ../llmchat-server/llmchat-server-start/target/*.jar app.jar 18 | ENTRYPOINT ["java","-Dloader.path=lib","-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}","-jar","app.jar"] -------------------------------------------------------------------------------- /docs/docker/dockerfile-ui: -------------------------------------------------------------------------------- 1 | FROM nginx:1.26.2-alpine 2 | LABEL authors="lixw" 3 | COPY ../llmchat-ui/dist/ /usr/share/nginx/html/ 4 | COPY ../docs/nginx/nginx.conf /etc/nginx/conf.d/default.conf 5 | EXPOSE 80 -------------------------------------------------------------------------------- /docs/imgs/app_detail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/app_detail.jpg -------------------------------------------------------------------------------- /docs/imgs/app_list.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/app_list.jpg -------------------------------------------------------------------------------- /docs/imgs/app_preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/app_preview.jpg -------------------------------------------------------------------------------- /docs/imgs/app_prompt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/app_prompt.jpg -------------------------------------------------------------------------------- /docs/imgs/dataset_datastruct.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/dataset_datastruct.jpg -------------------------------------------------------------------------------- /docs/imgs/dataset_detail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/dataset_detail.jpg -------------------------------------------------------------------------------- /docs/imgs/dataset_embedding.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/dataset_embedding.jpg -------------------------------------------------------------------------------- /docs/imgs/dataset_list.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/dataset_list.jpg -------------------------------------------------------------------------------- /docs/imgs/dataset_paragraph.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/dataset_paragraph.jpg -------------------------------------------------------------------------------- /docs/imgs/dataset_rule.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/dataset_rule.jpg -------------------------------------------------------------------------------- /docs/imgs/dataset_testing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/dataset_testing.jpg -------------------------------------------------------------------------------- /docs/imgs/model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/docs/imgs/model.jpg -------------------------------------------------------------------------------- /docs/nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | client_max_body_size 100m; 6 | client_body_buffer_size 128k; 7 | proxy_connect_timeout 5; 8 | proxy_send_timeout 1800; 9 | proxy_read_timeout 1800; 10 | proxy_buffer_size 4k; 11 | proxy_buffers 4 32k; 12 | proxy_busy_buffers_size 64k; 13 | proxy_temp_file_write_size 64k; 14 | #开启gzip 15 | gzip on; 16 | #低于1kb的资源不压缩 17 | gzip_min_length 1k; 18 | #压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。 19 | gzip_comp_level 5; 20 | #需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片. 21 | gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; 22 | #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持) 23 | gzip_disable "MSIE [1-6]\."; 24 | #是否添加“Vary: Accept-Encoding”响应头 25 | gzip_vary on; 26 | 27 | location / { 28 | root /usr/share/nginx/html; 29 | index index.html; 30 | try_files $uri /index.html; 31 | } 32 | 33 | error_page 404 /index.html; 34 | 35 | location /api { 36 | proxy_pass http://llmchat-server:8080; # 配置后端 API 地址 37 | proxy_set_header Host $host; 38 | proxy_set_header X-Real-IP $remote_addr; 39 | } 40 | 41 | location /file { 42 | proxy_pass http://minio:9000; # 配置后端 API 地址 43 | proxy_set_header Host $host; 44 | proxy_set_header X-Real-IP $remote_addr; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/CommonCoreAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core; 2 | 3 | import ai.llmchat.common.core.config.DateFormatConfiguration; 4 | import ai.llmchat.common.core.config.JacksonFormatConfiguration; 5 | import ai.llmchat.common.core.config.TaskPoolConfiguration; 6 | import ai.llmchat.common.core.util.I18nUtils; 7 | import ai.llmchat.common.core.util.SpringUtils; 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.context.annotation.Configuration; 10 | import org.springframework.context.annotation.Import; 11 | 12 | @Configuration 13 | @Import({ DateFormatConfiguration.class, JacksonFormatConfiguration.class, TaskPoolConfiguration.class, }) 14 | public class CommonCoreAutoConfiguration { 15 | 16 | @Bean 17 | public I18nUtils i18nUtils() { 18 | return new I18nUtils(); 19 | } 20 | 21 | @Bean 22 | public SpringUtils springUtils() { 23 | return new SpringUtils(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/config/DateFormatConfiguration.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.config; 2 | 3 | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.format.FormatterRegistry; 6 | import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar; 7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 8 | 9 | @Configuration 10 | @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) 11 | public class DateFormatConfiguration implements WebMvcConfigurer { 12 | 13 | @Override 14 | public void addFormatters(FormatterRegistry registry) { 15 | DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar(); 16 | registrar.setTimeFormatter(JacksonFormatConfiguration.NORM_TIME_FORMATTER); 17 | registrar.setDateFormatter(JacksonFormatConfiguration.NORM_DATE_FORMATTER); 18 | registrar.setDateTimeFormatter(JacksonFormatConfiguration.NORM_DATETIME_FORMATTER); 19 | registrar.registerFormatters(registry); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/databind/DataBind.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.databind; 2 | 3 | public @interface DataBind { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/enums/BaseEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.enums; 2 | 3 | public interface BaseEnum { 4 | 5 | T getCode(); 6 | 7 | String getMessage(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/enums/BooleanEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum BooleanEnum implements BaseEnum { 7 | 8 | YES(1, "是"), NO(0, "否"); 9 | 10 | private final Integer code; 11 | 12 | private final String message; 13 | 14 | BooleanEnum(Integer code, String message) { 15 | this.code = code; 16 | this.message = message; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/enums/StatusEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum StatusEnum implements BaseEnum { 7 | 8 | INVALID(0, "无效"), VALID(1, "有效"); 9 | 10 | private final Integer code; 11 | 12 | private final String message; 13 | 14 | StatusEnum(Integer code, String message) { 15 | this.code = code; 16 | this.message = message; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/exception/AuthenticationException.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.exception; 2 | 3 | import lombok.NoArgsConstructor; 4 | 5 | @NoArgsConstructor 6 | public class AuthenticationException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public AuthenticationException(String message) { 11 | super(message); 12 | } 13 | 14 | public AuthenticationException(Throwable cause) { 15 | super(cause); 16 | } 17 | 18 | public AuthenticationException(String message, Throwable cause) { 19 | super(message, cause); 20 | } 21 | 22 | public AuthenticationException(String message, Throwable cause, boolean enableSuppression, 23 | boolean writableStackTrace) { 24 | super(message, cause, enableSuppression, writableStackTrace); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/exception/DataExistsException.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.exception; 2 | 3 | import lombok.NoArgsConstructor; 4 | 5 | @NoArgsConstructor 6 | public class DataExistsException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public DataExistsException(String message) { 11 | super(message); 12 | } 13 | 14 | public DataExistsException(Throwable cause) { 15 | super(cause); 16 | } 17 | 18 | public DataExistsException(String message, Throwable cause) { 19 | super(message, cause); 20 | } 21 | 22 | public DataExistsException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, cause, enableSuppression, writableStackTrace); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/exception/PermissionException.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.exception; 2 | 3 | import lombok.NoArgsConstructor; 4 | 5 | @NoArgsConstructor 6 | public class PermissionException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public PermissionException(String message) { 11 | super(message); 12 | } 13 | 14 | public PermissionException(Throwable cause) { 15 | super(cause); 16 | } 17 | 18 | public PermissionException(String message, Throwable cause) { 19 | super(message, cause); 20 | } 21 | 22 | public PermissionException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, cause, enableSuppression, writableStackTrace); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/exception/ServiceException.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.exception; 2 | 3 | import lombok.NoArgsConstructor; 4 | 5 | @NoArgsConstructor 6 | public class ServiceException extends RuntimeException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public ServiceException(String message) { 11 | super(message); 12 | } 13 | 14 | public ServiceException(Throwable cause) { 15 | super(cause); 16 | } 17 | 18 | public ServiceException(String message, Throwable cause) { 19 | super(message, cause); 20 | } 21 | 22 | public ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, cause, enableSuppression, writableStackTrace); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/package-info.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core; -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/sensitive/DataSensitive.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.sensitive; 2 | 3 | import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; 4 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 5 | 6 | import java.lang.annotation.*; 7 | 8 | @Target(ElementType.FIELD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Documented 11 | @Inherited 12 | @JacksonAnnotationsInside 13 | @JsonSerialize(using = SensitiveSerialize.class) 14 | public @interface DataSensitive { 15 | 16 | /** 17 | * 脱敏数据类型 18 | * @return 19 | */ 20 | SensitiveType type() default SensitiveType.NONE; 21 | 22 | /** 23 | * 脱敏开始位置(包含) 24 | */ 25 | int startInclude() default 0; 26 | 27 | /** 28 | * 脱敏结束位置(不包含) 29 | */ 30 | int endExclude() default 0; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/sensitive/SensitiveType.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.sensitive; 2 | 3 | public enum SensitiveType { 4 | 5 | // 无 6 | NONE, 7 | // 自定义 8 | CUSTOM, 9 | // 用户id 10 | USER_ID, 11 | // 中文名 12 | CHINESE_NAME, 13 | // 身份证号 14 | ID_CARD, 15 | // 座机号 16 | FIXED_PHONE, 17 | // 手机号 18 | MOBILE_PHONE, 19 | // 地址 20 | ADDRESS, 21 | // 电子邮件 22 | EMAIL, 23 | // 密码 24 | PASSWORD, 25 | // 中国大陆车牌,包含普通车辆、新能源车辆 26 | CAR_LICENSE, 27 | // 银行卡 28 | BANK_CARD 29 | 30 | } 31 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/util/BeanMapUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.util; 2 | 3 | import org.springframework.beans.BeanUtils; 4 | import org.springframework.cglib.beans.BeanMap; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | import java.util.Objects; 9 | 10 | public class BeanMapUtils { 11 | 12 | /** 13 | * Bean To Map 14 | * @param bean 15 | * @return 16 | */ 17 | public static Map beanToMap(Object bean) { 18 | Map objectMap = new HashMap<>(); 19 | if (Objects.nonNull(bean)) { 20 | BeanMap beanMap = BeanMap.create(bean); 21 | for (Object key : beanMap.keySet()) { 22 | objectMap.put(key + "", beanMap.get(key)); 23 | } 24 | } 25 | return objectMap; 26 | } 27 | 28 | /** 29 | * Map To Bean 30 | * @param objectMap 31 | * @param clazz 32 | * @param 33 | * @return 34 | */ 35 | public static T mapToBean(Map objectMap, Class clazz) { 36 | T bean = BeanUtils.instantiateClass(clazz); 37 | BeanMap beanMap = BeanMap.create(bean); 38 | beanMap.putAll(objectMap); 39 | return bean; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/util/ExcelUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.util; 2 | 3 | import com.alibaba.excel.EasyExcel; 4 | import com.alibaba.excel.support.ExcelTypeEnum; 5 | import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; 6 | import jakarta.servlet.http.HttpServletResponse; 7 | 8 | import java.net.URLEncoder; 9 | import java.nio.charset.StandardCharsets; 10 | import java.util.List; 11 | 12 | public class ExcelUtils { 13 | 14 | public static void export2File(String path, String excelName, String sheetName, Class clazz, List data) { 15 | String fileName = path.concat(excelName).concat(ExcelTypeEnum.XLSX.getValue()); 16 | EasyExcel.write(fileName, clazz) 17 | .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) 18 | .sheet(sheetName) 19 | .doWrite(data); 20 | } 21 | 22 | public static void export2Web(HttpServletResponse response, String excelName, String sheetName, Class clazz, 23 | List list) throws Exception { 24 | response.setContentType("application/vnd.ms-excel"); 25 | response.setCharacterEncoding(StandardCharsets.UTF_8.name()); 26 | // 这里URLEncoder.encode可以防止中文乱码 27 | excelName = URLEncoder.encode(excelName, StandardCharsets.UTF_8); 28 | response.setHeader("Content-disposition", "attachment;filename=" + excelName + ExcelTypeEnum.XLSX.getValue()); 29 | EasyExcel.write(response.getOutputStream(), clazz) 30 | .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) 31 | .sheet(sheetName) 32 | .doWrite(list); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/util/HostUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.util; 2 | 3 | import org.apache.commons.lang3.StringUtils; 4 | 5 | import java.lang.management.ManagementFactory; 6 | import java.lang.management.RuntimeMXBean; 7 | import java.net.InetAddress; 8 | import java.net.NetworkInterface; 9 | import java.util.Enumeration; 10 | 11 | public class HostUtils { 12 | 13 | public static int getPid() { 14 | RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); 15 | String name = runtime.getName(); 16 | 17 | try { 18 | return Integer.parseInt(name.substring(0, name.indexOf(64))); 19 | } 20 | catch (Exception var3) { 21 | return -1; 22 | } 23 | } 24 | 25 | public static String getInetAddress() { 26 | try { 27 | Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); 28 | InetAddress address = null; 29 | 30 | while (interfaces.hasMoreElements()) { 31 | NetworkInterface ni = (NetworkInterface) interfaces.nextElement(); 32 | Enumeration addresses = ni.getInetAddresses(); 33 | 34 | while (addresses.hasMoreElements()) { 35 | address = (InetAddress) addresses.nextElement(); 36 | if (!address.isLoopbackAddress() && address.getHostAddress().indexOf(":") == -1) { 37 | return address.getHostAddress(); 38 | } 39 | } 40 | } 41 | 42 | return StringUtils.EMPTY; 43 | } 44 | catch (Throwable var4) { 45 | return StringUtils.EMPTY; 46 | } 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/util/I18nUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.util; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.beans.BeansException; 5 | import org.springframework.context.ApplicationContext; 6 | import org.springframework.context.ApplicationContextAware; 7 | import org.springframework.context.MessageSource; 8 | import org.springframework.context.NoSuchMessageException; 9 | import org.springframework.context.i18n.LocaleContextHolder; 10 | import org.springframework.lang.Nullable; 11 | 12 | @Slf4j 13 | public class I18nUtils implements ApplicationContextAware { 14 | 15 | private static MessageSource messageSource; 16 | 17 | public static String getMessage(String messageCode) { 18 | return getMessage(messageCode, null); 19 | } 20 | 21 | public static String getMessage(String messageCode, Object[] args) { 22 | try { 23 | return messageSource.getMessage(messageCode, args, LocaleContextHolder.getLocale()); 24 | } 25 | catch (NoSuchMessageException e) { 26 | log.error("no message.", e); 27 | } 28 | return messageCode; 29 | } 30 | 31 | @Override 32 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 33 | I18nUtils.messageSource = applicationContext.getBean(MessageSource.class); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/util/IPUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.util; 2 | 3 | import cn.hutool.core.net.NetUtil; 4 | import jakarta.servlet.http.HttpServletRequest; 5 | import org.apache.commons.lang3.StringUtils; 6 | import org.springframework.web.context.request.RequestAttributes; 7 | import org.springframework.web.context.request.RequestContextHolder; 8 | import org.springframework.web.context.request.ServletRequestAttributes; 9 | 10 | import java.util.Objects; 11 | 12 | public class IPUtils { 13 | 14 | private static final String[] CLIENT_IP_HEADERS = { "X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", 15 | "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR" }; 16 | 17 | public static String getClientIp() { 18 | RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); 19 | if (Objects.nonNull(requestAttributes)) { 20 | HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); 21 | String ip; 22 | for (String header : CLIENT_IP_HEADERS) { 23 | ip = request.getHeader(header); 24 | if (!NetUtil.isUnknown(ip)) { 25 | return NetUtil.getMultistageReverseProxyIp(ip); 26 | } 27 | } 28 | ip = request.getRemoteAddr(); 29 | return NetUtil.getMultistageReverseProxyIp(ip); 30 | } 31 | return StringUtils.EMPTY; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/util/KeyFormatUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.util; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class KeyFormatUtils { 7 | 8 | private List list = new ArrayList<>(2); 9 | 10 | private KeyFormatUtils(String prefix) { 11 | this.list.add(prefix); 12 | } 13 | 14 | public static KeyFormatUtils of(String prefix) { 15 | return new KeyFormatUtils(prefix); 16 | } 17 | 18 | public KeyFormatUtils add(String value) { 19 | list.add(value); 20 | return this; 21 | } 22 | 23 | public String format() { 24 | return this.toString(); 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return String.join(":", list); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/util/TreeNodeUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.util; 2 | 3 | import ai.llmchat.common.core.wrapper.data.TreeNode; 4 | import org.springframework.util.CollectionUtils; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | import java.util.Objects; 9 | 10 | public class TreeNodeUtils { 11 | 12 | public static List toTree(List nodes) { 13 | return findChildren(0L, nodes); 14 | } 15 | 16 | public static List findChildren(Long parentId, List nodes) { 17 | if (CollectionUtils.isEmpty(nodes)) { 18 | return List.of(); 19 | } 20 | List result = new ArrayList<>(); 21 | for (TreeNode node : nodes) { 22 | if (Objects.equals(parentId, node.getPid())) { 23 | List children = findChildren(node.getValue(), nodes); 24 | node.setChildren(children); 25 | result.add(node); 26 | } 27 | } 28 | return CollectionUtils.isEmpty(result) ? null : result; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/wrapper/PageResult.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.wrapper; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.Collection; 8 | import java.util.List; 9 | import java.util.Objects; 10 | 11 | @Getter 12 | @Setter 13 | public class PageResult extends Result> { 14 | 15 | private Integer total; 16 | 17 | private Integer page; 18 | 19 | private Integer size; 20 | 21 | public PageResult(Integer code, String message, Collection data) { 22 | super(code, message, data); 23 | } 24 | 25 | public Integer getPage() { 26 | if (this.page < 1) { 27 | this.page = 1; 28 | } 29 | return page; 30 | } 31 | 32 | public Integer getSize() { 33 | if (this.size < 1) { 34 | this.size = 10; 35 | } 36 | return size; 37 | } 38 | 39 | @Override 40 | public Collection getData() { 41 | Collection data = super.getData(); 42 | return Objects.isNull(data) ? List.of() : data; 43 | } 44 | 45 | public static PageResult of(Long total, Integer page, Integer size, Collection list) { 46 | PageResult result = new PageResult<>(200, "success", list); 47 | result.setTotal(total.intValue()); 48 | result.setPage(page); 49 | result.setSize(size); 50 | return result; 51 | } 52 | 53 | public static PageResult of(PageData pageData) { 54 | PageResult result = new PageResult<>(200, "success", pageData.getList()); 55 | result.setTotal(pageData.getTotal().intValue()); 56 | result.setPage(pageData.getPage()); 57 | result.setSize(pageData.getSize()); 58 | return result; 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/wrapper/data/PageData.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.wrapper.data; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.util.Collection; 7 | import java.util.Collections; 8 | import java.util.Objects; 9 | 10 | @Data 11 | public class PageData implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Long total; 16 | 17 | private Integer page; 18 | 19 | private Integer size; 20 | 21 | private Collection list; 22 | 23 | public Integer getPage() { 24 | if (this.page < 1) { 25 | this.page = 1; 26 | } 27 | return page; 28 | } 29 | 30 | public Integer getSize() { 31 | if (this.size < 1) { 32 | this.size = 10; 33 | } 34 | return size; 35 | } 36 | 37 | public Collection getList() { 38 | if (Objects.isNull(this.list)) { 39 | this.list = Collections.emptyList(); 40 | } 41 | return list; 42 | } 43 | 44 | public boolean isEmpty() { 45 | return (list == null || list.isEmpty()); 46 | } 47 | 48 | public long pages() { 49 | return total % size == 0 ? (total / size) : (total / size) + 1; 50 | } 51 | 52 | public static PageData of(Long total, Integer page, Integer size, Collection list) { 53 | PageData result = new PageData<>(); 54 | result.setTotal(total); 55 | result.setPage(page); 56 | result.setSize(size); 57 | result.setList(list); 58 | return result; 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/wrapper/data/SelectGroupNode.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.wrapper.data; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class SelectGroupNode implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private String label; 16 | 17 | private Long value; 18 | 19 | private String type; 20 | 21 | private List children; 22 | 23 | public SelectGroupNode() { 24 | } 25 | 26 | public SelectGroupNode(String label, Long value) { 27 | this.label = label; 28 | this.value = value; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/wrapper/data/SelectNode.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.wrapper.data; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class SelectNode implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | private String label; 17 | 18 | private Long value; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/wrapper/data/TreeNode.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.wrapper.data; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | @Getter 11 | @Setter 12 | @NoArgsConstructor 13 | public class TreeNode implements Serializable { 14 | 15 | private static final long serialVersionUID = 1L; 16 | 17 | private String label; 18 | 19 | private Long value; 20 | 21 | private Long pid; 22 | 23 | private List children; 24 | 25 | public TreeNode(String label, Long value, Long pid) { 26 | this.label = label; 27 | this.value = value; 28 | this.pid = pid; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/java/ai/llmchat/common/core/wrapper/param/PageParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.core.wrapper.param; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class PageParam implements Serializable { 9 | 10 | private static final long serialVersionUID = 1L; 11 | 12 | private int page = 1; 13 | 14 | private int size = 10; 15 | 16 | public int getPage() { 17 | if (page <= 0) { 18 | page = 1; 19 | } 20 | return page; 21 | } 22 | 23 | public int getSize() { 24 | if (size <= 0) { 25 | size = 10; 26 | } 27 | return size; 28 | } 29 | 30 | public int getOffset() { 31 | return (getPage() - 1) * getSize(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | ai.llmchat.common.core.CommonCoreAutoConfiguration -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/CommonLangchainConfiguration.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain; 2 | 3 | import ai.llmchat.common.langchain.config.ContentStoreConfiguration; 4 | import ai.llmchat.common.langchain.config.ModelProviderConfiguration; 5 | import org.springframework.boot.autoconfigure.ImportAutoConfiguration; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Configuration 9 | @ImportAutoConfiguration({ ModelProviderConfiguration.class, ContentStoreConfiguration.class }) 10 | public class CommonLangchainConfiguration { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/config/ContentStoreProperties.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.config; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import org.springframework.boot.context.properties.ConfigurationProperties; 6 | 7 | @Getter 8 | @Setter 9 | @ConfigurationProperties(ContentStoreProperties.PREFIX) 10 | public class ContentStoreProperties { 11 | 12 | static final String PREFIX = "langchain4j.embedding"; 13 | 14 | private String apiKey; 15 | 16 | private String scheme; 17 | 18 | private String host; 19 | 20 | private String objectClass; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/document/Paragraph.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.document; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | @Getter 9 | @Setter 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class Paragraph { 13 | 14 | private String prompt; 15 | 16 | private String completion; 17 | 18 | private Integer position; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/document/ParagraphParser.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.document; 2 | 3 | import java.util.List; 4 | 5 | public interface ParagraphParser { 6 | 7 | List parse(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/document/ParagraphParserFactory.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.document; 2 | 3 | import java.util.Objects; 4 | 5 | public class ParagraphParserFactory { 6 | 7 | public static ParagraphParser create(Integer dataType, String url, String[] separators, Integer chunkSize, 8 | Integer chunkOverlap, Integer[] cleanPatterns) { 9 | if (Objects.equals(1, dataType)) { 10 | return new StructuredParagraphParser(url); 11 | } 12 | else { 13 | return new UnstructuredParagraphParser(url, separators, chunkSize, chunkOverlap, cleanPatterns); 14 | } 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/document/splitter/DocumentSplitterFactory.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.document.splitter; 2 | 3 | import dev.langchain4j.data.document.DocumentSplitter; 4 | import dev.langchain4j.data.document.splitter.DocumentByRegexSplitter; 5 | import dev.langchain4j.data.document.splitter.DocumentBySentenceSplitter; 6 | import dev.langchain4j.data.document.splitter.DocumentByWordSplitter; 7 | import dev.langchain4j.data.document.splitter.DocumentSplitters; 8 | import org.apache.commons.lang3.ArrayUtils; 9 | 10 | public class DocumentSplitterFactory { 11 | 12 | public static DocumentSplitter create(String[] separators, Integer chunkSize, Integer chunkOverlap) { 13 | if (ArrayUtils.isNotEmpty(separators)) { 14 | return new DocumentByRegexSplitter(String.join("|", separators), System.lineSeparator(), chunkSize, 15 | chunkOverlap, null, new DocumentBySentenceSplitter(chunkSize, chunkOverlap, null, 16 | new DocumentByWordSplitter(chunkSize, chunkOverlap, null, null))); 17 | } 18 | return DocumentSplitters.recursive(256, 64); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/enums/CleanPatternEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.enums; 2 | 3 | import ai.llmchat.common.core.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum CleanPatternEnum implements BaseEnum { 8 | 9 | REMOVE_EXTRA_SPACES(1, "替换掉连续的空格、换行符和制表符"), REMOVE_URLS_EMAILS(2, "移除URL和电子邮件地址"), 10 | REMOVE_HTML_TAGS(3, "移除Html格式字符并解析出Html文本"); 11 | 12 | private final Integer code; 13 | 14 | private final String message; 15 | 16 | CleanPatternEnum(Integer code, String message) { 17 | this.code = code; 18 | this.message = message; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/enums/ModelProviderEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.enums; 2 | 3 | import ai.llmchat.common.core.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | import java.util.Objects; 7 | 8 | @Getter 9 | public enum ModelProviderEnum implements BaseEnum { 10 | 11 | AZURE_OPEN_AI(1, "Azure OpenAI", "azure_openai.svg"), CHAT_GLM(2, "ChatGLM", "chat_glm.svg"), 12 | HUGGING_FACE(3, "Hugging Face", "huggingface.svg"), LOCAL_AI(4, "LocalAI", "localai.svg"), 13 | OLLAMA(5, "Ollama", "ollama.svg"), OPEN_AI(6, "OpenAI", "openai.svg"), QIAN_FAN(7, "千帆大模型", "qianfan.png"), 14 | QWEN(8, "通义千问", "qwen.png"), ZHIPU_AI(9, "智谱AI", "zhipuai.svg"), XINFERENCE(10, "Xinference", "xinference.svg"),; 15 | 16 | private final Integer code; 17 | 18 | private final String message; 19 | 20 | private final String icon; 21 | 22 | ModelProviderEnum(Integer code, String message, String icon) { 23 | this.code = code; 24 | this.message = message; 25 | this.icon = icon; 26 | } 27 | 28 | public static ModelProviderEnum valueOf(Integer value) { 29 | for (ModelProviderEnum item : values()) { 30 | if (Objects.equals(value, item.getCode())) { 31 | return item; 32 | } 33 | } 34 | throw new IllegalArgumentException("No enum constant with code " + value); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/enums/ModelTypeEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.enums; 2 | 3 | import ai.llmchat.common.core.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | import java.util.Objects; 7 | 8 | @Getter 9 | public enum ModelTypeEnum implements BaseEnum { 10 | 11 | LLM(1, "LLM"), EMBEDDING(2, "Embedding"), RERANK(3, "Rerank"), IMAGE(4, "Image"), MODERATION(5, "Moderation"), 12 | // AUDIO(6, "Audio"), 13 | // VIDEO(7, "Video"), 14 | ; 15 | 16 | private final Integer code; 17 | 18 | private final String message; 19 | 20 | ModelTypeEnum(Integer code, String message) { 21 | this.code = code; 22 | this.message = message; 23 | } 24 | 25 | public static ModelTypeEnum valueOf(Integer value) { 26 | for (ModelTypeEnum item : values()) { 27 | if (Objects.equals(value, item.getCode())) { 28 | return item; 29 | } 30 | } 31 | throw new IllegalArgumentException("No enum constant with code " + value); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/enums/ResponseFormatEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.enums; 2 | 3 | import ai.llmchat.common.core.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum ResponseFormatEnum implements BaseEnum { 8 | 9 | TEXT(0, "text"), JSON_OBJECT(1, "json_object"); 10 | 11 | private final Integer code; 12 | 13 | private final String message; 14 | 15 | ResponseFormatEnum(Integer code, String message) { 16 | this.code = code; 17 | this.message = message; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/enums/SearchModeEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.enums; 2 | 3 | import ai.llmchat.common.core.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 检索模式:0-向量检索;1-全文检索;2-混合检索; 8 | */ 9 | @Getter 10 | public enum SearchModeEnum implements BaseEnum { 11 | 12 | SIMILARITY(0, "向量检索"), KEYWORD(1, "全文检索"), HYBRID(2, "混合检索"); 13 | 14 | private final Integer code; 15 | 16 | private final String message; 17 | 18 | SearchModeEnum(Integer code, String message) { 19 | this.code = code; 20 | this.message = message; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/enums/SplitPatternEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.enums; 2 | 3 | import ai.llmchat.common.core.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum SplitPatternEnum implements BaseEnum { 8 | 9 | MD_H1(1, "#", "(?<=^)# .*|(?<=\\\\n)# .*"), MD_H2(2, "##", "(?<=\\\\n)(? supportedModelTypes(); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/model/ModelProviderFactory.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.model; 2 | 3 | import ai.llmchat.common.langchain.model.options.*; 4 | import dev.langchain4j.model.chat.ChatLanguageModel; 5 | import dev.langchain4j.model.chat.StreamingChatLanguageModel; 6 | import dev.langchain4j.model.embedding.EmbeddingModel; 7 | import dev.langchain4j.model.image.ImageModel; 8 | import dev.langchain4j.model.moderation.ModerationModel; 9 | import dev.langchain4j.model.scoring.ScoringModel; 10 | 11 | import java.util.List; 12 | 13 | public interface ModelProviderFactory { 14 | 15 | void credentialsValidate(ModelOptions options); 16 | 17 | ChatLanguageModel chatLanguageModel(LanguageModelOptions options); 18 | 19 | StreamingChatLanguageModel streamingChatLanguageModel(LanguageModelOptions options); 20 | 21 | EmbeddingModel embeddingModel(EmbeddingModelOptions options); 22 | 23 | ScoringModel scoringModel(ScoringModelOptions options); 24 | 25 | ImageModel imageModel(ImageModelOptions options); 26 | 27 | ModerationModel moderationModel(ModerationModelOptions options); 28 | 29 | List getModelProviders(); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/model/impl/DisabledScoringModel.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.model.impl; 2 | 3 | import dev.langchain4j.data.segment.TextSegment; 4 | import dev.langchain4j.model.ModelDisabledException; 5 | import dev.langchain4j.model.output.Response; 6 | import dev.langchain4j.model.scoring.ScoringModel; 7 | 8 | import java.util.List; 9 | 10 | public class DisabledScoringModel implements ScoringModel { 11 | 12 | @Override 13 | public Response> scoreAll(List segments, String query) { 14 | throw new ModelDisabledException("RerankModel is disabled"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/model/options/EmbeddingModelOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.model.options; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Getter 7 | @Setter 8 | public class EmbeddingModelOptions extends ModelOptions { 9 | 10 | private Integer dimensions; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/model/options/ImageModelOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.model.options; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Getter 7 | @Setter 8 | public class ImageModelOptions extends ModelOptions { 9 | 10 | private String size; 11 | 12 | private String quality; 13 | 14 | private String style; 15 | 16 | private String negativePrompt; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/model/options/LanguageModelOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.model.options; 2 | 3 | import ai.llmchat.common.langchain.enums.ResponseFormatEnum; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class LanguageModelOptions extends ModelOptions { 10 | 11 | /** 12 | * 温度 13 | */ 14 | private Double temperature; 15 | 16 | /** 17 | * 上下文窗口大小 18 | */ 19 | private Integer numCtx; 20 | 21 | /** 22 | * 最大令牌数预测 23 | */ 24 | private Integer maxTokens; 25 | 26 | /** 27 | * 指定响应内容的格式 28 | */ 29 | private ResponseFormatEnum format; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/model/options/ModelOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.model.options; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.Duration; 8 | 9 | @Getter 10 | @Setter 11 | public class ModelOptions implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Integer modelProvider; 16 | 17 | private String modelName; 18 | 19 | private Integer modelType; 20 | 21 | private String baseUrl; 22 | 23 | private String apiKey; 24 | 25 | private String secretKey; 26 | 27 | private Duration timeout; 28 | 29 | private Integer maxRetries; 30 | 31 | private Boolean logRequests; 32 | 33 | private Boolean logResponses; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/model/options/ModerationModelOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.model.options; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Getter 7 | @Setter 8 | public class ModerationModelOptions extends ModelOptions { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/model/options/ScoringModelOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.model.options; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Getter 7 | @Setter 8 | public class ScoringModelOptions extends ModelOptions { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/package-info.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain; -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/content/ContentSearchOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.content; 2 | 3 | import dev.langchain4j.data.embedding.Embedding; 4 | import dev.langchain4j.store.embedding.filter.Filter; 5 | import lombok.Builder; 6 | import lombok.Getter; 7 | 8 | @Getter 9 | @Builder 10 | public class ContentSearchOptions { 11 | 12 | private final String keyword; 13 | 14 | private final Embedding embedding; 15 | 16 | private final Integer maxResults; 17 | 18 | private final Double minScore; 19 | 20 | private final Filter filter; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/content/ContentStore.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.content; 2 | 3 | import dev.langchain4j.data.embedding.Embedding; 4 | import dev.langchain4j.data.segment.TextSegment; 5 | import dev.langchain4j.internal.Utils; 6 | import dev.langchain4j.store.embedding.EmbeddingMatch; 7 | import dev.langchain4j.store.embedding.filter.Filter; 8 | 9 | import java.util.List; 10 | 11 | public interface ContentStore { 12 | 13 | default List addAll(List embeddings, List embedded) { 14 | List ids = embeddings.stream().map(ignored -> Utils.randomUUID()).toList(); 15 | this.addAll(ids, embeddings, embedded); 16 | return ids; 17 | } 18 | 19 | void addAll(List ids, List embeddings, List embedded); 20 | 21 | void removeAll(Filter filter); 22 | 23 | List> keywordSearch(ContentSearchOptions options); 24 | 25 | List> similaritySearch(ContentSearchOptions options); 26 | 27 | List> hybridSearch(ContentSearchOptions options); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/content/ContentStoreIngestor.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.content; 2 | 3 | import ai.llmchat.common.langchain.util.LangchainConstants; 4 | import dev.langchain4j.data.embedding.Embedding; 5 | import dev.langchain4j.data.segment.TextSegment; 6 | import dev.langchain4j.model.embedding.EmbeddingModel; 7 | import dev.langchain4j.model.output.Response; 8 | import dev.langchain4j.store.embedding.filter.comparison.IsIn; 9 | import lombok.Builder; 10 | import lombok.extern.slf4j.Slf4j; 11 | 12 | import java.util.List; 13 | import java.util.Objects; 14 | 15 | @Slf4j 16 | @Builder 17 | public class ContentStoreIngestor { 18 | 19 | private final ContentStore contentStore; 20 | 21 | public IngestionResult ingest(EmbeddingModel embeddingModel, List segments) { 22 | List idList = segments.stream() 23 | .map(item -> item.metadata().getLong(LangchainConstants.METADATA_FIELD_PARAGRAPH)) 24 | .filter(Objects::nonNull) 25 | .toList(); 26 | contentStore.removeAll(new IsIn(LangchainConstants.METADATA_FIELD_PARAGRAPH, idList)); 27 | Response> response = embeddingModel.embedAll(segments); 28 | List embedIdList = contentStore.addAll(response.content(), segments); 29 | return IngestionResult.builder().tokenUsage(response.tokenUsage()).embedIdList(embedIdList).build(); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/content/IngestionResult.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.content; 2 | 3 | import dev.langchain4j.model.output.TokenUsage; 4 | import lombok.Builder; 5 | import lombok.Getter; 6 | 7 | import java.util.List; 8 | 9 | @Getter 10 | @Builder 11 | public class IngestionResult { 12 | 13 | private final TokenUsage tokenUsage; 14 | 15 | private final List embedIdList; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/loader/TextSegmentLoader.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.loader; 2 | 3 | import dev.langchain4j.data.segment.TextSegment; 4 | import lombok.Builder; 5 | 6 | import java.util.List; 7 | import java.util.Objects; 8 | 9 | @Builder 10 | public class TextSegmentLoader { 11 | 12 | public static final String PROMPT = "prompt"; 13 | 14 | public static final String INDEX = "index"; 15 | 16 | private final Integer dataType; 17 | 18 | private final String url; 19 | 20 | private final Integer size; 21 | 22 | private final Integer overlap; 23 | 24 | private final String[] separators; 25 | 26 | private final Integer[] cleanPatterns; 27 | 28 | public List load() { 29 | List segments; 30 | if (Objects.equals(1, dataType)) { 31 | segments = StructuredDataLoader.load(url); 32 | } 33 | else { 34 | segments = UnstructuredDataLoader.load(url, separators, size, overlap, cleanPatterns); 35 | } 36 | return segments; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/loader/UnstructuredDataLoader.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.loader; 2 | 3 | import ai.llmchat.common.langchain.document.splitter.DocumentSplitterFactory; 4 | import ai.llmchat.common.langchain.document.transformer.DocumentCleanTransformer; 5 | import dev.langchain4j.data.document.Document; 6 | import dev.langchain4j.data.document.loader.UrlDocumentLoader; 7 | import dev.langchain4j.data.document.parser.apache.tika.ApacheTikaDocumentParser; 8 | import dev.langchain4j.data.segment.TextSegment; 9 | 10 | import java.util.List; 11 | 12 | public class UnstructuredDataLoader { 13 | 14 | public static List load(String url, String[] separators, Integer size, Integer overlap, 15 | Integer[] cleanPatterns) { 16 | try { 17 | Document document = UrlDocumentLoader.load(url, new ApacheTikaDocumentParser()); 18 | document = new DocumentCleanTransformer(cleanPatterns).transform(document); 19 | return DocumentSplitterFactory.create(separators, size, overlap).split(document); 20 | } 21 | catch (Exception e) { 22 | throw new RuntimeException("Failed to load document", e); 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/memory/RedisChatMemoryStore.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.memory; 2 | 3 | import dev.langchain4j.data.message.ChatMessage; 4 | import dev.langchain4j.store.memory.chat.ChatMemoryStore; 5 | import org.springframework.data.redis.core.RedisTemplate; 6 | 7 | import java.util.List; 8 | 9 | public class RedisChatMemoryStore implements ChatMemoryStore { 10 | 11 | private static final String MEMORY_KEY_PREFIX = "chat_memory:"; 12 | 13 | private final RedisTemplate redisTemplate; 14 | 15 | public RedisChatMemoryStore(RedisTemplate redisTemplate) { 16 | this.redisTemplate = redisTemplate; 17 | } 18 | 19 | @Override 20 | public List getMessages(Object memoryId) { 21 | return redisTemplate.opsForList().range(MEMORY_KEY_PREFIX + memoryId, 0, -1); 22 | } 23 | 24 | @Override 25 | public void updateMessages(Object memoryId, List messages) { 26 | redisTemplate.opsForList().rightPushAll(formatKey(memoryId), messages); 27 | } 28 | 29 | @Override 30 | public void deleteMessages(Object memoryId) { 31 | redisTemplate.delete(formatKey(memoryId)); 32 | } 33 | 34 | private String formatKey(Object memoryId) { 35 | return MEMORY_KEY_PREFIX + String.valueOf(memoryId); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/options/ChatOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.options; 2 | 3 | import ai.llmchat.common.langchain.model.options.LanguageModelOptions; 4 | import ai.llmchat.common.langchain.rag.output.Citation; 5 | import ai.llmchat.common.langchain.rag.output.Message; 6 | import dev.langchain4j.service.tool.ToolProvider; 7 | import lombok.Getter; 8 | import lombok.Setter; 9 | 10 | import java.io.Serializable; 11 | import java.util.List; 12 | import java.util.function.Consumer; 13 | import java.util.function.Function; 14 | 15 | @Getter 16 | @Setter 17 | public class ChatOptions implements Serializable { 18 | 19 | private static final long serialVersionUID = 1L; 20 | 21 | private Long id; 22 | 23 | private Long chatId; 24 | 25 | private String systemPrompt; 26 | 27 | private String instruction; 28 | 29 | private Integer maxMemory; 30 | 31 | private ToolProvider toolProvider; 32 | 33 | private LanguageModelOptions modelOptions; 34 | 35 | private RetrievalOptions retrieval; 36 | 37 | private Function, List> citationProvider; 38 | 39 | private Consumer doOnComplete; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/options/ContentOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.options; 2 | 3 | import ai.llmchat.common.langchain.model.options.EmbeddingModelOptions; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class ContentOptions { 10 | 11 | private Long id; 12 | 13 | private String name; 14 | 15 | private String description; 16 | 17 | private EmbeddingModelOptions modelOptions; 18 | 19 | private Integer searchMode; 20 | 21 | private Integer topK; 22 | 23 | private Double score; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/options/PromptOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.options; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class PromptOptions implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private String instruction; 15 | 16 | private String modelName; 17 | 18 | private Integer modelProvider; 19 | 20 | private Integer modelType; 21 | 22 | private String baseUrl; 23 | 24 | private String apiKey; 25 | 26 | private String secretKey; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/options/RetrievalOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.options; 2 | 3 | import ai.llmchat.common.langchain.model.options.ScoringModelOptions; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class RetrievalOptions { 12 | 13 | private Boolean rewriteEnabled; 14 | 15 | private ScoringModelOptions modelOptions; 16 | 17 | private Double score; 18 | 19 | private Integer topK; 20 | 21 | private List contents; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/options/SuggestedOptions.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.options; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class SuggestedOptions implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long chatId; 15 | 16 | private String modelName; 17 | 18 | private Integer modelProvider; 19 | 20 | private Integer modelType; 21 | 22 | private String baseUrl; 23 | 24 | private String apiKey; 25 | 26 | private String secretKey; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/output/Citation.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.output; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class Citation implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Long id; 16 | 17 | private String name; 18 | 19 | private String url; 20 | 21 | private List segments; 22 | 23 | } -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/output/PPTOutline.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.output; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.util.List; 7 | 8 | @Getter 9 | @Setter 10 | public class PPTOutline { 11 | 12 | private String title; 13 | 14 | private String subTitle; 15 | 16 | private List chapters; 17 | 18 | @Getter 19 | @Setter 20 | public static class ChapterItem { 21 | 22 | private String chapterTitle; 23 | 24 | private List chapterContents; 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/output/PPTSlide.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.output; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.util.List; 7 | 8 | @Getter 9 | @Setter 10 | public class PPTSlide { 11 | 12 | private String title; 13 | 14 | private String imageKeywords; 15 | 16 | private List content; 17 | 18 | @Getter 19 | @Setter 20 | public static class SlideContent { 21 | 22 | private String mainPoint; 23 | 24 | private List subPoints; 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/output/Prompt.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.output; 2 | 3 | import dev.langchain4j.model.output.structured.Description; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | 9 | @Getter 10 | @Setter 11 | public class Prompt implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | @Description("Task Objective") 16 | private String taskObjective; 17 | 18 | @Description("Output Format") 19 | private String outputFormat; 20 | 21 | @Description("Key Points") 22 | private String keyPoints; 23 | 24 | @Description("prologue") 25 | private String prologue; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/output/Segment.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.output; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class Segment implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long id; 15 | 16 | private Integer index; 17 | 18 | private String text; 19 | 20 | } -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/output/Suggestion.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.output; 2 | 3 | import dev.langchain4j.model.output.structured.Description; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | @Getter 11 | @Setter 12 | public class Suggestion implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | @Description("question array") 17 | private List questions; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/output/Usage.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.output; 2 | 3 | import lombok.*; 4 | 5 | import java.io.Serializable; 6 | 7 | @Getter 8 | @Setter 9 | @Builder 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class Usage implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | private Integer promptTokens; 17 | 18 | private Integer completionTokens; 19 | 20 | private Integer totalTokens; 21 | 22 | private Long duration; 23 | 24 | } -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/rag/splitter/DocumentSplitterFactory.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.rag.splitter; 2 | 3 | import dev.langchain4j.data.document.DocumentSplitter; 4 | import dev.langchain4j.data.document.splitter.DocumentByRegexSplitter; 5 | import dev.langchain4j.data.document.splitter.DocumentBySentenceSplitter; 6 | import dev.langchain4j.data.document.splitter.DocumentByWordSplitter; 7 | import dev.langchain4j.data.document.splitter.DocumentSplitters; 8 | import org.apache.commons.lang3.ArrayUtils; 9 | 10 | public class DocumentSplitterFactory { 11 | 12 | public static DocumentSplitter create(String[] separators, Integer chunkSize, Integer chunkOverlap) { 13 | if (ArrayUtils.isNotEmpty(separators)) { 14 | return new DocumentByRegexSplitter(String.join("|", separators), System.lineSeparator(), chunkSize, 15 | chunkOverlap, null, new DocumentBySentenceSplitter(chunkSize, chunkOverlap, null, 16 | new DocumentByWordSplitter(chunkSize, chunkOverlap, null, null))); 17 | } 18 | return DocumentSplitters.recursive(256, 64); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/java/ai/llmchat/common/langchain/util/LangchainConstants.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.langchain.util; 2 | 3 | public interface LangchainConstants { 4 | 5 | Integer DIMENSIONS = 1024; 6 | 7 | String METADATA_FIELD_DATASET = "ds_id"; 8 | 9 | String METADATA_FIELD_DOCUMENT = "doc_id"; 10 | 11 | String METADATA_FIELD_PARAGRAPH = "para_id"; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | ai.llmchat.common.langchain.CommonLangchainConfiguration -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/resources/static/icons/azure_openai.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/resources/static/icons/qianfan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/llmchat-common/llmchat-common-langchain/src/main/resources/static/icons/qianfan.png -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-langchain/src/main/resources/static/icons/qwen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alvinlee518/llmchat/9e5d6f888fef45bb05d32c870d3d8725c5d3ee7b/llmchat-common/llmchat-common-langchain/src/main/resources/static/icons/qwen.png -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-mybatis/src/main/java/ai/llmchat/common/mybatis/CommonMybatisPlusConfiguration.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.mybatis; 2 | 3 | import ai.llmchat.common.mybatis.handler.MybatisPlusMetaObjectHandler; 4 | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; 5 | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; 6 | import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; 7 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 8 | import org.springframework.context.annotation.Bean; 9 | import org.springframework.context.annotation.Configuration; 10 | 11 | @Configuration 12 | public class CommonMybatisPlusConfiguration { 13 | 14 | @Bean 15 | @ConditionalOnMissingBean(MybatisPlusInterceptor.class) 16 | public MybatisPlusInterceptor mybatisPlusInterceptor() { 17 | MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); 18 | // 针对 update 和 delete 语句防止全表更新与删除 19 | mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); 20 | return mybatisPlusInterceptor; 21 | } 22 | 23 | /** 24 | * 自动填充字段 25 | * @return 26 | */ 27 | @Bean 28 | @ConditionalOnMissingBean(MetaObjectHandler.class) 29 | public MetaObjectHandler metaObjectHandler() { 30 | return new MybatisPlusMetaObjectHandler(); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-mybatis/src/main/java/ai/llmchat/common/mybatis/annotation/DataScope.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.mybatis.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 数据权限数据权限注解 7 | * 8 | * @author lxw 9 | */ 10 | @Documented 11 | @Inherited 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Target({ ElementType.METHOD, ElementType.TYPE }) 14 | public @interface DataScope { 15 | 16 | /** 17 | * 数据权限关联表别名 18 | * @return 19 | */ 20 | String alias() default ""; 21 | 22 | /** 23 | * 数据权限关联表字段 24 | * @return 25 | */ 26 | String column() default ""; 27 | 28 | /** 29 | * 是否禁用数据权限过滤 30 | * @return 31 | */ 32 | boolean ignore() default false; 33 | 34 | } 35 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-mybatis/src/main/java/ai/llmchat/common/mybatis/exception/DataScopeException.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.mybatis.exception; 2 | 3 | /** 4 | * 数据权限异常 5 | * 6 | * @author lxw 7 | */ 8 | public class DataScopeException extends RuntimeException { 9 | 10 | private static final long serialVersionUID = 1L; 11 | 12 | public DataScopeException(String message) { 13 | super(message); 14 | } 15 | 16 | public DataScopeException(Throwable throwable) { 17 | super(throwable); 18 | } 19 | 20 | public DataScopeException(String message, Throwable throwable) { 21 | super(message, throwable); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-mybatis/src/main/java/ai/llmchat/common/mybatis/exception/ExceptionFactory.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.mybatis.exception; 2 | 3 | import org.apache.ibatis.executor.ErrorContext; 4 | 5 | /** 6 | * 异常处理类 7 | * 8 | * @author lxw 9 | */ 10 | public class ExceptionFactory { 11 | 12 | /** 13 | * 构建数据权限异常 14 | * @param message 15 | * @param e 16 | * @return 17 | */ 18 | public static RuntimeException dataScope(String message, Exception e) { 19 | return new DataScopeException(ErrorContext.instance().message(message).cause(e).toString(), e); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-mybatis/src/main/java/ai/llmchat/common/mybatis/generator/MybatisPlusGenerator.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.mybatis.generator; 2 | 3 | public class MybatisPlusGenerator { 4 | 5 | public static void execute() { 6 | 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-mybatis/src/main/java/ai/llmchat/common/mybatis/handler/MybatisPlusDataPermissionHandler.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.mybatis.handler; 2 | 3 | import ai.llmchat.common.mybatis.annotation.DataScope; 4 | import ai.llmchat.common.mybatis.util.DataScopeUtils; 5 | import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler; 6 | import net.sf.jsqlparser.expression.Expression; 7 | import net.sf.jsqlparser.schema.Table; 8 | 9 | import java.util.Objects; 10 | 11 | public class MybatisPlusDataPermissionHandler implements MultiDataPermissionHandler { 12 | 13 | @Override 14 | public Expression getSqlSegment(Table table, Expression where, String statementId) { 15 | DataScope dataScope = DataScopeUtils.getDataScope(statementId); 16 | if (Objects.isNull(dataScope)) { 17 | return null; 18 | } 19 | return null; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-mybatis/src/main/java/ai/llmchat/common/mybatis/package-info.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.mybatis; -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | ai.llmchat.common.mybatis.CommonMybatisPlusConfiguration -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | ai.llmchat 6 | llmchat-common 7 | ${revision} 8 | ../pom.xml 9 | 10 | 11 | llmchat-common-redis 12 | jar 13 | 14 | 15 | 16 | org.projectlombok 17 | lombok 18 | 19 | 20 | org.apache.commons 21 | commons-pool2 22 | 23 | 24 | com.alibaba.fastjson2 25 | fastjson2 26 | 27 | 28 | com.alibaba.fastjson2 29 | fastjson2-extension-spring6 30 | 31 | 32 | ai.llmchat 33 | llmchat-common-core 34 | 35 | 36 | org.springframework.boot 37 | spring-boot-starter-data-redis 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/CommonRedisAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis; 2 | 3 | import ai.llmchat.common.redis.config.RedisStreamConfiguration; 4 | import ai.llmchat.common.redis.config.RedisTemplateConfiguration; 5 | import org.springframework.boot.autoconfigure.ImportAutoConfiguration; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Configuration 9 | @ImportAutoConfiguration({ RedisTemplateConfiguration.class, RedisStreamConfiguration.class, }) 10 | public class CommonRedisAutoConfiguration { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/config/RedisStreamProperties.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis.config; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import org.springframework.boot.context.properties.ConfigurationProperties; 6 | 7 | import java.time.Duration; 8 | 9 | @Getter 10 | @Setter 11 | @ConfigurationProperties(prefix = RedisStreamProperties.PREFIX) 12 | public class RedisStreamProperties { 13 | 14 | static final String PREFIX = "spring.data.redis"; 15 | 16 | /** 17 | * 消息轮询的超时时间。 18 | */ 19 | private Duration pollTimeout = Duration.ofSeconds(5); 20 | 21 | /** 22 | * 每次轮询的最大消息数。 23 | */ 24 | private int messagesPerPoll = 8; 25 | 26 | /** 27 | * 消费者数量(每个消费组的消费者实例数)。 28 | */ 29 | private int consumerCount = 4; 30 | 31 | /** 32 | * 线程池的核心线程数。 33 | */ 34 | private int corePoolSize = Runtime.getRuntime().availableProcessors(); 35 | 36 | /** 37 | * 线程池的最大线程数。 38 | */ 39 | private int maxPoolSize = corePoolSize * 2 + 10; 40 | 41 | /** 42 | * 线程池的队列容量。 43 | */ 44 | private int queueCapacity = 256; 45 | 46 | /** 47 | * 线程池空闲线程的最大存活时间。 48 | */ 49 | private long keepAliveTime = 60; 50 | 51 | } 52 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/core/Action.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis.core; 2 | 3 | public enum Action { 4 | 5 | CommitMessage, ReconsumeLater; 6 | 7 | private Action() { 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/core/Message.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis.core; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | import org.springframework.lang.Nullable; 8 | 9 | import java.io.Serializable; 10 | 11 | @Getter 12 | @Setter 13 | @ToString 14 | @NoArgsConstructor 15 | public class Message implements Serializable { 16 | 17 | private static final long serialVersionUID = 1L; 18 | 19 | private String topic; 20 | 21 | private String body; 22 | 23 | @Nullable 24 | private Long sequence; 25 | 26 | private Long timestamp; 27 | 28 | public Message(String topic, String body) { 29 | this.topic = topic; 30 | this.body = body; 31 | } 32 | 33 | public static Message of(String topic, Long body) { 34 | return new Message(topic, String.valueOf(body)); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/core/MessageStreamListener.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis.core; 2 | 3 | public interface MessageStreamListener { 4 | 5 | Action doConsume(Message message); 6 | 7 | String getGroup(); 8 | 9 | String getTopic(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/core/MessageStreamPublisher.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis.core; 2 | 3 | import org.springframework.data.redis.connection.stream.ObjectRecord; 4 | import org.springframework.data.redis.connection.stream.RecordId; 5 | import org.springframework.data.redis.connection.stream.StreamRecords; 6 | import org.springframework.data.redis.core.StringRedisTemplate; 7 | import org.springframework.lang.NonNull; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | public class MessageStreamPublisher { 13 | 14 | private final StringRedisTemplate stringRedisTemplate; 15 | 16 | public MessageStreamPublisher(StringRedisTemplate stringRedisTemplate) { 17 | this.stringRedisTemplate = stringRedisTemplate; 18 | } 19 | 20 | public SendResult publish(Message message) { 21 | ObjectRecord objectRecord = StreamRecords.objectBacked(message.getBody()) 22 | .withStreamKey(StreamConstants.streamKey(message.getTopic())); 23 | RecordId recordId = stringRedisTemplate.opsForStream().add(objectRecord); 24 | message.setSequence(recordId.getSequence()); 25 | message.setTimestamp(recordId.getTimestamp()); 26 | return new SendResult(recordId.getSequence(), recordId.getTimestamp(), recordId.getValue()); 27 | } 28 | 29 | public List publish(@NonNull List list) { 30 | List results = new ArrayList<>(); 31 | for (Message message : list) { 32 | SendResult result = publish(message); 33 | results.add(result); 34 | } 35 | return results; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/core/SendResult.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis.core; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import org.springframework.lang.Nullable; 8 | 9 | import java.io.Serializable; 10 | 11 | @Getter 12 | @Setter 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class SendResult implements Serializable { 16 | 17 | private static final long serialVersionUID = 1L; 18 | 19 | @Nullable 20 | private Long sequence; 21 | 22 | private Long timestamp; 23 | 24 | private String value; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/core/StreamConstants.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis.core; 2 | 3 | public interface StreamConstants { 4 | 5 | String KEY_PREFIX = "stream:"; 6 | 7 | String FAILURE_LIST_KEY = "stream:failure_list"; 8 | 9 | Integer MAX_RETRY = 3; 10 | 11 | Integer CPU_NUM = Runtime.getRuntime().availableProcessors(); 12 | 13 | static String streamKey(String key) { 14 | return KEY_PREFIX + key; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/package-info.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis; -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/java/ai/llmchat/common/redis/util/InstanceUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.redis.util; 2 | 3 | import ai.llmchat.common.core.util.HostUtils; 4 | 5 | import java.util.Objects; 6 | 7 | public class InstanceUtils { 8 | 9 | public static String getInstanceName(Integer index) { 10 | return HostUtils.getInetAddress() + "#" + HostUtils.getPid() + "#" + System.nanoTime() + "#" 11 | + (Objects.isNull(index) ? 0 : index); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | ai.llmchat.common.redis.CommonRedisAutoConfiguration -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-redis/src/main/resources/redis.lua: -------------------------------------------------------------------------------- 1 | local stream= KEYS[1] 2 | local group= ARGV[1] 3 | local consumer= ARGV[2] 4 | local timeout = ARGV[3] 5 | 6 | local pending = redis.call('XPENDING', stream, group) -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | ai.llmchat 6 | llmchat-common 7 | ${revision} 8 | ../pom.xml 9 | 10 | 11 | llmchat-common-security 12 | jar 13 | 14 | 15 | 16 | org.projectlombok 17 | lombok 18 | 19 | 20 | cn.hutool 21 | hutool-crypto 22 | 23 | 24 | com.alibaba 25 | transmittable-thread-local 26 | 27 | 28 | ai.llmchat 29 | llmchat-common-redis 30 | 31 | 32 | org.springframework.boot 33 | spring-boot-starter-web 34 | true 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/CommonSecurityAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security; 2 | 3 | import ai.llmchat.common.security.config.SecurityConfiguration; 4 | import ai.llmchat.common.security.config.WebSecurityConfiguration; 5 | import org.springframework.boot.autoconfigure.ImportAutoConfiguration; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Configuration 9 | @ImportAutoConfiguration({ SecurityConfiguration.class, WebSecurityConfiguration.class }) 10 | public class CommonSecurityAutoConfiguration { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/SecurityClaims.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security; 2 | 3 | import lombok.*; 4 | 5 | import java.io.Serializable; 6 | 7 | @Getter 8 | @Setter 9 | @Builder 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class SecurityClaims implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | private Long id; 17 | 18 | private String username; 19 | 20 | private String nickName; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/SecurityUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security; 2 | 3 | import com.alibaba.ttl.TransmittableThreadLocal; 4 | import org.apache.commons.lang3.StringUtils; 5 | import org.springframework.util.Assert; 6 | 7 | import java.util.Optional; 8 | 9 | public class SecurityUtils { 10 | 11 | private static final TransmittableThreadLocal THREAD_LOCAL = new TransmittableThreadLocal<>(); 12 | 13 | public static Long getId() { 14 | return Optional.ofNullable(get().getId()).orElse(0L); 15 | } 16 | 17 | public static String getUsername() { 18 | return Optional.ofNullable(get().getUsername()).orElse(StringUtils.EMPTY); 19 | } 20 | 21 | public static String getNickName() { 22 | return Optional.ofNullable(get().getNickName()).orElse(StringUtils.EMPTY); 23 | } 24 | 25 | public static SecurityClaims get() { 26 | return Optional.ofNullable(THREAD_LOCAL.get()).orElse(new SecurityClaims()); 27 | } 28 | 29 | public static void set(SecurityClaims claims) { 30 | Assert.notNull(claims, "claims can not be null"); 31 | THREAD_LOCAL.set(claims); 32 | } 33 | 34 | public static void clear() { 35 | THREAD_LOCAL.remove(); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/config/SecurityConfigurationProperties.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security.config; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import org.springframework.boot.context.properties.ConfigurationProperties; 6 | import org.springframework.util.CollectionUtils; 7 | 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | @Getter 12 | @Setter 13 | @ConfigurationProperties(prefix = SecurityConfigurationProperties.PREFIX) 14 | public class SecurityConfigurationProperties { 15 | 16 | static final String PREFIX = "security"; 17 | 18 | private List includePatterns; 19 | 20 | private List excludePatterns; 21 | 22 | public List getIncludePatterns() { 23 | if (CollectionUtils.isEmpty(includePatterns)) { 24 | includePatterns = new ArrayList<>(); 25 | } 26 | this.includePatterns.add("/**"); 27 | return this.includePatterns; 28 | } 29 | 30 | public List getExcludePatterns() { 31 | if (CollectionUtils.isEmpty(excludePatterns)) { 32 | this.excludePatterns = new ArrayList<>(); 33 | } 34 | this.excludePatterns.add("/favicon.ico"); 35 | this.excludePatterns.add("/icons/**"); 36 | this.excludePatterns.add("/security/**"); 37 | return this.excludePatterns.stream().distinct().toList(); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/service/PasswordEncryptService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security.service; 2 | 3 | public interface PasswordEncryptService { 4 | 5 | String encrypt(String password); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/service/SecurityClaimsService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security.service; 2 | 3 | import ai.llmchat.common.security.SecurityClaims; 4 | 5 | public interface SecurityClaimsService { 6 | 7 | SecurityClaims login(String username, String password); 8 | 9 | SecurityClaims findByUsername(String username); 10 | 11 | void changePassword(String oldPwd, String newPwd); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/service/TokenStoreService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security.service; 2 | 3 | import ai.llmchat.common.security.SecurityClaims; 4 | 5 | public interface TokenStoreService { 6 | 7 | String store(SecurityClaims claims); 8 | 9 | SecurityClaims read(String token); 10 | 11 | String readAndRefresh(String token); 12 | 13 | void remove(String token); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/service/impl/PasswordEncryptServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security.service.impl; 2 | 3 | import ai.llmchat.common.security.service.PasswordEncryptService; 4 | import cn.hutool.crypto.SecureUtil; 5 | 6 | public class PasswordEncryptServiceImpl implements PasswordEncryptService { 7 | 8 | @Override 9 | public String encrypt(String password) { 10 | return SecureUtil.sha256(password); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/java/ai/llmchat/common/security/util/RequestUtils.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.common.security.util; 2 | 3 | import jakarta.servlet.http.HttpServletRequest; 4 | import org.apache.commons.lang3.StringUtils; 5 | import org.springframework.http.HttpHeaders; 6 | import org.springframework.web.context.request.RequestAttributes; 7 | import org.springframework.web.context.request.RequestContextHolder; 8 | import org.springframework.web.context.request.ServletRequestAttributes; 9 | 10 | import java.util.Objects; 11 | 12 | public class RequestUtils { 13 | 14 | private static final String BEARER_TOKEN_TYPE = "Bearer"; 15 | 16 | public static String getToken() { 17 | RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); 18 | if (Objects.nonNull(requestAttributes)) { 19 | HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); 20 | return getToken(request); 21 | } 22 | return StringUtils.EMPTY; 23 | } 24 | 25 | public static String getToken(HttpServletRequest request) { 26 | String tokenValue = extractTokenValue(request.getHeader(HttpHeaders.AUTHORIZATION)); 27 | if (StringUtils.isBlank(tokenValue)) { 28 | tokenValue = request.getParameter("access_token"); 29 | } 30 | return StringUtils.trimToEmpty(tokenValue); 31 | } 32 | 33 | private static String extractTokenValue(String tokenValue) { 34 | if (StringUtils.isNotBlank(tokenValue)) { 35 | if (StringUtils.startsWithIgnoreCase(tokenValue, BEARER_TOKEN_TYPE)) { 36 | tokenValue = tokenValue.substring(BEARER_TOKEN_TYPE.length()).trim(); 37 | } 38 | int commaIndex = tokenValue.indexOf(','); 39 | if (commaIndex > 0) { 40 | tokenValue = tokenValue.substring(0, commaIndex); 41 | } 42 | return tokenValue; 43 | } 44 | return null; 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /llmchat-common/llmchat-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | ai.llmchat.common.security.CommonSecurityAutoConfiguration -------------------------------------------------------------------------------- /llmchat-common/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | ai.llmchat 6 | llmchat-parent 7 | ${revision} 8 | ../pom.xml 9 | 10 | 11 | llmchat-common 12 | pom 13 | 14 | llmchat-common-bom 15 | llmchat-common-core 16 | llmchat-common-mybatis 17 | llmchat-common-langchain 18 | llmchat-common-security 19 | llmchat-common-redis 20 | 21 | 22 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | ai.llmchat 6 | llmchat-server 7 | ${revision} 8 | ../pom.xml 9 | 10 | 11 | llmchat-server-api 12 | jar 13 | 14 | 15 | 16 | org.projectlombok 17 | lombok 18 | 19 | 20 | org.hibernate.validator 21 | hibernate-validator 22 | 23 | 24 | ai.llmchat 25 | llmchat-common-core 26 | 27 | 28 | com.alibaba 29 | easyexcel 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/enums/MenuTypeEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.enums; 2 | 3 | import ai.llmchat.common.core.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum MenuTypeEnum implements BaseEnum { 8 | 9 | DIR(0, "目录"), MENU(1, "菜单"), BUTTON(2, "按钮"); 10 | 11 | private final Integer code; 12 | 13 | private final String message; 14 | 15 | MenuTypeEnum(Integer code, String message) { 16 | this.code = code; 17 | this.message = message; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/enums/StateEnum.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.enums; 2 | 3 | import ai.llmchat.common.core.enums.BaseEnum; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum StateEnum implements BaseEnum { 8 | 9 | PENDING(0, "待处理"), IN_PROCESSING(1, "处理中"), COMPLETION(2, "已结束"), FAILURE(3, "失败"); 10 | 11 | private final Integer code; 12 | 13 | private final String message; 14 | 15 | StateEnum(Integer code, String message) { 16 | this.code = code; 17 | this.message = message; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/package-info.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api; -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/AppChatVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.server.api.vo.ChatVO; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | @Getter 11 | @Setter 12 | public class AppChatVO implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | /** 17 | * 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 名称 23 | */ 24 | private String name; 25 | 26 | /** 27 | * 描述 28 | */ 29 | private String description; 30 | 31 | /** 32 | * 问题建议 33 | */ 34 | private Integer suggestEnabled; 35 | 36 | /** 37 | * 开场白 38 | */ 39 | private String prologue; 40 | 41 | private List chatList; 42 | 43 | } 44 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/AppDatasetParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.common.core.wrapper.param.PageParam; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class AppDatasetParam extends PageParam { 10 | 11 | private String keyword; 12 | 13 | private Long appId; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/AppParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.server.api.vo.DatasetItemVO; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | import java.math.BigDecimal; 9 | import java.util.List; 10 | 11 | @Getter 12 | @Setter 13 | public class AppParam implements Serializable { 14 | 15 | private static final long serialVersionUID = 1L; 16 | 17 | /** 18 | * 19 | */ 20 | private Long id; 21 | 22 | /** 23 | * 名称 24 | */ 25 | private String name; 26 | 27 | /** 28 | * 描述 29 | */ 30 | private String description; 31 | 32 | /** 33 | * 提示词 34 | */ 35 | private String prompt; 36 | 37 | /** 38 | * 开场白 39 | */ 40 | private String prologue; 41 | 42 | /** 43 | * 模型配置 44 | */ 45 | private Long modelId; 46 | 47 | private String modelName; 48 | 49 | private BigDecimal temperature; 50 | 51 | private Integer maxTokens; 52 | 53 | private Integer maxMemory; 54 | 55 | private Integer suggestEnabled; 56 | 57 | /** 58 | * 数据集配置 59 | */ 60 | private Long rerankId; 61 | 62 | private String rerankModelName; 63 | 64 | private Integer sourceEnabled; 65 | 66 | private Integer rewriteEnabled; 67 | 68 | private Integer topK; 69 | 70 | private BigDecimal score; 71 | 72 | private List datasets; 73 | 74 | } 75 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/ChatParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class ChatParam implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long chatId; 15 | 16 | private Long appId; 17 | 18 | private String title; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/ChatStramingParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class ChatStramingParam implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long chatId; 15 | 16 | private Long appId; 17 | 18 | private String instruction; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/ChatTestingParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class ChatTestingParam implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Long chatId; 16 | 17 | private Long appId; 18 | 19 | private String prompt; 20 | 21 | private String instruction; 22 | 23 | private Long modelId; 24 | 25 | private Double temperature; 26 | 27 | private Integer maxTokens; 28 | 29 | private Integer maxMemory; 30 | 31 | private Integer sourceEnabled; 32 | 33 | private Long rerankId; 34 | 35 | private Integer rewriteEnabled; 36 | 37 | private Integer topK; 38 | 39 | private Double score; 40 | 41 | private List datasets; 42 | 43 | } 44 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/CommonPageParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.common.core.wrapper.param.PageParam; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class CommonPageParam extends PageParam { 10 | 11 | private Long parentId; 12 | 13 | private String name; 14 | 15 | private Integer status; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/DataScopeParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class DataScopeParam implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** 16 | * 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 名称 22 | */ 23 | private String name; 24 | 25 | /** 26 | * 编码 27 | */ 28 | private String code; 29 | 30 | /** 31 | * 数据范围(0-全部数据权限;1-自定义数据权限-;2-本部门数据权限;3-本部门及以下数据权限;4-仅本人数据权限) 32 | */ 33 | private Integer dataScope; 34 | 35 | /** 36 | * 部门Id 37 | */ 38 | private List deptIds; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/DatasetParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.math.BigDecimal; 8 | 9 | @Getter 10 | @Setter 11 | public class DatasetParam implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** 16 | * 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 向量模型 22 | */ 23 | private Long embedId; 24 | 25 | /** 26 | * 数据集名称 27 | */ 28 | private String name; 29 | 30 | /** 31 | * 数据集描述 32 | */ 33 | private String description; 34 | 35 | /** 36 | * 检索模式:0-向量检索;1-全文检索;2-混合检索; 37 | */ 38 | private Integer searchMode; 39 | 40 | /** 41 | * 召回数量 42 | */ 43 | private Integer topK; 44 | 45 | /** 46 | * 相似度 47 | */ 48 | private BigDecimal score; 49 | 50 | } 51 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/DocumentPageParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.common.core.wrapper.param.PageParam; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class DocumentPageParam extends PageParam { 10 | 11 | /** 12 | * 数据集Id 13 | */ 14 | private Long datasetId; 15 | 16 | /** 17 | * 文档名称 18 | */ 19 | private String name; 20 | 21 | /** 22 | * 状态:0-待处理;1-处理中;2-已结束;3-错误 23 | */ 24 | private Integer state; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/DocumentParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class DocumentParam implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | /** 15 | * 16 | */ 17 | private Long id; 18 | 19 | /** 20 | * 数据集Id 21 | */ 22 | private Long datasetId; 23 | 24 | /** 25 | * 文件Id 26 | */ 27 | private Long fileId; 28 | 29 | /** 30 | * 文档名称 31 | */ 32 | private String name; 33 | 34 | /** 35 | * 数据类型:0-非结构;1-结构 36 | */ 37 | private Integer dataType; 38 | 39 | /** 40 | * 分段模式:0-智能切分;1-自定义切分 41 | */ 42 | private Integer segmentMode; 43 | 44 | /** 45 | * 分段标识符 46 | */ 47 | private String[] separators; 48 | 49 | /** 50 | * 分段预估长度 51 | */ 52 | private Integer chunkSize; 53 | 54 | /** 55 | * 分段重叠长度 56 | */ 57 | private Integer chunkOverlap; 58 | 59 | /** 60 | * 数据清洗规则 61 | */ 62 | private Integer[] cleanRules; 63 | 64 | /** 65 | * 检索字段(位运算):1-title;2-content; 66 | */ 67 | private Integer embedCols; 68 | 69 | /** 70 | * 模型回复字段(位运算):1-title;2-content; 71 | */ 72 | private Integer replyCols; 73 | 74 | } 75 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/EnabledParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class EnabledParam implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long id; 15 | 16 | private Integer enabled; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/FileParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | import java.io.Serializable; 9 | 10 | @Getter 11 | @Setter 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class FileParam implements Serializable { 15 | 16 | private static final long serialVersionUID = 1L; 17 | 18 | private Long fileId; 19 | 20 | private String fileName; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/HitTestingParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class HitTestingParam implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | /** 15 | * 数据集Id 16 | */ 17 | private Long datasetId; 18 | 19 | /** 20 | * 关键词 21 | */ 22 | private String keyword; 23 | 24 | /** 25 | * 检索模式:0-向量检索;1-全文检索;2-混合检索; 26 | */ 27 | private Integer searchMode; 28 | 29 | /** 30 | * 召回数量 31 | */ 32 | private Integer topK; 33 | 34 | /** 35 | * 相似度 36 | */ 37 | private Double score; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/MenuScopeParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class MenuScopeParam implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** 16 | * 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 名称 22 | */ 23 | private String name; 24 | 25 | /** 26 | * 编码 27 | */ 28 | private String code; 29 | 30 | /** 31 | * 菜单Id 32 | */ 33 | private List menuIds; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/ModelPageParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.common.core.wrapper.param.PageParam; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class ModelPageParam extends PageParam { 10 | 11 | private Integer modelProvider; 12 | 13 | private String modelName; 14 | 15 | private Integer status; 16 | 17 | } -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/OauthUserPageParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.common.core.wrapper.param.PageParam; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class OauthUserPageParam extends PageParam { 10 | 11 | private String name; 12 | 13 | private String email; 14 | 15 | private String phone; 16 | 17 | private Integer status; 18 | 19 | private Long deptId; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/OauthUserParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import jakarta.validation.constraints.NotBlank; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | import java.time.LocalDate; 9 | import java.util.List; 10 | 11 | @Getter 12 | @Setter 13 | public class OauthUserParam implements Serializable { 14 | 15 | private static final long serialVersionUID = 1L; 16 | 17 | /** 18 | * 19 | */ 20 | private Long id; 21 | 22 | /** 23 | * 部门Id 24 | */ 25 | private Long deptId; 26 | 27 | /** 28 | * 岗位Id列表 29 | */ 30 | private List postIds; 31 | 32 | /** 33 | * 角色Id列表 34 | */ 35 | private List roleIds; 36 | 37 | /** 38 | * 姓名 39 | */ 40 | @NotBlank 41 | private String name; 42 | 43 | /** 44 | * 用户名 45 | */ 46 | private String username; 47 | 48 | /** 49 | * 密码 50 | */ 51 | private String password; 52 | 53 | /** 54 | * 手机号 55 | */ 56 | private String phone; 57 | 58 | /** 59 | * 邮箱 60 | */ 61 | private String email; 62 | 63 | /** 64 | * 性别:0-未知;1-男;2-女; 65 | */ 66 | private Integer gender; 67 | 68 | /** 69 | * 生日 70 | */ 71 | private LocalDate birthday; 72 | 73 | /** 74 | * 备注 75 | */ 76 | private String remark; 77 | 78 | } 79 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/OptimizeParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class OptimizeParam implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private String instruction; 15 | 16 | private Long modelId; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/ParagraphPageParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.common.core.wrapper.param.PageParam; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class ParagraphPageParam extends PageParam { 10 | 11 | /** 12 | * 文档Id 13 | */ 14 | private Long docId; 15 | 16 | /** 17 | * 分段名称 18 | */ 19 | private String keyword; 20 | 21 | /** 22 | * 状态:0-待处理;1-处理中;2-已结束;3-错误 23 | */ 24 | private Integer state; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/RatingParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class RatingParam implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long id; 15 | 16 | private Integer action; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/UserRolePageParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import ai.llmchat.common.core.wrapper.param.PageParam; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class UserRolePageParam extends PageParam { 10 | 11 | private String name; 12 | 13 | private String phone; 14 | 15 | private Integer userScope; 16 | 17 | private Long roleId; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/param/UserRoleParam.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.param; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class UserRoleParam implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private List userIds; 16 | 17 | private Long roleId; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/AppDatasetVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | public class AppDatasetVO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Long id; 16 | 17 | /** 18 | * 数据集名称 19 | */ 20 | private String name; 21 | 22 | /** 23 | * 数据集描述 24 | */ 25 | private String description; 26 | 27 | /** 28 | * 文档数量 29 | */ 30 | private Integer docCount; 31 | 32 | /** 33 | * 是否选中 34 | */ 35 | private Integer selected; 36 | 37 | /** 38 | * 更新时间 39 | */ 40 | private LocalDateTime updateAt; 41 | 42 | } 43 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/AppVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.math.BigDecimal; 8 | import java.util.List; 9 | 10 | @Getter 11 | @Setter 12 | public class AppVO implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | /** 17 | * 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 名称 23 | */ 24 | private String name; 25 | 26 | /** 27 | * 描述 28 | */ 29 | private String description; 30 | 31 | /** 32 | * 提示词 33 | */ 34 | private String prompt; 35 | 36 | /** 37 | * 开场白 38 | */ 39 | private String prologue; 40 | 41 | /** 42 | * 模型配置 43 | */ 44 | private Long modelId; 45 | 46 | private String modelName; 47 | 48 | private BigDecimal temperature; 49 | 50 | private Integer maxTokens; 51 | 52 | private Integer maxMemory; 53 | 54 | private Integer suggestEnabled; 55 | 56 | /** 57 | * 数据集配置 58 | */ 59 | private Long rerankId; 60 | 61 | private String rerankModelName; 62 | 63 | private Integer sourceEnabled; 64 | 65 | private Integer rewriteEnabled; 66 | 67 | private Integer topK; 68 | 69 | private BigDecimal score; 70 | 71 | private List datasets; 72 | 73 | } 74 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/ChatVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class ChatVO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long chatId; 15 | 16 | private Long appId; 17 | 18 | private String title; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/CitationVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class CitationVO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Long id; 16 | 17 | private String name; 18 | 19 | private String url; 20 | 21 | private List segments; 22 | 23 | } -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/DatasetItemVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class DatasetItemVO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long id; 15 | 16 | private String name; 17 | 18 | private String description; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/DatasetVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | public class DatasetVO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** 16 | * 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 数据集名称 22 | */ 23 | private String name; 24 | 25 | /** 26 | * 数据集描述 27 | */ 28 | private String description; 29 | 30 | /** 31 | * 文档数量 32 | */ 33 | private Integer docCount; 34 | 35 | /** 36 | * 更新时间 37 | */ 38 | private LocalDateTime updateAt; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/DocumentItemVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | public class DocumentItemVO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** 16 | * 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 文档名称 22 | */ 23 | private String name; 24 | 25 | /** 26 | * 分段数 27 | */ 28 | private Integer paraCount; 29 | 30 | /** 31 | * 索引数量 32 | */ 33 | private Integer indexCount; 34 | 35 | /** 36 | * 状态:0-待处理;1-处理中;2-已结束;3-错误 37 | */ 38 | private Integer state; 39 | 40 | /** 41 | * 失败原因 42 | */ 43 | private String failure; 44 | 45 | /** 46 | * 更新时间 47 | */ 48 | private LocalDateTime updateAt; 49 | 50 | } 51 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/DocumentVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class DocumentVO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | /** 15 | * 主键 16 | */ 17 | private Long id; 18 | 19 | /** 20 | * 数据类型:0-非结构;1-结构 21 | */ 22 | private Integer dataType; 23 | 24 | /** 25 | * 分段模式:0-智能切分;1-自定义切分 26 | */ 27 | private Integer segmentMode; 28 | 29 | /** 30 | * 分段标识符 31 | */ 32 | private String[] separators; 33 | 34 | /** 35 | * 分段预估长度 36 | */ 37 | private Integer chunkSize; 38 | 39 | /** 40 | * 分段重叠长度 41 | */ 42 | private Integer chunkOverlap; 43 | 44 | /** 45 | * 数据清洗规则 46 | */ 47 | private Integer[] cleanRules; 48 | 49 | /** 50 | * 状态:0-待处理;1-处理中;2-已结束;3-错误 51 | */ 52 | private Integer state; 53 | 54 | /** 55 | * 失败原因 56 | */ 57 | private String failure; 58 | 59 | /** 60 | * 检索字段(位运算):1-title;2-content; 61 | */ 62 | private Integer embedCols; 63 | 64 | /** 65 | * 模型回复字段(位运算):1-title;2-content; 66 | */ 67 | private Integer replyCols; 68 | 69 | } 70 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/HitTestingVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.*; 4 | 5 | import java.io.Serializable; 6 | 7 | @Getter 8 | @Setter 9 | @Builder 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class HitTestingVO implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | /** 17 | * 主键 18 | */ 19 | private Long id; 20 | 21 | /** 22 | * 分段标题 23 | */ 24 | private String title; 25 | 26 | /** 27 | * 分段内容 28 | */ 29 | private String content; 30 | 31 | /** 32 | * score 33 | */ 34 | private Double score; 35 | 36 | } 37 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/MessageVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDateTime; 8 | import java.util.List; 9 | 10 | @Getter 11 | @Setter 12 | public class MessageVO implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | private Long id; 17 | 18 | private Long chatId; 19 | 20 | private String role; 21 | 22 | private String content; 23 | 24 | private Boolean error; 25 | 26 | private Integer rating; 27 | 28 | private UsageVO usage; 29 | 30 | private List citations; 31 | 32 | private LocalDateTime createAt; 33 | 34 | } 35 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/ModelOptionsVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class ModelOptionsVO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | /** 15 | * 主键 16 | */ 17 | private Long id; 18 | 19 | /** 20 | * 模型名称 21 | */ 22 | private String modelName; 23 | 24 | /** 25 | * 模型提供商 26 | */ 27 | private Integer modelProvider; 28 | 29 | /** 30 | * 模型类型 31 | */ 32 | private Integer modelType; 33 | 34 | /** 35 | * API域名 36 | */ 37 | private String baseUrl; 38 | 39 | /** 40 | * API Key 41 | */ 42 | private String apiKey; 43 | 44 | /** 45 | * Secret Key 46 | */ 47 | private String secretKey; 48 | 49 | /** 50 | * 温度 51 | */ 52 | private Double temperature; 53 | 54 | /** 55 | * 上下文窗口大小 56 | */ 57 | private Integer numCtx; 58 | 59 | /** 60 | * 最大令牌数预测 61 | */ 62 | private Integer maxTokens; 63 | 64 | /** 65 | * 指定响应内容的格式 66 | */ 67 | private String format; 68 | 69 | } 70 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/ModelProviderVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class ModelProviderVO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private String label; 16 | 17 | private Integer value; 18 | 19 | private String icon; 20 | 21 | private List supportedModelTypes; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/ModelVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | public class ModelVO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** 16 | * 主键 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 模型名称 22 | */ 23 | private String modelName; 24 | 25 | /** 26 | * 模型提供商 27 | */ 28 | private Integer modelProvider; 29 | 30 | /** 31 | * 32 | */ 33 | private String modelProviderName; 34 | 35 | /** 36 | * 37 | */ 38 | private String modelProviderIcon; 39 | 40 | /** 41 | * 模型类型 42 | */ 43 | private Integer modelType; 44 | 45 | /** 46 | * 47 | */ 48 | private String modelTypeName; 49 | 50 | /** 51 | * API域名 52 | */ 53 | private String baseUrl; 54 | 55 | /** 56 | * API Key 57 | */ 58 | private String apiKey; 59 | 60 | /** 61 | * Secret Key 62 | */ 63 | private String secretKey; 64 | 65 | /** 66 | * 有效状态:0-无效;1-有效 67 | */ 68 | private Integer status; 69 | 70 | /** 71 | * 更新时间 72 | */ 73 | private LocalDateTime updateAt; 74 | 75 | /** 76 | * 更新人 77 | */ 78 | private String updateBy; 79 | 80 | } 81 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/OauthRoleVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import java.io.Serializable; 4 | import java.time.LocalDateTime; 5 | import java.util.List; 6 | 7 | import lombok.Data; 8 | 9 | /** 10 | * 角色 11 | * 12 | * @TableName oauth_role 13 | */ 14 | @Data 15 | public class OauthRoleVO implements Serializable { 16 | 17 | private static final long serialVersionUID = 1L; 18 | 19 | /** 20 | * 21 | */ 22 | private Long id; 23 | 24 | /** 25 | * 部门Id 26 | */ 27 | private List deptIds; 28 | 29 | /** 30 | * 菜单Id 31 | */ 32 | private List menuIds; 33 | 34 | /** 35 | * 名称 36 | */ 37 | private String name; 38 | 39 | /** 40 | * 编码 41 | */ 42 | private String code; 43 | 44 | /** 45 | * 数据范围(0-全部数据权限;1-自定义数据权限-;2-本部门数据权限;3-本部门及以下数据权限;4-仅本人数据权限) 46 | */ 47 | private Integer dataScope; 48 | 49 | /** 50 | * 排序 51 | */ 52 | private Integer sorting; 53 | 54 | /** 55 | * 备注 56 | */ 57 | private String remark; 58 | 59 | } -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/OauthUserVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDate; 8 | import java.time.LocalDateTime; 9 | import java.util.List; 10 | 11 | @Getter 12 | @Setter 13 | public class OauthUserVO implements Serializable { 14 | 15 | private static final long serialVersionUID = 1L; 16 | 17 | /** 18 | * 19 | */ 20 | private Long id; 21 | 22 | /** 23 | * 部门Id 24 | */ 25 | private Long deptId; 26 | 27 | private String deptName; 28 | 29 | private List postIds; 30 | 31 | private List roleIds; 32 | 33 | /** 34 | * 姓名 35 | */ 36 | private String name; 37 | 38 | /** 39 | * 用户名 40 | */ 41 | private String username; 42 | 43 | /** 44 | * 手机号 45 | */ 46 | private String phone; 47 | 48 | /** 49 | * 邮箱 50 | */ 51 | private String email; 52 | 53 | /** 54 | * 性别:0-未知;1-男;2-女; 55 | */ 56 | private Integer gender; 57 | 58 | /** 59 | * 生日 60 | */ 61 | private LocalDate birthday; 62 | 63 | /** 64 | * 最后登录IP 65 | */ 66 | private String lastLoginIp; 67 | 68 | /** 69 | * 最后登录时间 70 | */ 71 | private LocalDateTime lastLoginTime; 72 | 73 | /** 74 | * 备注 75 | */ 76 | private String remark; 77 | 78 | /** 79 | * 状态:0-无效;1-有效 80 | */ 81 | private Integer status; 82 | 83 | /** 84 | * 创建人 85 | */ 86 | private String createBy; 87 | 88 | /** 89 | * 创建时间 90 | */ 91 | private LocalDateTime createAt; 92 | 93 | /** 94 | * 更新人 95 | */ 96 | private String updateBy; 97 | 98 | /** 99 | * 更新时间 100 | */ 101 | private LocalDateTime updateAt; 102 | 103 | } 104 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/ParagraphExportVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import com.alibaba.excel.annotation.ExcelProperty; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.io.Serializable; 8 | 9 | @Getter 10 | @Setter 11 | public class ParagraphExportVO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | @ExcelProperty("分段标题") 16 | private String title; 17 | 18 | @ExcelProperty("分段内容") 19 | private String content; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/PromptVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class PromptVO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private String taskObjective; 15 | 16 | private String outputFormat; 17 | 18 | private String keyPoints; 19 | 20 | private String prologue; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/RouteMetaVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | @Getter 12 | @Setter 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class RouteMetaVO implements Serializable { 16 | 17 | private static final long serialVersionUID = 1L; 18 | 19 | private String title; 20 | 21 | private List permissions; 22 | 23 | private Boolean noKeepAlive; 24 | 25 | private Boolean hidden; 26 | 27 | private Boolean affix; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/RouteRecordVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | @Getter 12 | @Setter 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class RouteRecordVO implements Serializable { 16 | 17 | private static final long serialVersionUID = 1L; 18 | 19 | private String name; 20 | 21 | private String path; 22 | 23 | private String component; 24 | 25 | private RouteMetaVO meta; 26 | 27 | private List children; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/SegmentVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class SegmentVO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long id; 15 | 16 | private Integer index; 17 | 18 | private String text; 19 | 20 | } -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/SelectOption.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | import java.io.Serializable; 9 | 10 | @Getter 11 | @Setter 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class SelectOption implements Serializable { 15 | 16 | private static final long serialVersionUID = 1L; 17 | 18 | private String label; 19 | 20 | private Integer value; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/UsageVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.*; 4 | 5 | import java.io.Serializable; 6 | 7 | @Getter 8 | @Setter 9 | @Builder 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class UsageVO implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | private Integer promptTokens; 17 | 18 | private Integer completionTokens; 19 | 20 | private Integer totalTokens; 21 | 22 | private Long duration; 23 | 24 | } -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-api/src/main/java/ai/llmchat/server/api/vo/UserDetailsVO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.api.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | @Getter 12 | @Setter 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | public class UserDetailsVO implements Serializable { 16 | 17 | private static final long serialVersionUID = 1L; 18 | 19 | private OauthUserVO user; 20 | 21 | private List permissions; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | ai.llmchat 6 | llmchat-server 7 | ${revision} 8 | ../pom.xml 9 | 10 | 11 | llmchat-server-repository 12 | jar 13 | 14 | 15 | 16 | org.projectlombok 17 | lombok 18 | 19 | 20 | ai.llmchat 21 | llmchat-common-mybatis 22 | 23 | 24 | com.baomidou 25 | mybatis-plus-generator 26 | test 27 | 28 | 29 | org.freemarker 30 | freemarker 31 | test 32 | 33 | 34 | org.springframework.boot 35 | spring-boot-starter-test 36 | test 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/dataobject/AppDatasetDO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.dataobject; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | public class AppDatasetDO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Long id; 16 | 17 | /** 18 | * 数据集名称 19 | */ 20 | private String name; 21 | 22 | /** 23 | * 数据集描述 24 | */ 25 | private String description; 26 | 27 | /** 28 | * 文档数量 29 | */ 30 | private Integer docCount; 31 | 32 | /** 33 | * 是否选中 34 | */ 35 | private Integer selected; 36 | 37 | /** 38 | * 更新时间 39 | */ 40 | private LocalDateTime updateAt; 41 | 42 | } 43 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/dataobject/CitationDO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.dataobject; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class CitationDO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | private Long id; 16 | 17 | private String name; 18 | 19 | private String url; 20 | 21 | private List segments; 22 | 23 | } -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/dataobject/DatasetDO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.dataobject; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | public class DatasetDO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** 16 | * 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 数据集名称 22 | */ 23 | private String name; 24 | 25 | /** 26 | * 数据集描述 27 | */ 28 | private String description; 29 | 30 | /** 31 | * 文档数量 32 | */ 33 | private Integer docCount; 34 | 35 | /** 36 | * 更新时间 37 | */ 38 | private LocalDateTime updateAt; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/dataobject/DatasetItemDO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.dataobject; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class DatasetItemDO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long id; 15 | 16 | private String name; 17 | 18 | private String description; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/dataobject/DocumentItemDO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.dataobject; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | public class DocumentItemDO implements Serializable { 12 | 13 | private static final long serialVersionUID = 1L; 14 | 15 | /** 16 | * 17 | */ 18 | private Long id; 19 | 20 | /** 21 | * 文档名称 22 | */ 23 | private String name; 24 | 25 | /** 26 | * 分段数 27 | */ 28 | private Integer paraCount; 29 | 30 | /** 31 | * 索引数量 32 | */ 33 | private Integer indexCount; 34 | 35 | /** 36 | * 状态:0-待处理;1-处理中;2-已结束;3-错误 37 | */ 38 | private Integer state; 39 | 40 | /** 41 | * 失败原因 42 | */ 43 | private String failure; 44 | 45 | /** 46 | * 更新时间 47 | */ 48 | private LocalDateTime updateAt; 49 | 50 | } 51 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/dataobject/ModelOptionsDO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.dataobject; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class ModelOptionsDO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | /** 15 | * 主键 16 | */ 17 | private Long id; 18 | 19 | /** 20 | * 模型名称 21 | */ 22 | private String modelName; 23 | 24 | /** 25 | * 模型提供商 26 | */ 27 | private Integer modelProvider; 28 | 29 | /** 30 | * 模型类型 31 | */ 32 | private Integer modelType; 33 | 34 | /** 35 | * API域名 36 | */ 37 | private String baseUrl; 38 | 39 | /** 40 | * API Key 41 | */ 42 | private String apiKey; 43 | 44 | /** 45 | * Secret Key 46 | */ 47 | private String secretKey; 48 | 49 | /** 50 | * 温度 51 | */ 52 | private Double temperature; 53 | 54 | /** 55 | * 上下文窗口大小 56 | */ 57 | private Integer numCtx; 58 | 59 | /** 60 | * 最大令牌数预测 61 | */ 62 | private Integer maxTokens; 63 | 64 | /** 65 | * 指定响应内容的格式 66 | */ 67 | private String format; 68 | 69 | } 70 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/dataobject/ParagraphDO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.dataobject; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class ParagraphDO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long docId; 15 | 16 | private String docName; 17 | 18 | private String docUrl; 19 | 20 | private Integer replyCols; 21 | 22 | private Long id; 23 | 24 | private Integer position; 25 | 26 | private String title; 27 | 28 | private String content; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/dataobject/SegmentDO.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.dataobject; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.io.Serializable; 7 | 8 | @Getter 9 | @Setter 10 | public class SegmentDO implements Serializable { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | private Long id; 15 | 16 | private Integer index; 17 | 18 | private String text; 19 | 20 | } -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/entity/OauthRoleDept.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldFill; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import com.baomidou.mybatisplus.annotation.TableName; 8 | import java.io.Serializable; 9 | import java.time.LocalDateTime; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | import lombok.experimental.Accessors; 13 | 14 | /** 15 | *

16 | * 角色部门关联表 17 | *

18 | * 19 | * @author lixw 20 | * @since 2024-10-24 21 | */ 22 | @Getter 23 | @Setter 24 | @Accessors(chain = true) 25 | @TableName("oauth_role_dept") 26 | public class OauthRoleDept implements Serializable { 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | @TableId(value = "id", type = IdType.ASSIGN_ID) 31 | private Long id; 32 | 33 | /** 34 | * 角色Id 35 | */ 36 | @TableField("role_id") 37 | private Long roleId; 38 | 39 | /** 40 | * 部门Id 41 | */ 42 | @TableField("dept_id") 43 | private Long deptId; 44 | 45 | /** 46 | * 状态:0-无效;1-有效 47 | */ 48 | @TableField(value = "status", fill = FieldFill.INSERT) 49 | private Integer status; 50 | 51 | /** 52 | * 创建人 53 | */ 54 | @TableField(value = "create_by", fill = FieldFill.INSERT) 55 | private String createBy; 56 | 57 | /** 58 | * 创建时间 59 | */ 60 | @TableField(value = "create_at", fill = FieldFill.INSERT) 61 | private LocalDateTime createAt; 62 | 63 | /** 64 | * 更新人 65 | */ 66 | @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) 67 | private String updateBy; 68 | 69 | /** 70 | * 更新时间 71 | */ 72 | @TableField(value = "update_at", fill = FieldFill.INSERT_UPDATE) 73 | private LocalDateTime updateAt; 74 | 75 | } 76 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/entity/OauthRoleMenu.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldFill; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import com.baomidou.mybatisplus.annotation.TableName; 8 | import java.io.Serializable; 9 | import java.time.LocalDateTime; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | import lombok.experimental.Accessors; 13 | 14 | /** 15 | *

16 | * 角色菜单关联表 17 | *

18 | * 19 | * @author lixw 20 | * @since 2024-10-24 21 | */ 22 | @Getter 23 | @Setter 24 | @Accessors(chain = true) 25 | @TableName("oauth_role_menu") 26 | public class OauthRoleMenu implements Serializable { 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | @TableId(value = "id", type = IdType.ASSIGN_ID) 31 | private Long id; 32 | 33 | /** 34 | * 角色Id 35 | */ 36 | @TableField("role_id") 37 | private Long roleId; 38 | 39 | /** 40 | * 菜单Id 41 | */ 42 | @TableField("menu_id") 43 | private Long menuId; 44 | 45 | /** 46 | * 状态:0-无效;1-有效 47 | */ 48 | @TableField(value = "status", fill = FieldFill.INSERT) 49 | private Integer status; 50 | 51 | /** 52 | * 创建人 53 | */ 54 | @TableField(value = "create_by", fill = FieldFill.INSERT) 55 | private String createBy; 56 | 57 | /** 58 | * 创建时间 59 | */ 60 | @TableField(value = "create_at", fill = FieldFill.INSERT) 61 | private LocalDateTime createAt; 62 | 63 | /** 64 | * 更新人 65 | */ 66 | @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) 67 | private String updateBy; 68 | 69 | /** 70 | * 更新时间 71 | */ 72 | @TableField(value = "update_at", fill = FieldFill.INSERT_UPDATE) 73 | private LocalDateTime updateAt; 74 | 75 | } 76 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/entity/OauthUserPost.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.FieldFill; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableField; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import com.baomidou.mybatisplus.annotation.TableName; 8 | import java.io.Serializable; 9 | import java.time.LocalDateTime; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | import lombok.experimental.Accessors; 13 | 14 | /** 15 | *

16 | * 用户岗位关联表 17 | *

18 | * 19 | * @author lixw 20 | * @since 2024-10-24 21 | */ 22 | @Getter 23 | @Setter 24 | @Accessors(chain = true) 25 | @TableName("oauth_user_post") 26 | public class OauthUserPost implements Serializable { 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | @TableId(value = "id", type = IdType.ASSIGN_ID) 31 | private Long id; 32 | 33 | /** 34 | * 用户Id 35 | */ 36 | @TableField("user_id") 37 | private Long userId; 38 | 39 | /** 40 | * 岗位Id 41 | */ 42 | @TableField("post_id") 43 | private Long postId; 44 | 45 | /** 46 | * 状态:0-无效;1-有效 47 | */ 48 | @TableField(value = "status", fill = FieldFill.INSERT) 49 | private Integer status; 50 | 51 | /** 52 | * 创建人 53 | */ 54 | @TableField(value = "create_by", fill = FieldFill.INSERT) 55 | private String createBy; 56 | 57 | /** 58 | * 创建时间 59 | */ 60 | @TableField(value = "create_at", fill = FieldFill.INSERT) 61 | private LocalDateTime createAt; 62 | 63 | /** 64 | * 更新人 65 | */ 66 | @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) 67 | private String updateBy; 68 | 69 | /** 70 | * 更新时间 71 | */ 72 | @TableField(value = "update_at", fill = FieldFill.INSERT_UPDATE) 73 | private LocalDateTime updateAt; 74 | 75 | } 76 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/AiAppDatasetMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.dataobject.AppDatasetDO; 4 | import ai.llmchat.server.repository.dataobject.DatasetItemDO; 5 | import ai.llmchat.server.repository.entity.AiAppDataset; 6 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 7 | import org.apache.ibatis.annotations.Mapper; 8 | import org.apache.ibatis.annotations.Param; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * 应用数据集关联表 Mapper 接口 15 | *

16 | * 17 | * @author lixw 18 | * @since 2024-11-04 19 | */ 20 | @Mapper 21 | public interface AiAppDatasetMapper extends BaseMapper { 22 | 23 | List queryPage(@Param("appId") Long appId, @Param("keyword") String keyword); 24 | 25 | List listByAppId(@Param("appId") Long appId); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/AiAppMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.AiApp; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 应用 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-11-04 14 | */ 15 | @Mapper 16 | public interface AiAppMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/AiChatMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.AiChat; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 对话 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-11-07 14 | */ 15 | @Mapper 16 | public interface AiChatMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/AiChatMessageMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.AiChatMessage; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 对话 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-11-07 14 | */ 15 | @Mapper 16 | public interface AiChatMessageMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/AiDatasetMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.dataobject.DatasetDO; 4 | import ai.llmchat.server.repository.entity.AiDataset; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 数据集 Mapper 接口 14 | *

15 | * 16 | * @author lixw 17 | * @since 2024-10-28 18 | */ 19 | @Mapper 20 | public interface AiDatasetMapper extends BaseMapper { 21 | 22 | List queryPage(@Param("name") String name); 23 | 24 | List listByAppId(@Param("appId") Long appId); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/AiDocumentMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.dataobject.DocumentItemDO; 4 | import ai.llmchat.server.repository.entity.AiDocument; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 数据文档 Mapper 接口 14 | *

15 | * 16 | * @author lixw 17 | * @since 2024-10-28 18 | */ 19 | @Mapper 20 | public interface AiDocumentMapper extends BaseMapper { 21 | 22 | List queryPage(@Param("datasetId") Long datasetId, @Param("name") String name, 23 | @Param("state") Integer state); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/AiModelMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.dataobject.ModelOptionsDO; 4 | import ai.llmchat.server.repository.entity.AiModel; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | /** 10 | *

11 | * 模型配置 Mapper 接口 12 | *

13 | * 14 | * @author lixw 15 | * @since 2024-10-28 16 | */ 17 | @Mapper 18 | public interface AiModelMapper extends BaseMapper { 19 | 20 | ModelOptionsDO getModelByDatasetId(@Param("datasetId") Long datasetId); 21 | 22 | ModelOptionsDO getModelByAppId(@Param("appId") Long appId); 23 | 24 | ModelOptionsDO getModelByChatId(@Param("chatId") Long chatId); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/AiParagraphMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.dataobject.ParagraphDO; 4 | import ai.llmchat.server.repository.entity.AiParagraph; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 数据文档 Mapper 接口 14 | *

15 | * 16 | * @author lixw 17 | * @since 2024-10-28 18 | */ 19 | @Mapper 20 | public interface AiParagraphMapper extends BaseMapper { 21 | 22 | List queryByIds(@Param("ids") List ids); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/DictDataMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.DictData; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 字典 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-23 14 | */ 15 | @Mapper 16 | public interface DictDataMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/FileDetailMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.FileDetail; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 文件记录表 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-28 14 | */ 15 | @Mapper 16 | public interface FileDetailMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthDeptMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthDept; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 部门 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-23 14 | */ 15 | @Mapper 16 | public interface OauthDeptMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthMenuMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthMenu; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | *

12 | * 菜单 Mapper 接口 13 | *

14 | * 15 | * @author lixw 16 | * @since 2024-10-23 17 | */ 18 | @Mapper 19 | public interface OauthMenuMapper extends BaseMapper { 20 | 21 | List selectAuthorizedMenuList(@Param("userId") Long userId); 22 | 23 | List selectPermissionList(@Param("userId") Long userId); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthPostMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthPost; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 岗位 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-23 14 | */ 15 | @Mapper 16 | public interface OauthPostMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthRoleDeptMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthRoleDept; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 角色部门关联表 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-23 14 | */ 15 | @Mapper 16 | public interface OauthRoleDeptMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthRoleMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthRole; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 角色 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-23 14 | */ 15 | @Mapper 16 | public interface OauthRoleMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthRoleMenuMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthRoleMenu; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 角色菜单关联表 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-23 14 | */ 15 | @Mapper 16 | public interface OauthRoleMenuMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthUserMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthUser; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | *

12 | * Mapper 接口 13 | *

14 | * 15 | * @author lixw 16 | * @since 2024-10-23 17 | */ 18 | @Mapper 19 | public interface OauthUserMapper extends BaseMapper { 20 | 21 | List selectUserListByRole(@Param("roleId") Long roleId, @Param("name") String name, 22 | @Param("phone") String phone, @Param("userScope") Integer userScope); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthUserPostMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthUserPost; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 用户岗位关联表 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-23 14 | */ 15 | @Mapper 16 | public interface OauthUserPostMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/mapper/OauthUserRoleMapper.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository.mapper; 2 | 3 | import ai.llmchat.server.repository.entity.OauthUserRole; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * 用户角色关联表 Mapper 接口 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-23 14 | */ 15 | @Mapper 16 | public interface OauthUserRoleMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/java/ai/llmchat/server/repository/package-info.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.repository; -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/AiChatMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | id 23 | , app_id, model_id, user_id, title, testing, status, create_at, create_by, update_at, update_by 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/AiChatMessageMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | id 30 | , chat_id, user_id, instruction, prompt, prompt_tokens, completion, completion_tokens, failed, citations, duration, rating, status, create_at, create_by, update_at, update_by 31 | 32 | 33 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/DictDataMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | id, type_id, name, code, sorting, remark, status, create_by, create_at, update_by, update_at 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/OauthDeptMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | id, parent_id, name, code, sorting, remark, status, create_by, create_at, update_by, update_at 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/OauthPostMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | id, name, code, sorting, remark, status, create_by, create_at, update_by, update_at 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/OauthRoleDeptMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | id, role_id, dept_id, status, create_by, create_at, update_by, update_at 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/OauthRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | id, name, code, data_scope, sorting, remark, status, create_by, create_at, update_by, update_at 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/OauthRoleMenuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | id, role_id, menu_id, status, create_by, create_at, update_by, update_at 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/OauthUserPostMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | id, user_id, post_id, status, create_by, create_at, update_by, update_at 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/main/resources/mapper/OauthUserRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | id, user_id, role_id, status, create_by, create_at, update_by, update_at 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-repository/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | dynamic: 4 | aop: 5 | enabled: true 6 | primary: master 7 | strict: false 8 | grace-destroy: true 9 | datasource: 10 | master: 11 | url: jdbc:postgresql://127.0.0.1:5432/llmchat?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8 12 | username: postgres 13 | password: llmchat123456 14 | driver-class-name: org.postgresql.Driver 15 | druid: 16 | initial-size: 4 17 | min-idle: 4 18 | max-active: 8 19 | max-wait: 30000 20 | time-between-eviction-runs-millis: 60000 21 | min-evictable-idle-time-millis: 300000 22 | max-evictable-idle-time-millis: 600000 23 | validation-query: select 1 24 | test-while-idle: true 25 | test-on-borrow: false 26 | test-on-return: false 27 | keep-alive: true 28 | pool-prepared-statements: true 29 | async-init: true 30 | max-pool-prepared-statement-per-connection-size: 8 -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/AiAppDatasetService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.server.api.param.AppDatasetParam; 5 | import ai.llmchat.server.api.vo.AppDatasetVO; 6 | import ai.llmchat.server.api.vo.DatasetItemVO; 7 | import ai.llmchat.server.repository.entity.AiAppDataset; 8 | import com.baomidou.mybatisplus.extension.service.IService; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * 应用数据集关联表 服务类 15 | *

16 | * 17 | * @author lixw 18 | * @since 2024-11-04 19 | */ 20 | public interface AiAppDatasetService extends IService { 21 | 22 | PageData queryPage(AppDatasetParam param); 23 | 24 | void batchSave(Long appId, List datasetIds); 25 | 26 | List listByAppId(Long appId); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/AiAppService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.server.api.param.CommonPageParam; 5 | import ai.llmchat.server.api.param.AppParam; 6 | import ai.llmchat.server.api.vo.AppVO; 7 | import ai.llmchat.server.repository.entity.AiApp; 8 | import com.baomidou.mybatisplus.extension.service.IService; 9 | 10 | /** 11 | *

12 | * 应用 服务类 13 | *

14 | * 15 | * @author lixw 16 | * @since 2024-11-04 17 | */ 18 | public interface AiAppService extends IService { 19 | 20 | PageData queryPage(CommonPageParam param); 21 | 22 | AppVO findById(Long appId); 23 | 24 | Long saveOrUpdate(AppParam param); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/AiChatMessageService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.server.repository.entity.AiChatMessage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | *

8 | * 对话 服务类 9 | *

10 | * 11 | * @author lixw 12 | * @since 2024-11-07 13 | */ 14 | public interface AiChatMessageService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/AiChatService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.langchain.rag.output.Message; 4 | import ai.llmchat.server.api.param.*; 5 | import ai.llmchat.server.api.vo.MessageVO; 6 | import ai.llmchat.server.api.vo.PromptVO; 7 | import ai.llmchat.server.repository.entity.AiChat; 8 | import com.baomidou.mybatisplus.extension.service.IService; 9 | import reactor.core.publisher.Flux; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | *

15 | * 对话 服务类 16 | *

17 | * 18 | * @author lixw 19 | * @since 2024-11-07 20 | */ 21 | public interface AiChatService extends IService { 22 | 23 | Flux debugChat(ChatTestingParam param); 24 | 25 | Flux streamingChat(ChatStramingParam param); 26 | 27 | List chatMessageById(Long chatId); 28 | 29 | AppChatVO chatListByAppId(Long appId); 30 | 31 | PromptVO optimize(OptimizeParam param); 32 | 33 | List suggested(Long chatId); 34 | 35 | Long saveOrUpdate(ChatParam param); 36 | 37 | void rating(RatingParam param); 38 | 39 | } 40 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/AiDatasetService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.common.langchain.document.Paragraph; 5 | import ai.llmchat.server.api.param.CommonPageParam; 6 | import ai.llmchat.server.api.param.DatasetParam; 7 | import ai.llmchat.server.api.param.HitTestingParam; 8 | import ai.llmchat.server.api.vo.DatasetVO; 9 | import ai.llmchat.server.api.vo.HitTestingVO; 10 | import ai.llmchat.server.repository.entity.AiDataset; 11 | import com.baomidou.mybatisplus.extension.service.IService; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | *

17 | * 数据集 服务类 18 | *

19 | * 20 | * @author lixw 21 | * @since 2024-10-28 22 | */ 23 | public interface AiDatasetService extends IService { 24 | 25 | PageData queryPage(CommonPageParam param); 26 | 27 | Long saveOrUpdate(DatasetParam param); 28 | 29 | List hitTesting(HitTestingParam param); 30 | 31 | List listByAppId(Long appId); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/AiDocumentService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.server.api.enums.StateEnum; 5 | import ai.llmchat.server.api.param.DocumentPageParam; 6 | import ai.llmchat.server.api.param.DocumentParam; 7 | import ai.llmchat.server.api.param.FileParam; 8 | import ai.llmchat.server.api.vo.DocumentItemVO; 9 | import ai.llmchat.server.repository.entity.AiDocument; 10 | import com.baomidou.mybatisplus.extension.service.IService; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | *

16 | * 数据文档 服务类 17 | *

18 | * 19 | * @author lixw 20 | * @since 2024-10-28 21 | */ 22 | public interface AiDocumentService extends IService { 23 | 24 | PageData queryPage(DocumentPageParam param); 25 | 26 | void saveOrUpdate(DocumentParam param, List fileParamList); 27 | 28 | void saveOrUpdate(DocumentParam param); 29 | 30 | void changeState(Long docId, StateEnum state, String failure); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/AiModelService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.common.core.wrapper.data.SelectGroupNode; 5 | import ai.llmchat.server.api.param.ModelPageParam; 6 | import ai.llmchat.server.api.vo.ModelProviderVO; 7 | import ai.llmchat.server.api.vo.ModelVO; 8 | import ai.llmchat.server.repository.dataobject.ModelOptionsDO; 9 | import ai.llmchat.server.repository.entity.AiModel; 10 | import com.baomidou.mybatisplus.extension.service.IService; 11 | import dev.langchain4j.model.embedding.EmbeddingModel; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | *

17 | * 模型配置 服务类 18 | *

19 | * 20 | * @author lixw 21 | * @since 2024-10-24 22 | */ 23 | public interface 24 | 25 | AiModelService extends IService { 26 | 27 | PageData queryPage(ModelPageParam param); 28 | 29 | List selectGroupOptions(Integer modelType); 30 | 31 | List modelProviderList(); 32 | 33 | EmbeddingModel embeddingModelByDatasetId(Long datasetId); 34 | 35 | ModelOptionsDO findByChatId(Long chatId); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/AiParagraphService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.server.api.enums.StateEnum; 5 | import ai.llmchat.server.api.param.EnabledParam; 6 | import ai.llmchat.server.api.param.ParagraphPageParam; 7 | import ai.llmchat.server.api.vo.ParagraphExportVO; 8 | import ai.llmchat.server.repository.dataobject.ParagraphDO; 9 | import ai.llmchat.server.repository.entity.AiParagraph; 10 | import com.baomidou.mybatisplus.extension.service.IService; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | *

16 | * 数据文档 服务类 17 | *

18 | * 19 | * @author lixw 20 | * @since 2024-10-28 21 | */ 22 | public interface AiParagraphService extends IService { 23 | 24 | PageData queryPage(ParagraphPageParam param); 25 | 26 | void enabled(EnabledParam param); 27 | 28 | List queryParagraphByIds(List ids); 29 | 30 | void incrementHitCount(List ids); 31 | 32 | void removeByDocId(Long docId); 33 | 34 | List listPendingByDocId(Long docId); 35 | 36 | void changeState(List ids, StateEnum state); 37 | 38 | void changeState(List ids, StateEnum state, String failure); 39 | 40 | void reindexByDocId(Long docId); 41 | 42 | void reindexByDatasetId(Long dsId); 43 | 44 | void reindex(Long paraId); 45 | 46 | List exportListByDocId(Long docId); 47 | 48 | } 49 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/DictDataService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.server.api.param.CommonPageParam; 5 | import ai.llmchat.server.repository.entity.DictData; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | /** 9 | *

10 | * 字典 服务类 11 | *

12 | * 13 | * @author lixw 14 | * @since 2024-10-22 15 | */ 16 | public interface DictDataService extends IService { 17 | 18 | PageData queryPage(CommonPageParam param); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/FileDetailService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.server.repository.entity.FileDetail; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import org.dromara.x.file.storage.core.FileInfo; 6 | 7 | /** 8 | *

9 | * 文件记录表 服务类 10 | *

11 | * 12 | * @author lixw 13 | * @since 2024-10-28 14 | */ 15 | public interface FileDetailService extends IService { 16 | 17 | FileInfo findById(Long id); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthDeptService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.common.core.wrapper.data.TreeNode; 5 | import ai.llmchat.server.api.param.CommonPageParam; 6 | import ai.llmchat.server.repository.entity.OauthDept; 7 | import com.baomidou.mybatisplus.extension.service.IService; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 部门 服务类 14 | *

15 | * 16 | * @author lixw 17 | * @since 2024-10-22 18 | */ 19 | public interface OauthDeptService extends IService { 20 | 21 | PageData queryPage(CommonPageParam param); 22 | 23 | List treeData(Long parentId); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthMenuService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.common.core.wrapper.data.TreeNode; 5 | import ai.llmchat.server.api.param.CommonPageParam; 6 | import ai.llmchat.server.api.vo.RouteRecordVO; 7 | import ai.llmchat.server.repository.entity.OauthMenu; 8 | import com.baomidou.mybatisplus.extension.service.IService; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * 菜单 服务类 15 | *

16 | * 17 | * @author lixw 18 | * @since 2024-10-22 19 | */ 20 | public interface OauthMenuService extends IService { 21 | 22 | PageData queryPage(CommonPageParam param); 23 | 24 | List treeData(Long parentId); 25 | 26 | List selectAuthorizedMenuList(Long userId); 27 | 28 | List selectPermissionList(Long userId); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthPostService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.common.core.wrapper.data.SelectNode; 5 | import ai.llmchat.server.api.param.CommonPageParam; 6 | import ai.llmchat.server.repository.entity.OauthPost; 7 | import com.baomidou.mybatisplus.extension.service.IService; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 岗位 服务类 14 | *

15 | * 16 | * @author lixw 17 | * @since 2024-10-22 18 | */ 19 | public interface OauthPostService extends IService { 20 | 21 | PageData queryPage(CommonPageParam param); 22 | 23 | List selectOptions(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthRoleDeptService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.server.repository.entity.OauthRoleDept; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * 角色部门关联表 服务类 11 | *

12 | * 13 | * @author lixw 14 | * @since 2024-10-23 15 | */ 16 | public interface OauthRoleDeptService extends IService { 17 | 18 | void batchSave(Long roleId, List ids); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthRoleMenuService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.server.repository.entity.OauthRoleMenu; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * 角色菜单关联表 服务类 11 | *

12 | * 13 | * @author lixw 14 | * @since 2024-10-23 15 | */ 16 | public interface OauthRoleMenuService extends IService { 17 | 18 | void batchSave(Long roleId, List ids); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthRoleService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.common.core.wrapper.data.SelectNode; 5 | import ai.llmchat.server.api.param.CommonPageParam; 6 | import ai.llmchat.server.api.param.DataScopeParam; 7 | import ai.llmchat.server.api.param.MenuScopeParam; 8 | import ai.llmchat.server.api.vo.OauthRoleVO; 9 | import ai.llmchat.server.repository.entity.OauthRole; 10 | import ai.llmchat.server.repository.entity.OauthRole; 11 | import com.baomidou.mybatisplus.extension.service.IService; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | *

17 | * 角色 服务类 18 | *

19 | * 20 | * @author lixw 21 | * @since 2024-10-22 22 | */ 23 | public interface OauthRoleService extends IService { 24 | 25 | PageData queryPage(CommonPageParam param); 26 | 27 | DataScopeParam dataScopeById(Long id); 28 | 29 | void modifyDataScope(DataScopeParam param); 30 | 31 | MenuScopeParam menuScopeById(Long id); 32 | 33 | void modifyMenuScope(MenuScopeParam param); 34 | 35 | List selectOptions(); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthUserPostService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.server.repository.entity.OauthUserPost; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | *

10 | * 用户岗位关联表 服务类 11 | *

12 | * 13 | * @author lixw 14 | * @since 2024-10-23 15 | */ 16 | public interface OauthUserPostService extends IService { 17 | 18 | void batchSave(Long userId, List ids); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthUserRoleService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.server.api.param.UserRolePageParam; 5 | import ai.llmchat.server.api.param.UserRoleParam; 6 | import ai.llmchat.server.repository.entity.OauthUser; 7 | import ai.llmchat.server.repository.entity.OauthUserRole; 8 | import com.baomidou.mybatisplus.extension.service.IService; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * 用户角色关联表 服务类 15 | *

16 | * 17 | * @author lixw 18 | * @since 2024-10-23 19 | */ 20 | public interface OauthUserRoleService extends IService { 21 | 22 | void batchSave(Long userId, List ids); 23 | 24 | PageData userRoleList(UserRolePageParam param); 25 | 26 | void allocated(UserRoleParam param); 27 | 28 | void unallocated(UserRoleParam param); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/OauthUserService.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service; 2 | 3 | import ai.llmchat.common.core.wrapper.data.PageData; 4 | import ai.llmchat.server.api.param.OauthUserParam; 5 | import ai.llmchat.server.api.param.OauthUserPageParam; 6 | import ai.llmchat.server.api.vo.OauthUserVO; 7 | import ai.llmchat.server.repository.entity.OauthUser; 8 | import com.baomidou.mybatisplus.extension.service.IService; 9 | 10 | /** 11 | * @author lxw 12 | * @description 针对表【oauth_user】的数据库操作Service 13 | * @createDate 2024-10-21 14:15:53 14 | */ 15 | public interface OauthUserService extends IService { 16 | 17 | PageData queryPage(OauthUserPageParam param); 18 | 19 | Long saveOrUpdate(OauthUserParam param); 20 | 21 | OauthUserVO selectById(Long id); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/consumer/MessageConstants.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.consumer; 2 | 3 | public interface MessageConstants { 4 | 5 | String TOPIC_DOCUMENT_SPLIT = "TOPIC_DOCUMENT_SPLIT"; 6 | 7 | String TOPIC_PARAGRAPH_EMBEDDING = "TOPIC_PARAGRAPH_EMBEDDING"; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/converter/AiAppConverter.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.converter; 2 | 3 | import ai.llmchat.server.api.param.AppParam; 4 | import ai.llmchat.server.api.vo.AppVO; 5 | import ai.llmchat.server.repository.entity.AiApp; 6 | import org.mapstruct.Mapper; 7 | 8 | import java.util.List; 9 | 10 | @Mapper(componentModel = "spring") 11 | public interface AiAppConverter { 12 | 13 | AiApp param2do(AppParam param); 14 | 15 | AppVO do2vo(AiApp app); 16 | 17 | List do2vo(List list); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/converter/AiAppDatasetConverter.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.converter; 2 | 3 | import ai.llmchat.server.api.vo.AppDatasetVO; 4 | import ai.llmchat.server.api.vo.DatasetItemVO; 5 | import ai.llmchat.server.repository.dataobject.AppDatasetDO; 6 | import ai.llmchat.server.repository.dataobject.DatasetItemDO; 7 | import org.mapstruct.Mapper; 8 | 9 | import java.util.List; 10 | 11 | @Mapper(componentModel = "spring") 12 | public interface AiAppDatasetConverter { 13 | 14 | List do2vo(List list); 15 | 16 | List itemDo2vo(List list); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/converter/AiChatConverter.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.converter; 2 | 3 | import ai.llmchat.common.langchain.rag.output.Citation; 4 | import ai.llmchat.common.langchain.rag.output.Segment; 5 | import ai.llmchat.server.api.param.ChatParam; 6 | import ai.llmchat.server.api.vo.ChatVO; 7 | import ai.llmchat.server.api.vo.CitationVO; 8 | import ai.llmchat.server.api.vo.SegmentVO; 9 | import ai.llmchat.server.repository.dataobject.CitationDO; 10 | import ai.llmchat.server.repository.dataobject.SegmentDO; 11 | import ai.llmchat.server.repository.entity.AiChat; 12 | import org.mapstruct.Mapper; 13 | import org.mapstruct.Mapping; 14 | import org.mapstruct.Mappings; 15 | 16 | import java.util.Collection; 17 | import java.util.List; 18 | 19 | @Mapper(componentModel = "spring") 20 | public interface AiChatConverter { 21 | 22 | List dto2vo(Collection list); 23 | 24 | @Mappings({ @Mapping(source = "id", target = "chatId"), }) 25 | ChatVO dto2vo(AiChat dto); 26 | 27 | List citationDto2do(Collection list); 28 | 29 | List citationDo2vo(Collection list); 30 | 31 | List segmentDto2Do(Collection list); 32 | 33 | List segmentDo2vo(Collection list); 34 | 35 | @Mappings({ @Mapping(source = "chatId", target = "id"), }) 36 | AiChat param2dto(ChatParam param); 37 | 38 | } 39 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/converter/AiDatasetConverter.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.converter; 2 | 3 | import ai.llmchat.server.api.param.DatasetParam; 4 | import ai.llmchat.server.api.vo.DatasetVO; 5 | import ai.llmchat.server.repository.dataobject.DatasetDO; 6 | import ai.llmchat.server.repository.entity.AiDataset; 7 | import org.mapstruct.Mapper; 8 | 9 | import java.util.List; 10 | 11 | @Mapper(componentModel = "spring") 12 | public interface AiDatasetConverter { 13 | 14 | AiDataset param2dto(DatasetParam param); 15 | 16 | DatasetVO do2vo(DatasetDO param); 17 | 18 | List do2vo(List list); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/converter/AiDocumentConverter.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.converter; 2 | 3 | import ai.llmchat.server.api.param.DocumentParam; 4 | import ai.llmchat.server.api.vo.DocumentItemVO; 5 | import ai.llmchat.server.api.vo.DocumentVO; 6 | import ai.llmchat.server.repository.dataobject.DocumentItemDO; 7 | import ai.llmchat.server.repository.entity.AiDocument; 8 | import org.mapstruct.Mapper; 9 | 10 | import java.util.List; 11 | 12 | @Mapper(componentModel = "spring") 13 | public interface AiDocumentConverter { 14 | 15 | AiDocument param2dto(DocumentParam param); 16 | 17 | List do2vo(List list); 18 | 19 | DocumentVO dto2vo(AiDocument dto); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/converter/AiModelsConverter.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.converter; 2 | 3 | import ai.llmchat.common.langchain.enums.ModelProviderEnum; 4 | import ai.llmchat.common.langchain.enums.ModelTypeEnum; 5 | import ai.llmchat.server.api.vo.ModelVO; 6 | import ai.llmchat.server.repository.entity.AiModel; 7 | import org.mapstruct.Mapper; 8 | import org.mapstruct.Mapping; 9 | import org.mapstruct.Named; 10 | 11 | import java.util.Collection; 12 | import java.util.List; 13 | 14 | @Mapper(componentModel = "spring") 15 | public interface AiModelsConverter { 16 | 17 | List dto2vo(Collection dto); 18 | 19 | @Mapping(source = "modelProvider", target = "modelProviderName", qualifiedByName = "toModelProviderName") 20 | @Mapping(source = "modelProvider", target = "modelProviderIcon", qualifiedByName = "toModelProviderIcon") 21 | @Mapping(source = "modelType", target = "modelTypeName", qualifiedByName = "toModelTypeName") 22 | ModelVO dto2vo(AiModel dto); 23 | 24 | @Named("toModelProviderIcon") 25 | public static String toModelProviderIcon(Integer modelProvider) { 26 | return ModelProviderEnum.valueOf(modelProvider).getIcon(); 27 | } 28 | 29 | @Named("toModelProviderName") 30 | public static String toModelProviderName(Integer modelProvider) { 31 | return ModelProviderEnum.valueOf(modelProvider).getMessage(); 32 | } 33 | 34 | @Named("toModelTypeName") 35 | public static String toModelTypeName(Integer modelType) { 36 | return ModelTypeEnum.valueOf(modelType).getMessage(); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/converter/OauthRoleConverter.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.converter; 2 | 3 | import ai.llmchat.server.api.vo.OauthRoleVO; 4 | import ai.llmchat.server.repository.entity.OauthRole; 5 | import org.mapstruct.Mapper; 6 | 7 | @Mapper(componentModel = "spring") 8 | public interface OauthRoleConverter { 9 | 10 | OauthRoleVO dto2vo(OauthRole dto); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/converter/OauthUserConverter.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.converter; 2 | 3 | import ai.llmchat.server.api.param.OauthUserParam; 4 | import ai.llmchat.server.api.vo.OauthUserVO; 5 | import ai.llmchat.server.repository.entity.OauthUser; 6 | import org.mapstruct.Mapper; 7 | 8 | import java.util.Collection; 9 | import java.util.List; 10 | 11 | @Mapper(componentModel = "spring") 12 | public interface OauthUserConverter { 13 | 14 | OauthUser param2dto(OauthUserParam param); 15 | 16 | OauthUserVO dto2vo(OauthUser dto); 17 | 18 | List dto2vo(Collection list); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/impl/AiChatMessageServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.impl; 2 | 3 | import ai.llmchat.server.repository.entity.AiChatMessage; 4 | import ai.llmchat.server.repository.mapper.AiChatMessageMapper; 5 | import ai.llmchat.server.service.AiChatMessageService; 6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 对话 服务实现类 12 | *

13 | * 14 | * @author lixw 15 | * @since 2024-11-07 16 | */ 17 | @Service 18 | public class AiChatMessageServiceImpl extends ServiceImpl 19 | implements AiChatMessageService { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/impl/OauthRoleDeptServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.impl; 2 | 3 | import ai.llmchat.server.repository.entity.OauthRoleDept; 4 | import ai.llmchat.server.repository.entity.OauthRoleMenu; 5 | import ai.llmchat.server.repository.mapper.OauthRoleDeptMapper; 6 | import ai.llmchat.server.service.OauthRoleDeptService; 7 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; 8 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 9 | import org.springframework.stereotype.Service; 10 | import org.springframework.util.CollectionUtils; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | *

16 | * 角色部门关联表 服务实现类 17 | *

18 | * 19 | * @author lixw 20 | * @since 2024-10-23 21 | */ 22 | @Service 23 | public class OauthRoleDeptServiceImpl extends ServiceImpl 24 | implements OauthRoleDeptService { 25 | 26 | @Override 27 | public void batchSave(Long roleId, List ids) { 28 | remove(Wrappers.lambdaQuery().eq(OauthRoleDept::getRoleId, roleId)); 29 | if (CollectionUtils.isEmpty(ids)) { 30 | return; 31 | } 32 | List list = ids.stream().map(item -> { 33 | OauthRoleDept result = new OauthRoleDept(); 34 | result.setDeptId(item); 35 | result.setRoleId(roleId); 36 | return result; 37 | }).toList(); 38 | saveBatch(list); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/impl/OauthRoleMenuServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.impl; 2 | 3 | import ai.llmchat.server.repository.entity.OauthRoleMenu; 4 | import ai.llmchat.server.repository.mapper.OauthRoleMenuMapper; 5 | import ai.llmchat.server.service.OauthRoleMenuService; 6 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; 7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 8 | import org.springframework.stereotype.Service; 9 | import org.springframework.util.CollectionUtils; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | *

15 | * 角色菜单关联表 服务实现类 16 | *

17 | * 18 | * @author lixw 19 | * @since 2024-10-23 20 | */ 21 | @Service 22 | public class OauthRoleMenuServiceImpl extends ServiceImpl 23 | implements OauthRoleMenuService { 24 | 25 | @Override 26 | public void batchSave(Long roleId, List ids) { 27 | remove(Wrappers.lambdaQuery().eq(OauthRoleMenu::getRoleId, roleId)); 28 | if (CollectionUtils.isEmpty(ids)) { 29 | return; 30 | } 31 | List list = ids.stream().map(item -> { 32 | OauthRoleMenu result = new OauthRoleMenu(); 33 | result.setMenuId(item); 34 | result.setRoleId(roleId); 35 | return result; 36 | }).toList(); 37 | saveBatch(list); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-service/src/main/java/ai/llmchat/server/service/impl/OauthUserPostServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server.service.impl; 2 | 3 | import ai.llmchat.server.repository.entity.OauthUserPost; 4 | import ai.llmchat.server.repository.mapper.OauthUserPostMapper; 5 | import ai.llmchat.server.service.OauthUserPostService; 6 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; 7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 8 | import org.springframework.stereotype.Service; 9 | import org.springframework.util.CollectionUtils; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | *

15 | * 用户岗位关联表 服务实现类 16 | *

17 | * 18 | * @author lixw 19 | * @since 2024-10-23 20 | */ 21 | @Service 22 | public class OauthUserPostServiceImpl extends ServiceImpl 23 | implements OauthUserPostService { 24 | 25 | @Override 26 | public void batchSave(Long userId, List ids) { 27 | remove(Wrappers.lambdaQuery().eq(OauthUserPost::getUserId, userId)); 28 | if (CollectionUtils.isEmpty(ids)) { 29 | return; 30 | } 31 | List list = ids.stream().map(item -> { 32 | OauthUserPost result = new OauthUserPost(); 33 | result.setPostId(item); 34 | result.setUserId(userId); 35 | return result; 36 | }).toList(); 37 | saveBatch(list); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-start/src/main/java/ai/llmchat/server/BootstrapApplication.java: -------------------------------------------------------------------------------- 1 | package ai.llmchat.server; 2 | 3 | import org.dromara.x.file.storage.spring.EnableFileStorage; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @EnableFileStorage 8 | @SpringBootApplication 9 | public class BootstrapApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(BootstrapApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /llmchat-server/llmchat-server-start/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | shutdown: graceful 3 | spring: 4 | servlet: 5 | multipart: 6 | enabled: true 7 | max-request-size: 100MB 8 | max-file-size: 100MB 9 | messages: 10 | encoding: UTF-8 11 | basename: i18n/messages 12 | application: 13 | name: llmchat 14 | lifecycle: 15 | timeout-per-shutdown-phase: 15s 16 | main: 17 | allow-bean-definition-overriding: true 18 | management: 19 | endpoints: 20 | web: 21 | exposure: 22 | include: '*' 23 | pagehelper: 24 | helper-dialect: postgresql 25 | params: count=countSql 26 | support-methods-arguments: true 27 | mybatis-plus: 28 | global-config: 29 | db-config: 30 | logic-not-delete-value: 1 31 | logic-delete-value: 0 32 | logic-delete-field: status 33 | configuration: 34 | map-underscore-to-camel-case: true 35 | mapper-locations: classpath*:/mapper/**/*.xml 36 | logging: 37 | config: classpath:logback-config.xml -------------------------------------------------------------------------------- /llmchat-server/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | 5 | ai.llmchat 6 | llmchat-parent 7 | ${revision} 8 | ../pom.xml 9 | 10 | llmchat-server 11 | pom 12 | 13 | llmchat-server-api 14 | llmchat-server-repository 15 | llmchat-server-start 16 | llmchat-server-service 17 | 18 | 19 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | build: 2 | mvn --version 3 | mvn -U clean test 4 | # Analyze code for errors, potential issues, and coding standard violations. 5 | # Reports problems but does not modify the code. 6 | lint: 7 | mvn spring-javaformat:validate 8 | # Automatically format the code to conform to a style guide. 9 | # Modifies the code to ensure consistent formatting. 10 | format: 11 | mvn spring-javaformat:apply --------------------------------------------------------------------------------