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":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":7027,"method":"DeepSeek.Init","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:94","message":"Initializing DeepSeek plugin"} {"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":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":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":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":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":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":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":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":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":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":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":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":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":7027,"method":"DeepSeek.Init","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:119","message":"Initialization successful"} {"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":7027,"method":"Milvus.Init","time":1749267392,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"} {"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":7027,"method":"Milvus.Init","time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"} {"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":7027,"method":"GraphKnowledge.Init","time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"} {"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":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":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":7027,"method":"GraphKnowledge.Init","time":1749267393,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"} {"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":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":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":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":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":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":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":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":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":7027,"method":"DefineIndexerAndRetriever","time":1749267394,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:357","message":"Defining indexer and retriever"} {"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":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":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":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":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":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":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":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":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":7027,"method":"KnowledgeClient.Init","time":1749267395,"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: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":16602,"method":"KnowledgeClient.Init","time":1749295285,"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":16602,"time":1749295285,"caller":"/Users/wade/project/wuban/agentchat/flow.go:200","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":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":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":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":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":16732,"method":"DeepSeek.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:98","message":"Initializing DeepSeek plugin"}
{"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":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":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":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":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":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":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":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":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":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":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":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":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":16732,"method":"DeepSeek.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/deepseek/deepseek.go:123","message":"Initialization successful"}
{"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":16732,"method":"Milvus.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:75","message":"Initializing Milvus plugin"}
{"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":16732,"method":"Milvus.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/milvus/milvus.go:87","message":"Initialization successful"}
{"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":16732,"method":"GraphKnowledge.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:299","message":"Initializing GraphKnowledge plugin"}
{"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":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":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":16732,"method":"GraphKnowledge.Init","time":1749295322,"caller":"/Users/wade/project/wuban/agentchat/plugins/graphrag/graph.go:311","message":"Initialization successful"}
{"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":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: ...@@ -149,6 +149,33 @@ paths:
data: '{"id": 1}' data: '{"id": 1}'
code: 200 code: 200
msg: "GraphRAG index data stored successfully" 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: /chat:
post: post:
summary: Send a chat message summary: Send a chat message
...@@ -228,8 +255,29 @@ components: ...@@ -228,8 +255,29 @@ components:
msg: msg:
type: string type: string
description: A message describing the result description: A message describing the result
example: "Milvus index data stored successfully" example: "Models listed successfully"
required: required:
- data - data
- code - code
- msg - 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 ...@@ -2,22 +2,15 @@ package main
import ( import (
"context" "context"
"encoding/json"
"flag" "flag"
"fmt"
"net/http" "net/http"
"os" "os"
"strings"
"time"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit" "github.com/firebase/genkit/go/genkit"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"github.com/wade-liwei/agentchat/plugins/deepseek" "github.com/wade-liwei/agentchat/plugins/deepseek"
"github.com/wade-liwei/agentchat/plugins/graphrag" "github.com/wade-liwei/agentchat/plugins/graphrag" // Import knowledge package
"github.com/wade-liwei/agentchat/plugins/knowledge" // Import knowledge package
"github.com/wade-liwei/agentchat/plugins/milvus" "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/evaluators"
"github.com/firebase/genkit/go/plugins/googlegenai" "github.com/firebase/genkit/go/plugins/googlegenai"
...@@ -27,7 +20,6 @@ import ( ...@@ -27,7 +20,6 @@ import (
_ "github.com/wade-liwei/agentchat/docs" // 导入生成的 Swagger 文档 _ "github.com/wade-liwei/agentchat/docs" // 导入生成的 Swagger 文档
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"github.com/wade-liwei/agentchat/util"
) )
type ChatInput struct { type ChatInput struct {
...@@ -145,8 +137,6 @@ func main() { ...@@ -145,8 +137,6 @@ func main() {
log.Fatal().Msg(err.Error()) log.Fatal().Msg(err.Error())
} }
embedder := googlegenai.GoogleAIEmbedder(g, "embedding-001") embedder := googlegenai.GoogleAIEmbedder(g, "embedding-001")
if embedder == nil { if embedder == nil {
log.Fatal().Msg(err.Error()) log.Fatal().Msg(err.Error())
...@@ -166,253 +156,16 @@ func main() { ...@@ -166,253 +156,16 @@ func main() {
log.Fatal().Msgf("DefineIndexerAndRetriever failed: %v", err) 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) graphIndexer, graphRetriever, err := graphrag.DefineIndexerAndRetriever(ctx, g)
if err != nil { if err != nil {
log.Fatal().Msgf("graphrag.DefineIndexerAndRetriever failed: %v", err) log.Fatal().Msgf("graphrag.DefineIndexerAndRetriever failed: %v", err)
} }
genkit.DefineFlow(g, "index/graph", func(ctx context.Context, input *GraphInput) (Response, error) { DefineDocumentFlow(g, indexer)
DefineGraphFlow(g, graphIndexer)
opt := graphrag.IndexReqOption{ DefineModelsFlow(g)
UserId: input.UserID, DefineChatFlow(g, retriever, graphRetriever, *pgConnString)
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
})
// 配置限速器:每秒 10 次请求,突发容量 20,最大并发 5 // 配置限速器:每秒 10 次请求,突发容量 20,最大并发 5
rl := NewRateLimiter(10, 20, 5) rl := NewRateLimiter(10, 20, 5)
...@@ -445,49 +198,3 @@ type Response struct { ...@@ -445,49 +198,3 @@ type Response struct {
Code int `json:"code"` Code int `json:"code"`
Msg string `json:"msg"` 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 ( ...@@ -14,6 +14,7 @@ import (
) )
const provider = "deepseek" const provider = "deepseek"
const Provider = "deepseek"
// 常量定义支持的模型 // 常量定义支持的模型
const ( const (
...@@ -23,7 +24,6 @@ const ( ...@@ -23,7 +24,6 @@ const (
DeepSeekChat = deepseek.DeepSeekChat DeepSeekChat = deepseek.DeepSeekChat
DeepSeekCoder = deepseek.DeepSeekCoder DeepSeekCoder = deepseek.DeepSeekCoder
DeepSeekReasoner = deepseek.DeepSeekReasoner DeepSeekReasoner = deepseek.DeepSeekReasoner
) )
var ( var (
...@@ -70,6 +70,10 @@ var modelInfoMap = map[string]ai.ModelInfo{ ...@@ -70,6 +70,10 @@ var modelInfoMap = map[string]ai.ModelInfo{
}, },
} }
func ListModels() map[string]ai.ModelInfo {
return modelInfoMap
}
// DeepSeek holds configuration for the plugin. // DeepSeek holds configuration for the plugin.
type DeepSeek struct { type DeepSeek struct {
APIKey string // DeepSeek API key APIKey string // DeepSeek API key
...@@ -274,44 +278,6 @@ func concatMessageParts(parts []*ai.Part) string { ...@@ -274,44 +278,6 @@ func concatMessageParts(parts []*ai.Part) string {
return result return result
} }
// package deepseek // package deepseek
// import ( // 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