Commit 409192b5 authored by Wade's avatar Wade

add ollama models

parent e1fb0284
{"level":"info","pid":7027,"time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/log.go:68","message":"This message appears when log level set to Debug or Info"}
{"level":"info","pid":7027,"method":"DeepSeek.Init","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:94","message":"Initializing DeepSeek plugin"}
{"level":"info","pid":7027,"method":"DeepSeek.DefineModel","model_name":"deepseek-chat","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:128","message":"Defining DeepSeek model"}
{"level":"info","pid":7027,"method":"Deep lantern","model_name":"deepseek-chat","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:158","message":"Model defined successfully"}
{"level":"info","pid":7027,"method":"DeepSeek.DefineModel","model_name":"deepseek-coder","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:128","message":"Defining DeepSeek model"}
{"level":"info","pid":7027,"method":"Deep lantern","model_name":"deepseek-coder","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:158","message":"Model defined successfully"}
{"level":"info","pid":7027,"method":"DeepSeek.DefineModel","model_name":"deepseek-reasoner","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:128","message":"Defining DeepSeek model"}
{"level":"info","pid":7027,"method":"Deep lantern","model_name":"deepseek-reasoner","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:158","message":"Model defined successfully"}
{"level":"info","pid":7027,"method":"DeepSeek.Init","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:119","message":"Initialization successful"}
{"level":"info","pid":7027,"method":"Milvus.Init","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"}
{"level":"info","pid":7027,"method":"Milvus.Init","time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"}
{"level":"info","pid":7027,"method":"GraphKnowledge.Init","time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"}
{"level":"info","pid":7027,"method":"NewClient","ip":"54.92.111.204","port":5670,"time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:93","message":"Creating new GraphRAG client"}
{"level":"info","pid":7027,"method":"GraphKnowledge.Init","time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"}
{"level":"info","pid":7027,"method":"DefineIndexerAndRetriever","collection":"chatRag1","dimension":768,"time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:152","message":"Defining indexer and retriever"}
{"level":"info","pid":7027,"method":"Milvus.newDocStore","collection":"chatRag1","dimension":768,"time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:201","message":"Creating new doc store"}
{"level":"info","pid":7027,"method":"Milvus.newDocStore","collection":"chatRag1","time":1749267394,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:302","message":"Doc store created successfully"}
{"level":"info","pid":7027,"method":"DefineIndexerAndRetriever","collection":"chatRag1","time":1749267394,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:182","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":7027,"method":"DefineIndexerAndRetriever","time":1749267394,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:357","message":"Defining indexer and retriever"}
{"level":"info","pid":7027,"method":"GraphKnowledge.newDocStore","space_id":"","model_name":"Qwen/Qwen2.5-Coder-32B-Instruct","time":1749267394,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:393","message":"Creating new doc store"}
{"level":"info","pid":7027,"method":"GraphKnowledge.newDocStore","time":1749267394,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:399","message":"Doc store created successfully"}
{"level":"info","pid":7027,"method":"DefineIndexerAndRetriever","time":1749267394,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:376","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":7027,"method":"NewKnowledgeClient","endpoint":"lkeap.tencentcloudapi.com","region":"ap-guangzhou","secret_id":"","token":"","time":1749267395,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:43","message":"Creating new KnowledgeClient"}
{"level":"info","pid":7027,"method":"KnowledgeClient.Init","time":1749267395,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:51","message":"Initializing KnowledgeClient"}
{"level":"info","pid":7027,"method":"KnowledgeClient.Init","time":1749267395,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:109","message":"Initialization successful"}
{"level":"info","pid":7027,"time":1749267395,"caller":"/Users/wade/project/wuban/agentchat/main.go:271","message":"KnowledgeClient initialized successfully"}
{"level":"info","pid":7027,"time":1749267425,"caller":"/Users/wade/project/wuban/agentchat/main.go:279","message":"input----ctxAsJson----{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{\"Context\":{}}}}}}}}}}}}}}}}}}}}}}}"}
{"level":"info","pid":7027,"time":1749267425,"caller":"/Users/wade/project/wuban/agentchat/main.go:290","message":"input--------{\"content\":\"What is the capital of UK?\",\"from\":\"Alice\",\"from_id\":\"user123\",\"to\":\"string\",\"to_id\":\"user456\",\"model\":\"gpt-3.5-turbo\",\"apiKey\":\"sk-1234567890abcdef\",\"milvus\":true}"}
{"level":"info","pid":7027,"time":1749267426,"caller":"/Users/wade/project/wuban/agentchat/main.go:318","message":"qaAsJson--------{\"ID\":56,\"CreatedAt\":\"2025-06-07T03:34:27.994203Z\",\"FromID\":\"user123\",\"From\":\"Alice\",\"Question\":\"What is the capital of UK?\",\"Answer\":\"The provided context does not include information about the capital of the UK. However, the capital of the UK is London. \\n\\nLet me know if you'd like further details! \\n\\n\\u003creferences title=\\\"References\\\" references=\\\"[]\\\" /\\u003e\",\"Summary\":\"Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: I am sorry, but the provided context does not contain the answer to your question about the capital of the UK.\",\"To\":\"string\",\"ToID\":\"user456\",\"Milvus\":true,\"Graph\":false}"}
{"level":"info","pid":7027,"method":"docStore.Retrieve","collection":"chatRag1","time":1749267426,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:450","message":"Starting retrieve operation"}
{"level":"info","pid":7027,"method":"docStore.Retrieve","collection":"chatRag1","documents":2,"time":1749267429,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:640","message":"Retrieve operation completed successfully"}
{"level":"info","pid":7027,"time":1749267429,"caller":"/Users/wade/project/wuban/agentchat/main.go:344","message":"promptInput.Context: Paris is the capital of France?\nUSA is the largest importer of coffee?\n"}
{"level":"info","pid":7027,"method":"docStore.Retrieve","space_id":"","time":1749267429,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:755","message":"Starting retrieve operation"}
{"level":"info","pid":7027,"method":"docStore.Retrieve","space_id":"","documents":1,"time":1749267435,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:892","message":"Retrieve operation completed successfully"}
{"level":"info","pid":7027,"time":1749267435,"caller":"/Users/wade/project/wuban/agentchat/main.go:359","message":"promptInput.Graph : 知识库中提供的内容不足以回答此问题\n\n<references title=\"References\" references=\"[]\" />\n"}
{"level":"info","pid":7027,"method":"generator.generate","model_name":"deepseek-chat","messages":1,"time":1749267435,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:174","message":"Starting model generation"}
{"level":"info","pid":7027,"method":"generator.generate","model_name":"deepseek-chat","content_parts":1,"time":1749267441,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:252","message":"Model generation completed successfully"}
{"level":"info","pid":7027,"from":"Alice","from_id":"user123","to":"string","to_id":"user456","promptInput.Query":"What is the capital of UK?","resp.Text()":"The provided context does not include information about the capital of the UK. However, the capital of the UK is London. \n\nLet me know if you'd like further details! \n\n<references title=\"References\" references=\"[]\" />","promptInput.Summary":"Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: I am sorry, but the provided context does not contain the answer to your question about the capital of the UK.","time":1749267441,"caller":"/Users/wade/project/wuban/agentchat/main.go:386","message":"QueryRewriteWithSummary"}
{"level":"info","pid":7027,"method":"KnowledgeClient.QueryRewriteWithSummary","user_question":"What is the capital of UK?","assistant_answer":"The provided context does not include information about the capital of the UK. However, the capital of the UK is London. \n\nLet me know if you'd like further details! \n\n<references title=\"References\" references=\"[]\" />","history_summary":"Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: I am sorry, but the provided context does not contain the answer to your question about the capital of the UK.","time":1749267441,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:256","message":"Starting query rewrite with summary operation"}
{"level":"info","pid":7027,"method":"KnowledgeClient.QueryRewrite","message_count":3,"model":"lke-query-rewrite-base","time":1749267441,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:131","message":"Starting query rewrite operation"}
{"level":"info","pid":7027,"method":"KnowledgeClient.QueryRewrite","rewritten_query":"Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: I am sorry, but the provided context does not contain the answer to your question about the capital of the UK.","request_id":"4efbb8d7-16fd-4de8-ad0c-e8b2befa4770","usage":{"InputTokens":131,"OutputTokens":45,"TotalTokens":176},"raw_response":"{\"Response\":{\"Content\":\"Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: I am sorry, but the provided context does not contain the answer to your question about the capital of the UK.\",\"Usage\":{\"InputTokens\":131,\"OutputTokens\":45,\"TotalTokens\":176},\"RequestId\":\"4efbb8d7-16fd-4de8-ad0c-e8b2befa4770\"}}","time":1749267444,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:237","message":"Query rewrite operation completed successfully"}
{"level":"info","pid":7027,"from":"Alice","from_id":"user123","to":"string","to_id":"user456","question":"What is the capital of UK?","context":"Paris is the capital of France?\nUSA is the largest importer of coffee?\n","graph":"知识库中提供的内容不足以回答此问题\n\n<references title=\"References\" references=\"[]\" />\n","last summary":"Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: Conversation summary: I am sorry, but the provided context does not contain the answer to your question about the capital of the UK.","answer":"The provided context does not include information about the capital of the UK. However, the capital of the UK is London. \n\nLet me know if you'd like further details! \n\n<references title=\"References\" references=\"[]\" />","time":1749267444,"caller":"/Users/wade/project/wuban/agentchat/main.go:412","message":"Question and answer pair recorded"}
{"level":"info","pid":16602,"time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/log.go:68","message":"This message appears when log level set to Debug or Info"}
{"level":"info","pid":16602,"method":"DeepSeek.Init","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:98","message":"Initializing DeepSeek plugin"}
{"level":"info","pid":16602,"method":"DeepSeek.DefineModel","model_name":"deepseek-chat","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":16602,"method":"Deep lantern","model_name":"deepseek-chat","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":16602,"method":"DeepSeek.DefineModel","model_name":"deepseek-coder","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":16602,"method":"Deep lantern","model_name":"deepseek-coder","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":16602,"method":"DeepSeek.DefineModel","model_name":"deepseek-reasoner","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":16602,"method":"Deep lantern","model_name":"deepseek-reasoner","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":16602,"method":"DeepSeek.Init","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:123","message":"Initialization successful"}
{"level":"info","pid":16602,"method":"Milvus.Init","time":1749295282,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"}
{"level":"info","pid":16602,"method":"Milvus.Init","time":1749295283,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"}
{"level":"info","pid":16602,"method":"GraphKnowledge.Init","time":1749295283,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"}
{"level":"info","pid":16602,"method":"NewClient","ip":"54.92.111.204","port":5670,"time":1749295283,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:93","message":"Creating new GraphRAG client"}
{"level":"info","pid":16602,"method":"GraphKnowledge.Init","time":1749295283,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"}
{"level":"info","pid":16602,"method":"DefineIndexerAndRetriever","collection":"chatRag1","dimension":768,"time":1749295283,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:152","message":"Defining indexer and retriever"}
{"level":"info","pid":16602,"method":"Milvus.newDocStore","collection":"chatRag1","dimension":768,"time":1749295283,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:201","message":"Creating new doc store"}
{"level":"info","pid":16602,"method":"Milvus.newDocStore","collection":"chatRag1","time":1749295284,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:302","message":"Doc store created successfully"}
{"level":"info","pid":16602,"method":"DefineIndexerAndRetriever","collection":"chatRag1","time":1749295284,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:182","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":16602,"method":"DefineIndexerAndRetriever","time":1749295284,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:357","message":"Defining indexer and retriever"}
{"level":"info","pid":16602,"method":"GraphKnowledge.newDocStore","space_id":"","model_name":"Qwen/Qwen2.5-Coder-32B-Instruct","time":1749295284,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:393","message":"Creating new doc store"}
{"level":"info","pid":16602,"method":"GraphKnowledge.newDocStore","time":1749295284,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:399","message":"Doc store created successfully"}
{"level":"info","pid":16602,"method":"DefineIndexerAndRetriever","time":1749295284,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:376","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":16602,"method":"NewKnowledgeClient","endpoint":"lkeap.tencentcloudapi.com","region":"ap-guangzhou","secret_id":"","token":"","time":1749295285,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:43","message":"Creating new KnowledgeClient"}
{"level":"info","pid":16602,"method":"KnowledgeClient.Init","time":1749295285,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:51","message":"Initializing KnowledgeClient"}
{"level":"info","pid":16602,"method":"KnowledgeClient.Init","time":1749295285,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:109","message":"Initialization successful"}
{"level":"info","pid":16602,"time":1749295285,"caller":"/Users/wade/project/wuban/agentchat/flow.go:200","message":"KnowledgeClient initialized successfully"}
{"level":"info","pid":16602,"method":"DefineModelsFlow","provider":"","time":1749295294,"caller":"/Users/wade/project/wuban/agentchat/flow.go:38","message":"Listing models and embedders for provider"}
{"level":"info","pid":16732,"time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/log.go:68","message":"This message appears when log level set to Debug or Info"}
{"level":"info","pid":16732,"method":"DeepSeek.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:98","message":"Initializing DeepSeek plugin"}
{"level":"info","pid":16732,"method":"DeepSeek.DefineModel","model_name":"deepseek-chat","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":16732,"method":"Deep lantern","model_name":"deepseek-chat","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":16732,"method":"DeepSeek.DefineModel","model_name":"deepseek-coder","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":16732,"method":"Deep lantern","model_name":"deepseek-coder","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":16732,"method":"DeepSeek.DefineModel","model_name":"deepseek-reasoner","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":16732,"method":"Deep lantern","model_name":"deepseek-reasoner","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":16732,"method":"DeepSeek.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:123","message":"Initialization successful"}
{"level":"info","pid":16732,"method":"Milvus.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"}
{"level":"info","pid":16732,"method":"Milvus.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"}
{"level":"info","pid":16732,"method":"GraphKnowledge.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"}
{"level":"info","pid":16732,"method":"NewClient","ip":"54.92.111.204","port":5670,"time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:93","message":"Creating new GraphRAG client"}
{"level":"info","pid":16732,"method":"GraphKnowledge.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"}
{"level":"info","pid":16732,"method":"DefineIndexerAndRetriever","collection":"chatRag1","dimension":768,"time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:152","message":"Defining indexer and retriever"}
{"level":"info","pid":16732,"method":"Milvus.newDocStore","collection":"chatRag1","dimension":768,"time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:201","message":"Creating new doc store"}
{"level":"info","pid":16732,"method":"Milvus.newDocStore","collection":"chatRag1","time":1749295323,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:302","message":"Doc store created successfully"}
{"level":"info","pid":16732,"method":"DefineIndexerAndRetriever","collection":"chatRag1","time":1749295323,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:182","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":16732,"method":"DefineIndexerAndRetriever","time":1749295323,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:357","message":"Defining indexer and retriever"}
{"level":"info","pid":16732,"method":"GraphKnowledge.newDocStore","space_id":"","model_name":"Qwen/Qwen2.5-Coder-32B-Instruct","time":1749295323,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:393","message":"Creating new doc store"}
{"level":"info","pid":16732,"method":"GraphKnowledge.newDocStore","time":1749295323,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:399","message":"Doc store created successfully"}
{"level":"info","pid":16732,"method":"DefineIndexerAndRetriever","time":1749295323,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:376","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":16732,"method":"NewKnowledgeClient","endpoint":"lkeap.tencentcloudapi.com","region":"ap-guangzhou","secret_id":"","token":"","time":1749295324,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:43","message":"Creating new KnowledgeClient"}
{"level":"info","pid":16732,"method":"KnowledgeClient.Init","time":1749295324,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:51","message":"Initializing KnowledgeClient"}
{"level":"info","pid":16732,"method":"KnowledgeClient.Init","time":1749295324,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:109","message":"Initialization successful"}
{"level":"info","pid":16732,"time":1749295324,"caller":"/Users/wade/project/wuban/agentchat/flow.go:200","message":"KnowledgeClient initialized successfully"}
{"level":"info","pid":16732,"method":"DefineModelsFlow","provider":"","time":1749295332,"caller":"/Users/wade/project/wuban/agentchat/flow.go:38","message":"Listing models and embedders for provider"}
{"level":"info","pid":17042,"time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/log.go:68","message":"This message appears when log level set to Debug or Info"}
{"level":"info","pid":17042,"method":"DeepSeek.Init","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:98","message":"Initializing DeepSeek plugin"}
{"level":"info","pid":17042,"method":"DeepSeek.DefineModel","model_name":"deepseek-chat","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17042,"method":"Deep lantern","model_name":"deepseek-chat","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17042,"method":"DeepSeek.DefineModel","model_name":"deepseek-coder","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17042,"method":"Deep lantern","model_name":"deepseek-coder","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17042,"method":"DeepSeek.DefineModel","model_name":"deepseek-reasoner","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17042,"method":"Deep lantern","model_name":"deepseek-reasoner","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17042,"method":"DeepSeek.Init","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:123","message":"Initialization successful"}
{"level":"info","pid":17042,"method":"Milvus.Init","time":1749295409,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"}
{"level":"info","pid":17042,"method":"Milvus.Init","time":1749295410,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"}
{"level":"info","pid":17042,"method":"GraphKnowledge.Init","time":1749295410,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"}
{"level":"info","pid":17042,"method":"NewClient","ip":"54.92.111.204","port":5670,"time":1749295410,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:93","message":"Creating new GraphRAG client"}
{"level":"info","pid":17042,"method":"GraphKnowledge.Init","time":1749295410,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"}
{"level":"info","pid":17042,"method":"DefineIndexerAndRetriever","collection":"chatRag1","dimension":768,"time":1749295410,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:152","message":"Defining indexer and retriever"}
{"level":"info","pid":17042,"method":"Milvus.newDocStore","collection":"chatRag1","dimension":768,"time":1749295410,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:201","message":"Creating new doc store"}
{"level":"info","pid":17042,"method":"Milvus.newDocStore","collection":"chatRag1","time":1749295411,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:302","message":"Doc store created successfully"}
{"level":"info","pid":17042,"method":"DefineIndexerAndRetriever","collection":"chatRag1","time":1749295411,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:182","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":17042,"method":"DefineIndexerAndRetriever","time":1749295411,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:357","message":"Defining indexer and retriever"}
{"level":"info","pid":17042,"method":"GraphKnowledge.newDocStore","space_id":"","model_name":"Qwen/Qwen2.5-Coder-32B-Instruct","time":1749295411,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:393","message":"Creating new doc store"}
{"level":"info","pid":17042,"method":"GraphKnowledge.newDocStore","time":1749295411,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:399","message":"Doc store created successfully"}
{"level":"info","pid":17042,"method":"DefineIndexerAndRetriever","time":1749295411,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:376","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":17042,"method":"NewKnowledgeClient","endpoint":"lkeap.tencentcloudapi.com","region":"ap-guangzhou","secret_id":"","token":"","time":1749295412,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:43","message":"Creating new KnowledgeClient"}
{"level":"info","pid":17042,"method":"KnowledgeClient.Init","time":1749295412,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:51","message":"Initializing KnowledgeClient"}
{"level":"info","pid":17042,"method":"KnowledgeClient.Init","time":1749295412,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:109","message":"Initialization successful"}
{"level":"info","pid":17042,"time":1749295412,"caller":"/Users/wade/project/wuban/agentchat/flow.go:207","message":"KnowledgeClient initialized successfully"}
{"level":"info","pid":17042,"method":"DefineModelsFlow","provider":"","time":1749295413,"caller":"/Users/wade/project/wuban/agentchat/flow.go:38","message":"Listing models and embedders for provider"}
{"level":"info","pid":17311,"time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/log.go:68","message":"This message appears when log level set to Debug or Info"}
{"level":"info","pid":17311,"method":"DeepSeek.Init","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:98","message":"Initializing DeepSeek plugin"}
{"level":"info","pid":17311,"method":"DeepSeek.DefineModel","model_name":"deepseek-chat","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17311,"method":"Deep lantern","model_name":"deepseek-chat","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17311,"method":"DeepSeek.DefineModel","model_name":"deepseek-coder","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17311,"method":"Deep lantern","model_name":"deepseek-coder","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17311,"method":"DeepSeek.DefineModel","model_name":"deepseek-reasoner","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17311,"method":"Deep lantern","model_name":"deepseek-reasoner","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17311,"method":"DeepSeek.Init","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:123","message":"Initialization successful"}
{"level":"info","pid":17311,"method":"Milvus.Init","time":1749295462,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"}
{"level":"info","pid":17311,"method":"Milvus.Init","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"}
{"level":"info","pid":17311,"method":"GraphKnowledge.Init","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"}
{"level":"info","pid":17311,"method":"NewClient","ip":"54.92.111.204","port":5670,"time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:93","message":"Creating new GraphRAG client"}
{"level":"info","pid":17311,"method":"GraphKnowledge.Init","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"}
{"level":"info","pid":17311,"method":"DefineIndexerAndRetriever","collection":"chatRag1","dimension":768,"time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:152","message":"Defining indexer and retriever"}
{"level":"info","pid":17311,"method":"Milvus.newDocStore","collection":"chatRag1","dimension":768,"time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:201","message":"Creating new doc store"}
{"level":"info","pid":17311,"method":"Milvus.newDocStore","collection":"chatRag1","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:302","message":"Doc store created successfully"}
{"level":"info","pid":17311,"method":"DefineIndexerAndRetriever","collection":"chatRag1","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:182","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":17311,"method":"DefineIndexerAndRetriever","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:357","message":"Defining indexer and retriever"}
{"level":"info","pid":17311,"method":"GraphKnowledge.newDocStore","space_id":"","model_name":"Qwen/Qwen2.5-Coder-32B-Instruct","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:393","message":"Creating new doc store"}
{"level":"info","pid":17311,"method":"GraphKnowledge.newDocStore","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:399","message":"Doc store created successfully"}
{"level":"info","pid":17311,"method":"DefineIndexerAndRetriever","time":1749295464,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:376","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":17311,"method":"NewKnowledgeClient","endpoint":"lkeap.tencentcloudapi.com","region":"ap-guangzhou","secret_id":"","token":"","time":1749295465,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:43","message":"Creating new KnowledgeClient"}
{"level":"info","pid":17311,"method":"KnowledgeClient.Init","time":1749295465,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:51","message":"Initializing KnowledgeClient"}
{"level":"info","pid":17311,"method":"KnowledgeClient.Init","time":1749295465,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:109","message":"Initialization successful"}
{"level":"info","pid":17311,"time":1749295465,"caller":"/Users/wade/project/wuban/agentchat/flow.go:201","message":"KnowledgeClient initialized successfully"}
{"level":"info","pid":17311,"method":"DefineModelsFlow","provider":"","time":1749295477,"caller":"/Users/wade/project/wuban/agentchat/flow.go:38","message":"Listing models and embedders for provider"}
{"level":"info","pid":17408,"time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/log.go:68","message":"This message appears when log level set to Debug or Info"}
{"level":"info","pid":17408,"method":"DeepSeek.Init","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:98","message":"Initializing DeepSeek plugin"}
{"level":"info","pid":17408,"method":"DeepSeek.DefineModel","model_name":"deepseek-chat","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17408,"method":"Deep lantern","model_name":"deepseek-chat","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17408,"method":"DeepSeek.DefineModel","model_name":"deepseek-coder","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17408,"method":"Deep lantern","model_name":"deepseek-coder","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17408,"method":"DeepSeek.DefineModel","model_name":"deepseek-reasoner","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":17408,"method":"Deep lantern","model_name":"deepseek-reasoner","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":17408,"method":"DeepSeek.Init","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:123","message":"Initialization successful"}
{"level":"info","pid":17408,"method":"Milvus.Init","time":1749295519,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"}
{"level":"info","pid":17408,"method":"Milvus.Init","time":1749295520,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"}
{"level":"info","pid":17408,"method":"GraphKnowledge.Init","time":1749295520,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"}
{"level":"info","pid":17408,"method":"NewClient","ip":"54.92.111.204","port":5670,"time":1749295520,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:93","message":"Creating new GraphRAG client"}
{"level":"info","pid":17408,"method":"GraphKnowledge.Init","time":1749295520,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"}
{"level":"info","pid":17408,"method":"DefineIndexerAndRetriever","collection":"chatRag1","dimension":768,"time":1749295520,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:152","message":"Defining indexer and retriever"}
{"level":"info","pid":17408,"method":"Milvus.newDocStore","collection":"chatRag1","dimension":768,"time":1749295520,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:201","message":"Creating new doc store"}
{"level":"info","pid":17408,"method":"Milvus.newDocStore","collection":"chatRag1","time":1749295521,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:302","message":"Doc store created successfully"}
{"level":"info","pid":17408,"method":"DefineIndexerAndRetriever","collection":"chatRag1","time":1749295521,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:182","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":17408,"method":"DefineIndexerAndRetriever","time":1749295521,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:357","message":"Defining indexer and retriever"}
{"level":"info","pid":17408,"method":"GraphKnowledge.newDocStore","space_id":"","model_name":"Qwen/Qwen2.5-Coder-32B-Instruct","time":1749295521,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:393","message":"Creating new doc store"}
{"level":"info","pid":17408,"method":"GraphKnowledge.newDocStore","time":1749295521,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:399","message":"Doc store created successfully"}
{"level":"info","pid":17408,"method":"DefineIndexerAndRetriever","time":1749295521,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:376","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":17408,"method":"NewKnowledgeClient","endpoint":"lkeap.tencentcloudapi.com","region":"ap-guangzhou","secret_id":"","token":"","time":1749295522,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:43","message":"Creating new KnowledgeClient"}
{"level":"info","pid":17408,"method":"KnowledgeClient.Init","time":1749295522,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:51","message":"Initializing KnowledgeClient"}
{"level":"info","pid":17408,"method":"KnowledgeClient.Init","time":1749295522,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:109","message":"Initialization successful"}
{"level":"info","pid":17408,"time":1749295522,"caller":"/Users/wade/project/wuban/agentchat/flow.go:201","message":"KnowledgeClient initialized successfully"}
{"level":"info","pid":17408,"method":"DefineModelsFlow","provider":"","time":1749295526,"caller":"/Users/wade/project/wuban/agentchat/flow.go:38","message":"Listing models and embedders for provider"}
{"level":"info","pid":19897,"time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/log.go:68","message":"This message appears when log level set to Debug or Info"}
{"level":"info","pid":19897,"method":"DeepSeek.Init","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:98","message":"Initializing DeepSeek plugin"}
{"level":"info","pid":19897,"method":"DeepSeek.DefineModel","model_name":"deepseek-chat","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":19897,"method":"Deep lantern","model_name":"deepseek-chat","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":19897,"method":"DeepSeek.DefineModel","model_name":"deepseek-coder","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":19897,"method":"Deep lantern","model_name":"deepseek-coder","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":19897,"method":"DeepSeek.DefineModel","model_name":"deepseek-reasoner","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:132","message":"Defining DeepSeek model"}
{"level":"info","pid":19897,"method":"Deep lantern","model_name":"deepseek-reasoner","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:162","message":"Model defined successfully"}
{"level":"info","pid":19897,"method":"DeepSeek.Init","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:123","message":"Initialization successful"}
{"level":"info","pid":19897,"method":"Milvus.Init","time":1749296374,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"}
{"level":"info","pid":19897,"method":"Milvus.Init","time":1749296376,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"}
{"level":"info","pid":19897,"method":"GraphKnowledge.Init","time":1749296376,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"}
{"level":"info","pid":19897,"method":"NewClient","ip":"54.92.111.204","port":5670,"time":1749296376,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:93","message":"Creating new GraphRAG client"}
{"level":"info","pid":19897,"method":"GraphKnowledge.Init","time":1749296376,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"}
{"level":"info","pid":19897,"method":"DefineIndexerAndRetriever","collection":"chatRag1","dimension":768,"time":1749296376,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:152","message":"Defining indexer and retriever"}
{"level":"info","pid":19897,"method":"Milvus.newDocStore","collection":"chatRag1","dimension":768,"time":1749296376,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:201","message":"Creating new doc store"}
{"level":"info","pid":19897,"method":"Milvus.newDocStore","collection":"chatRag1","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:302","message":"Doc store created successfully"}
{"level":"info","pid":19897,"method":"DefineIndexerAndRetriever","collection":"chatRag1","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:182","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":19897,"method":"DefineIndexerAndRetriever","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:357","message":"Defining indexer and retriever"}
{"level":"info","pid":19897,"method":"GraphKnowledge.newDocStore","space_id":"","model_name":"Qwen/Qwen2.5-Coder-32B-Instruct","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:393","message":"Creating new doc store"}
{"level":"info","pid":19897,"method":"GraphKnowledge.newDocStore","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:399","message":"Doc store created successfully"}
{"level":"info","pid":19897,"method":"DefineIndexerAndRetriever","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:376","message":"Indexer and retriever defined successfully"}
{"level":"info","pid":19897,"method":"NewKnowledgeClient","endpoint":"lkeap.tencentcloudapi.com","region":"ap-guangzhou","secret_id":"","token":"","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:43","message":"Creating new KnowledgeClient"}
{"level":"info","pid":19897,"method":"KnowledgeClient.Init","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:51","message":"Initializing KnowledgeClient"}
{"level":"info","pid":19897,"method":"KnowledgeClient.Init","time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/plugins/knowledge/knowledge.go:109","message":"Initialization successful"}
{"level":"info","pid":19897,"time":1749296377,"caller":"/Users/wade/project/wuban/agentchat/flow.go:327","message":"KnowledgeClient initialized successfully"}
{"level":"info","pid":19897,"method":"DefineModelsFlow","provider":"","time":1749296388,"caller":"/Users/wade/project/wuban/agentchat/flow.go:39","message":"Listing models and embedders for provider"}
{"level":"info","pid":19897,"method":"DefineModelsFlow","provider":"","time":1749296388,"caller":"/Users/wade/project/wuban/agentchat/flow.go:149","message":"------default---"}
{"level":"info","pid":19897,"method":"DefineModelsFlow","provider":"ollama","time":1749296437,"caller":"/Users/wade/project/wuban/agentchat/flow.go:39","message":"Listing models and embedders for provider"}
......@@ -149,6 +149,33 @@ paths:
data: '{"id": 1}'
code: 200
msg: "GraphRAG index data stored successfully"
/models:
post:
summary: List available models for a provider
description: Returns a list of available models for the specified provider (e.g., "deepseek" or "googleai").
tags:
- Chat
requestBody:
required: true
content:
application/json:
schema:
type: string
description: The provider to list models for
example: "deepseek"
responses:
'200':
description: Successful response with the list of models
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
examples:
success:
value:
data: '{"deepseek-chat":{"label":"DeepSeek Chat","supports":{"multiturn":true,"systemRole":true,"media":false,"tools":true},"versions":[]},"deepseek-coder":{"label":"DeepSeek Coder","supports":{"multiturn":true,"systemRole":true,"media":false,"tools":true},"versions":[]},"deepseek-reasoner":{"label":"DeepSeek Reasoner","supports":{"multiturn":true,"systemRole":true,"media":false,"tools":true},"versions":[]}}'
code: 200
msg: "Models listed successfully"
/chat:
post:
summary: Send a chat message
......@@ -228,8 +255,29 @@ components:
msg:
type: string
description: A message describing the result
example: "Milvus index data stored successfully"
example: "Models listed successfully"
required:
- data
- code
- msg
# components:
# schemas:
# Response:
# type: object
# properties:
# data:
# type: string
# description: The response data, typically a JSON string or message
# example: '{"id": 1}'
# code:
# type: integer
# description: The response code (200 for success, 400 for invalid input, etc.)
# example: 200
# msg:
# type: string
# description: A message describing the result
# example: "Milvus index data stored successfully"
# required:
# - data
# - code
# - msg
package main
import (
"context"
"encoding/json"
"fmt"
"strings"
"time"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/wade-liwei/agentchat/plugins/deepseek"
"github.com/wade-liwei/agentchat/plugins/graphrag"
"github.com/wade-liwei/agentchat/plugins/knowledge"
"github.com/wade-liwei/agentchat/plugins/question"
"github.com/wade-liwei/agentchat/util"
"google.golang.org/genai"
// Import knowledge package
"github.com/firebase/genkit/go/plugins/googlegenai"
"github.com/firebase/genkit/go/plugins/ollama"
"github.com/rs/zerolog/log"
_ "github.com/wade-liwei/agentchat/docs" // 导入生成的 Swagger 文档
)
// ProviderInfo 封装模型和嵌入器信息
type ProviderInfo struct {
Models map[string]ai.ModelInfo `json:"models,omitempty"`
Embedders []string `json:"embedders,omitempty"`
Provider string `json:"provider,omitempty"`
}
// DefineModelsFlow 定义 models 流
func DefineModelsFlow(g *genkit.Genkit) {
genkit.DefineFlow(g, "models", func(ctx context.Context, provider string) ([]ProviderInfo, error) {
log.Info().
Str("method", "DefineModelsFlow").
Str("provider", provider).
Msg("Listing models and embedders for provider")
infos := make([]ProviderInfo, 0, 3)
switch provider {
case googlegenai.GoogleAIProvider:
googleModels, err := googlegenai.ListModels(googlegenai.GoogleAIProvider)
if err != nil {
log.Error().
Str("method", "DefineModelsFlow").
Str("provider", provider).
Err(err).
Msg("Failed to list Google AI provider info")
return nil, err
}
googleEmbedders, err := googlegenai.ListEmbedders(genai.BackendGeminiAPI)
if err != nil {
log.Error().
Str("method", "DefineModelsFlow").
Str("provider", provider).
Err(err).
Msg("Failed to list Google AI embedders")
return nil, err
}
googleInfo := ProviderInfo{
Provider: googlegenai.GoogleAIProvider,
Models: googleModels,
Embedders: googleEmbedders,
}
infos = append(infos, googleInfo)
return infos, nil
case deepseek.Provider:
dsModels := deepseek.ListModels()
infos = append(infos, ProviderInfo{
Provider: deepseek.Provider,
Models: dsModels,
Embedders: []string{}, // DeepSeek 不支持嵌入器
})
return infos, nil
case ollama.Provider:
ollamaModels, err := ollama.ListModels()
if err != nil {
log.Error().
Str("method", "DefineModelsFlow").
Str("provider", provider).
Err(err).
Msg("Failed to list Ollama provider info")
return nil, err
}
infos = append(infos, ProviderInfo{
Provider: ollama.Provider,
Models: ollamaModels,
})
return infos, nil
default:
// Google AI
googleModels, err := googlegenai.ListModels(googlegenai.GoogleAIProvider)
if err != nil {
log.Error().
Str("method", "DefineModelsFlow").
Str("provider", googlegenai.GoogleAIProvider).
Err(err).
Msg("Failed to list Google AI provider info")
return nil, err
}
googleEmbedders, err := googlegenai.ListEmbedders(genai.BackendGeminiAPI)
if err != nil {
log.Error().
Str("method", "DefineModelsFlow").
Str("provider", googlegenai.GoogleAIProvider).
Err(err).
Msg("Failed to list Google AI embedders")
return nil, err
}
infos = append(infos, ProviderInfo{
Provider: googlegenai.GoogleAIProvider,
Models: googleModels,
Embedders: googleEmbedders,
})
// DeepSeek
dsModels := deepseek.ListModels()
infos = append(infos, ProviderInfo{
Provider: deepseek.Provider,
Models: dsModels,
Embedders: []string{}, // DeepSeek 不支持嵌入器
})
ollamaModels, err := ollama.ListModels()
if err != nil {
log.Error().
Str("method", "DefineModelsFlow").
Str("provider", provider).
Err(err).
Msg("Failed to list Ollama provider info")
return nil, err
}
infos = append(infos, ProviderInfo{
Provider: ollama.Provider,
Models: ollamaModels,
})
log.Info().
Str("method", "DefineModelsFlow").
Str("provider", provider).
Msg("------default---")
return infos, nil
}
})
}
// DefineModelsFlow 定义 models 流
// func DefineModelsFlow(g *genkit.Genkit) {
// genkit.DefineFlow(g, "models", func(ctx context.Context, provider string) ([]ProviderInfo, error) {
// log.Info().
// Str("method", "DefineModelsFlow").
// Str("provider", provider).
// Msg("Listing models and embedders for provider")
// infos := make([]ProviderInfo, 0, 2)
// switch provider {
// case googlegenai.GoogleAIProvider:
// goggleModels, err := googlegenai.ListModels(googlegenai.GoogleAIProvider)
// if err != nil {
// log.Error().
// Str("method", "DefineModelsFlow").
// Str("provider", provider).
// Err(err).
// Msg("Failed to list Google AI provider info")
// return nil, err
// }
// goggleEmbedders, err := googlegenai.ListEmbedders(genai.BackendGeminiAPI) //ListModels(googlegenai.GoogleAIProvider)
// if err != nil {
// log.Error().
// Str("method", "DefineModelsFlow").
// Str("provider", provider).
// Err(err).
// Msg("Failed to list Google AI provider info")
// return nil, err
// }
// googleInfo := ProviderInfo{
// Provider: googlegenai.GoogleAIProvider,
// Models: goggleModels,
// Embedders: goggleEmbedders,
// }
// infos = append(infos, googleInfo)
// return infos, nil
// case deepseek.Provider:
// dsModels := deepseek.ListModels()
// infos = append(infos, ProviderInfo{
// Provider: deepseek.Provider,
// Models: dsModels,
// })
// return infos, nil
// default:
// infos := make([]ProviderInfo, 0, 2)
// goggleModels, err := googlegenai.ListModels(googlegenai.GoogleAIProvider)
// if err != nil {
// return nil, err
// }
// goggleEmbedders, err := googlegenai.ListEmbedders(genai.BackendGeminiAPI) //ListModels(googlegenai.GoogleAIProvider)
// if err != nil {
// return nil, err
// }
// googleInfo := ProviderInfo{
// Provider: googlegenai.GoogleAIProvider,
// Models: goggleModels,
// Embedders: goggleEmbedders,
// }
// infos = append(infos, googleInfo)
// dsModels := deepseek.ListModels()
// infos = append(infos, ProviderInfo{
// Provider: deepseek.Provider,
// Models: dsModels,
// })
// fmt.Println(provider,"------default---")
// return infos, err
// }
// })
// }
func DefineGraphFlow(g *genkit.Genkit, graphIndexer ai.Indexer) {
genkit.DefineFlow(g, "index/graph", func(ctx context.Context, input *GraphInput) (Response, error) {
opt := graphrag.IndexReqOption{
UserId: input.UserID,
UserName: input.Username,
}
resDocName := ""
if v, ok := input.Metadata[graphrag.DocNameKey]; !ok {
// Generate random docName.
docName, err := graphrag.GenerateRandomDocName(8)
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("generate random docName for document %w", err),
}, nil
}
input.Metadata[graphrag.DocNameKey] = docName
resDocName = docName
} else {
if str, isString := v.(string); isString {
resDocName = str
}
}
doc := ai.DocumentFromText(input.Content, input.Metadata)
err := graphIndexer.Index(ctx, &ai.IndexerRequest{
Documents: []*ai.Document{doc},
Options: &opt,
})
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("index document: %w", err),
}, nil
}
return Response{
Code: 200,
Msg: fmt.Sprintf("Document indexed successfully, docname %s", resDocName),
}, nil
})
}
func DefineDocumentFlow(g *genkit.Genkit, indexer ai.Indexer) {
// 定义文档索引流
genkit.DefineFlow(g, "index/document", func(ctx context.Context, input *DocumentInput) (Response, error) {
if input.Metadata == nil {
input.Metadata = make(map[string]any)
}
input.Metadata[util.UserIdKey] = input.UserID
input.Metadata[util.UserNameKey] = input.Username
doc := ai.DocumentFromText(input.Content, input.Metadata)
err := indexer.Index(ctx, &ai.IndexerRequest{
Documents: []*ai.Document{doc},
})
if err != nil {
return Response{
Code: 500,
Msg: err.Error(),
}, nil
}
return Response{
Code: 200,
Msg: "Document indexed successfully",
}, nil
})
}
func DefineChatFlow(g *genkit.Genkit, retriever ai.Retriever, graphRetriever ai.Retriever, pgConnString string) {
qa, err := question.InitQAStore(pgConnString)
if err != nil {
log.Fatal().Msgf("InitQAStore failed: %v", err)
}
// Initialize KnowledgeClient with test parameters
kc := knowledge.NewKnowledgeClient(knowledge.ClientConfig{
Endpoint: "lkeap.tencentcloudapi.com",
Region: "ap-guangzhou",
})
if err := kc.Init(context.Background()); err != nil {
log.Fatal().Msgf("Failed to initialize KnowledgeClient: %v", err)
}
log.Info().Msg("KnowledgeClient initialized successfully")
// Define a simple flow that generates jokes about a given topic
genkit.DefineFlow(g, "chat", func(ctx context.Context, input *ChatInput) (Response, error) {
ctxAsJson, _ := json.Marshal(ctx)
log.Info().Msgf("input----ctxAsJson----%s", string(ctxAsJson))
inputAsJson, err := json.Marshal(input)
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("json.Marshal: %w", err),
}, nil
}
log.Info().Msgf("input--------%s", string(inputAsJson))
idx, lastQa, lastok, err := qa.WriteAndGetLatestQA(context.Background(), question.QA{
FromID: &input.FromID,
From: &input.From,
Question: &input.Content,
To: &input.To,
ToID: &input.ToID,
Milvus: &input.Milvus,
Graph: &input.Graph,
})
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("WriteAndGetLatestQA: %w", err),
}, nil
}
qaAsJson, err := json.Marshal(lastQa)
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("json.Marshal(lastQa): %w", err),
}, nil
}
log.Info().Msgf("qaAsJson--------%s", string(qaAsJson))
promptInput := &simpleQaPromptInput{
Query: input.Content,
}
if lastok && lastQa.Summary != nil {
promptInput.Summary = *lastQa.Summary
}
metaData := make(map[string]any)
metaData[util.UserIdKey] = input.ToID
metaData[util.UserNameKey] = input.To
dRequest := ai.DocumentFromText(input.Content, metaData)
response, err := ai.Retrieve(ctx, retriever, ai.WithDocs(dRequest))
if err != nil {
log.Error().Msgf("milvus Retrieve err.Error() %s", err.Error())
} else {
var sb strings.Builder
for _, d := range response.Documents {
sb.WriteString(d.Content[0].Text)
sb.WriteByte('\n')
}
promptInput.Context = sb.String()
log.Info().Msgf("promptInput.Context: %s", promptInput.Context)
}
begin := time.Now()
graphResponse, err := ai.Retrieve(ctx, graphRetriever, ai.WithDocs(dRequest))
if err != nil {
log.Error().Msgf("graph Retrieve err.Error() %s", err.Error())
} else {
var sb strings.Builder
for _, d := range graphResponse.Documents {
sb.WriteString(d.Content[0].Text)
sb.WriteByte('\n')
}
promptInput.Graph = sb.String()
log.Info().Msgf("promptInput.Graph : %s", promptInput.Graph)
}
fmt.Println("graph time", time.Since(begin).Seconds())
simpleQaPrompt, err := defineSimpleQaPrompt(g, input.Model)
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("index document: %w", err),
}, nil
}
resp, err := simpleQaPrompt.Execute(ctx, ai.WithInput(promptInput))
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("index document: %w", err),
}, nil
}
if lastok {
if promptInput.Summary == "" {
promptInput.Summary = resp.Text()
}
log.Info().
Str("from", input.From).
Str("from_id", input.FromID).
Str("to", input.To).
Str("to_id", input.ToID).
Str("promptInput.Query", promptInput.Query).
Str("resp.Text()", resp.Text()).
Str("promptInput.Summary", promptInput.Summary).Msg("QueryRewriteWithSummary")
res, err := kc.QueryRewriteWithSummary(context.Background(), promptInput.Query, resp.Text(), promptInput.Summary)
if err != nil {
log.Error().Msg(err.Error())
} else {
qa.UpdateQAFields(context.Background(), idx, res.RewrittenQuery, resp.Text())
/*
{"RewrittenQuery":"Conversation summary: The available knowledge base does not contain information about the capital of the UK.","RawResponse":{"Response":{"Content":"Conversation summary: The available knowledge base does not contain information about the capital of the UK.","Usage":{"InputTokens":74,"OutputTokens":19,"TotalTokens":93},"RequestId":"15f1ce0c-a83f-4d95-af22-33a3bd829e8d"}}}
*/
}
} else {
qa.UpdateQAFields(context.Background(), idx, "", resp.Text())
}
log.Info().
Str("from", input.From).
Str("from_id", input.FromID).
Str("to", input.To).
Str("to_id", input.ToID).
Str("question", promptInput.Query).
Str("context", promptInput.Context).
Str("graph", promptInput.Graph).
Str("last summary", promptInput.Summary).
Str("answer", resp.Text()).
Msg("Question and answer pair recorded")
return Response{
Data: resp.Text(),
Code: 200,
}, nil
})
}
// defineSimpleQaPrompt 加载或定义指定名称的 Prompt
func defineSimpleQaPrompt(g *genkit.Genkit, promptName string) (*ai.Prompt, error) {
// 步骤 1:尝试查找现有的 Prompt
log.Info().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Msg("Attempting to lookup prompt")
prompt := genkit.LookupPrompt(g, promptName)
if prompt != nil {
log.Info().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Msg("Prompt found and loaded")
return prompt, nil
}
log.Info().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Msg("Prompt not found, defining new prompt")
// 步骤 2:如果未找到,定义新的 Prompt
simpleQaPrompt, err := genkit.DefinePrompt(g, promptName,
// ai.WithModelName("deepseek/deepseek-chat"),
ai.WithModelName(promptName),
ai.WithPrompt(simpleQaPromptTemplate),
ai.WithInputType(simpleQaPromptInput{}),
ai.WithOutputFormat(ai.OutputFormatText),
)
if err != nil {
log.Error().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Err(err).
Msg("Failed to define prompt")
return nil, err
}
log.Info().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Msg("Prompt defined successfully")
return simpleQaPrompt, nil
}
......@@ -2,22 +2,15 @@ package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"net/http"
"os"
"strings"
"time"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/rs/zerolog"
"github.com/wade-liwei/agentchat/plugins/deepseek"
"github.com/wade-liwei/agentchat/plugins/graphrag"
"github.com/wade-liwei/agentchat/plugins/knowledge" // Import knowledge package
"github.com/wade-liwei/agentchat/plugins/graphrag" // Import knowledge package
"github.com/wade-liwei/agentchat/plugins/milvus"
"github.com/wade-liwei/agentchat/plugins/question"
"github.com/firebase/genkit/go/plugins/evaluators"
"github.com/firebase/genkit/go/plugins/googlegenai"
......@@ -27,7 +20,6 @@ import (
_ "github.com/wade-liwei/agentchat/docs" // 导入生成的 Swagger 文档
"github.com/rs/zerolog/log"
"github.com/wade-liwei/agentchat/util"
)
type ChatInput struct {
......@@ -145,8 +137,6 @@ func main() {
log.Fatal().Msg(err.Error())
}
embedder := googlegenai.GoogleAIEmbedder(g, "embedding-001")
if embedder == nil {
log.Fatal().Msg(err.Error())
......@@ -166,253 +156,16 @@ func main() {
log.Fatal().Msgf("DefineIndexerAndRetriever failed: %v", err)
}
// 定义文档索引流
genkit.DefineFlow(g, "index/document", func(ctx context.Context, input *DocumentInput) (Response, error) {
if input.Metadata == nil {
input.Metadata = make(map[string]any)
}
input.Metadata[util.UserIdKey] = input.UserID
input.Metadata[util.UserNameKey] = input.Username
doc := ai.DocumentFromText(input.Content, input.Metadata)
err := indexer.Index(ctx, &ai.IndexerRequest{
Documents: []*ai.Document{doc},
})
if err != nil {
return Response{
Code: 500,
Msg: err.Error(),
}, nil
}
return Response{
Code: 200,
Msg: "Document indexed successfully",
}, nil
})
graphIndexer, graphRetriever, err := graphrag.DefineIndexerAndRetriever(ctx, g)
if err != nil {
log.Fatal().Msgf("graphrag.DefineIndexerAndRetriever failed: %v", err)
}
genkit.DefineFlow(g, "index/graph", func(ctx context.Context, input *GraphInput) (Response, error) {
opt := graphrag.IndexReqOption{
UserId: input.UserID,
UserName: input.Username,
}
resDocName := ""
if v, ok := input.Metadata[graphrag.DocNameKey]; !ok {
// Generate random docName.
docName, err := graphrag.GenerateRandomDocName(8)
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("generate random docName for document %w", err),
}, nil
}
input.Metadata[graphrag.DocNameKey] = docName
resDocName = docName
} else {
if str, isString := v.(string); isString {
resDocName = str
}
}
doc := ai.DocumentFromText(input.Content, input.Metadata)
err := graphIndexer.Index(ctx, &ai.IndexerRequest{
Documents: []*ai.Document{doc},
Options: &opt,
})
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("index document: %w", err),
}, nil
}
return Response{
Code: 200,
Msg: fmt.Sprintf("Document indexed successfully, docname %s", resDocName),
}, nil
})
qa, err := question.InitQAStore(*pgConnString)
if err != nil {
log.Fatal().Msgf("InitQAStore failed: %v", err)
}
// Initialize KnowledgeClient with test parameters
kc := knowledge.NewKnowledgeClient(knowledge.ClientConfig{
Endpoint: "lkeap.tencentcloudapi.com",
Region: "ap-guangzhou",
})
if err := kc.Init(ctx); err != nil {
log.Fatal().Msgf("Failed to initialize KnowledgeClient: %v", err)
}
log.Info().Msg("KnowledgeClient initialized successfully")
// Define a simple flow that generates jokes about a given topic
genkit.DefineFlow(g, "chat", func(ctx context.Context, input *ChatInput) (Response, error) {
ctxAsJson, _ := json.Marshal(ctx)
log.Info().Msgf("input----ctxAsJson----%s", string(ctxAsJson))
inputAsJson, err := json.Marshal(input)
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("json.Marshal: %w", err),
}, nil
}
log.Info().Msgf("input--------%s", string(inputAsJson))
idx, lastQa, lastok, err := qa.WriteAndGetLatestQA(context.Background(), question.QA{
FromID: &input.FromID,
From: &input.From,
Question: &input.Content,
To: &input.To,
ToID: &input.ToID,
Milvus: &input.Milvus,
Graph: &input.Graph,
})
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("WriteAndGetLatestQA: %w", err),
}, nil
}
qaAsJson, err := json.Marshal(lastQa)
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("json.Marshal(lastQa): %w", err),
}, nil
}
log.Info().Msgf("qaAsJson--------%s", string(qaAsJson))
promptInput := &simpleQaPromptInput{
Query: input.Content,
}
if lastok && lastQa.Summary != nil {
promptInput.Summary = *lastQa.Summary
}
metaData := make(map[string]any)
metaData[util.UserIdKey] = input.ToID
metaData[util.UserNameKey] = input.To
dRequest := ai.DocumentFromText(input.Content, metaData)
response, err := ai.Retrieve(ctx, retriever, ai.WithDocs(dRequest))
if err != nil {
log.Error().Msgf("milvus Retrieve err.Error() %s", err.Error())
} else {
var sb strings.Builder
for _, d := range response.Documents {
sb.WriteString(d.Content[0].Text)
sb.WriteByte('\n')
}
promptInput.Context = sb.String()
log.Info().Msgf("promptInput.Context: %s", promptInput.Context)
}
begin := time.Now()
graphResponse, err := ai.Retrieve(ctx, graphRetriever, ai.WithDocs(dRequest))
if err != nil {
log.Error().Msgf("graph Retrieve err.Error() %s", err.Error())
} else {
var sb strings.Builder
for _, d := range graphResponse.Documents {
sb.WriteString(d.Content[0].Text)
sb.WriteByte('\n')
}
promptInput.Graph = sb.String()
log.Info().Msgf("promptInput.Graph : %s", promptInput.Graph)
}
fmt.Println("graph time", time.Since(begin).Seconds())
simpleQaPrompt,err := defineSimpleQaPrompt(g,input.Model)
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("index document: %w", err),
}, nil
}
resp, err := simpleQaPrompt.Execute(ctx, ai.WithInput(promptInput))
if err != nil {
return Response{
Code: 500,
Msg: fmt.Sprintf("index document: %w", err),
}, nil
}
if lastok {
if promptInput.Summary == "" {
promptInput.Summary = resp.Text()
}
log.Info().
Str("from", input.From).
Str("from_id", input.FromID).
Str("to", input.To).
Str("to_id", input.ToID).
Str("promptInput.Query", promptInput.Query).
Str("resp.Text()", resp.Text()).
Str("promptInput.Summary", promptInput.Summary).Msg("QueryRewriteWithSummary")
res, err := kc.QueryRewriteWithSummary(context.Background(), promptInput.Query, resp.Text(), promptInput.Summary)
if err != nil {
log.Error().Msg(err.Error())
} else {
qa.UpdateQAFields(context.Background(), idx, res.RewrittenQuery, resp.Text())
/*
{"RewrittenQuery":"Conversation summary: The available knowledge base does not contain information about the capital of the UK.","RawResponse":{"Response":{"Content":"Conversation summary: The available knowledge base does not contain information about the capital of the UK.","Usage":{"InputTokens":74,"OutputTokens":19,"TotalTokens":93},"RequestId":"15f1ce0c-a83f-4d95-af22-33a3bd829e8d"}}}
*/
}
} else {
qa.UpdateQAFields(context.Background(), idx, "", resp.Text())
}
log.Info().
Str("from", input.From).
Str("from_id", input.FromID).
Str("to", input.To).
Str("to_id", input.ToID).
Str("question", promptInput.Query).
Str("context", promptInput.Context).
Str("graph", promptInput.Graph).
Str("last summary", promptInput.Summary).
Str("answer", resp.Text()).
Msg("Question and answer pair recorded")
return Response{
Data: resp.Text(),
Code: 200,
}, nil
})
DefineDocumentFlow(g, indexer)
DefineGraphFlow(g, graphIndexer)
DefineModelsFlow(g)
DefineChatFlow(g, retriever, graphRetriever, *pgConnString)
// 配置限速器:每秒 10 次请求,突发容量 20,最大并发 5
rl := NewRateLimiter(10, 20, 5)
......@@ -445,49 +198,3 @@ type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
}
// defineSimpleQaPrompt 加载或定义指定名称的 Prompt
func defineSimpleQaPrompt(g *genkit.Genkit, promptName string) (*ai.Prompt, error) {
// 步骤 1:尝试查找现有的 Prompt
log.Info().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Msg("Attempting to lookup prompt")
prompt := genkit.LookupPrompt(g, promptName)
if prompt != nil {
log.Info().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Msg("Prompt found and loaded")
return prompt, nil
}
log.Info().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Msg("Prompt not found, defining new prompt")
// 步骤 2:如果未找到,定义新的 Prompt
simpleQaPrompt, err := genkit.DefinePrompt(g, promptName,
// ai.WithModelName("deepseek/deepseek-chat"),
ai.WithModelName(promptName),
ai.WithPrompt(simpleQaPromptTemplate),
ai.WithInputType(simpleQaPromptInput{}),
ai.WithOutputFormat(ai.OutputFormatText),
)
if err != nil {
log.Error().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Err(err).
Msg("Failed to define prompt")
return nil, err
}
log.Info().
Str("method", "defineSimpleQaPrompt").
Str("prompt_name", promptName).
Msg("Prompt defined successfully")
return simpleQaPrompt, nil
}
......@@ -14,6 +14,7 @@ import (
)
const provider = "deepseek"
const Provider = "deepseek"
// 常量定义支持的模型
const (
......@@ -23,7 +24,6 @@ const (
DeepSeekChat = deepseek.DeepSeekChat
DeepSeekCoder = deepseek.DeepSeekCoder
DeepSeekReasoner = deepseek.DeepSeekReasoner
)
var (
......@@ -70,6 +70,10 @@ var modelInfoMap = map[string]ai.ModelInfo{
},
}
func ListModels() map[string]ai.ModelInfo {
return modelInfoMap
}
// DeepSeek holds configuration for the plugin.
type DeepSeek struct {
APIKey string // DeepSeek API key
......@@ -274,44 +278,6 @@ func concatMessageParts(parts []*ai.Part) string {
return result
}
// package deepseek
// import (
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment