diff --git a/src/.vs/HmChatGPT/DesignTimeBuild/.dtbcache.v2 b/src/.vs/HmChatGPT/DesignTimeBuild/.dtbcache.v2
index c165ad9..62db55f 100644
Binary files a/src/.vs/HmChatGPT/DesignTimeBuild/.dtbcache.v2 and b/src/.vs/HmChatGPT/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/src/.vs/HmChatGPT/FileContentIndex/09f87310-48f1-4f1b-b9e7-5f3afa52f6e7.vsidx b/src/.vs/HmChatGPT/FileContentIndex/09f87310-48f1-4f1b-b9e7-5f3afa52f6e7.vsidx
new file mode 100644
index 0000000..7a7ab1e
Binary files /dev/null and b/src/.vs/HmChatGPT/FileContentIndex/09f87310-48f1-4f1b-b9e7-5f3afa52f6e7.vsidx differ
diff --git a/src/.vs/HmChatGPT/FileContentIndex/2c261779-9b9d-4bf6-a349-ddbcf464538c.vsidx b/src/.vs/HmChatGPT/FileContentIndex/2c261779-9b9d-4bf6-a349-ddbcf464538c.vsidx
deleted file mode 100644
index 07f1768..0000000
Binary files a/src/.vs/HmChatGPT/FileContentIndex/2c261779-9b9d-4bf6-a349-ddbcf464538c.vsidx and /dev/null differ
diff --git a/src/.vs/HmChatGPT/FileContentIndex/2d00f1ab-a795-426e-a52f-f2d0dd971493.vsidx b/src/.vs/HmChatGPT/FileContentIndex/2d00f1ab-a795-426e-a52f-f2d0dd971493.vsidx
new file mode 100644
index 0000000..ee2ce8e
Binary files /dev/null and b/src/.vs/HmChatGPT/FileContentIndex/2d00f1ab-a795-426e-a52f-f2d0dd971493.vsidx differ
diff --git a/src/.vs/HmChatGPT/FileContentIndex/66e43c0a-9899-4fb8-8861-df72c8e21fb3.vsidx b/src/.vs/HmChatGPT/FileContentIndex/66e43c0a-9899-4fb8-8861-df72c8e21fb3.vsidx
deleted file mode 100644
index 3c26b25..0000000
Binary files a/src/.vs/HmChatGPT/FileContentIndex/66e43c0a-9899-4fb8-8861-df72c8e21fb3.vsidx and /dev/null differ
diff --git a/src/.vs/HmChatGPT/v17/.futdcache.v2 b/src/.vs/HmChatGPT/v17/.futdcache.v2
index 117df86..c2f4229 100644
Binary files a/src/.vs/HmChatGPT/v17/.futdcache.v2 and b/src/.vs/HmChatGPT/v17/.futdcache.v2 differ
diff --git a/src/.vs/HmChatGPT/v17/.suo b/src/.vs/HmChatGPT/v17/.suo
index bc1c509..33eec97 100644
Binary files a/src/.vs/HmChatGPT/v17/.suo and b/src/.vs/HmChatGPT/v17/.suo differ
diff --git a/src/.vs/HmChatGPT/v17/DocumentLayout.json b/src/.vs/HmChatGPT/v17/DocumentLayout.json
index c5796d3..ec8ddfd 100644
--- a/src/.vs/HmChatGPT/v17/DocumentLayout.json
+++ b/src/.vs/HmChatGPT/v17/DocumentLayout.json
@@ -2,49 +2,37 @@
"Version": 1,
"WorkspaceRootPath": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\",
"Documents": [
- {
- "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\hmchatgpt.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|",
- "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\hmchatgpt.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
- },
- {
- "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\hmchatgpt.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
- "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\hmchatgpt.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
- },
- {
- "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\openaichat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\openaichat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
- },
{
"AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\messagelistautoremover.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\messagelistautoremover.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
- {
- "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\winform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\winform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
- },
- {
- "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\winformcominterface.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\winformcominterface.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
- },
{
"AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\hmoutputwriter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\hmoutputwriter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
- "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\winform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
- "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\winform.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
+ "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\ioutputwriter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\ioutputwriter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\openaichat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\openaichat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\iinputreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\iinputreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
- "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\hminputreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\hminputreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\hmchatgpt.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|",
+ "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\hmchatgpt.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
},
{
- "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\ioutputwriter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\ioutputwriter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\hmchatgpt.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
+ "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\hmchatgpt.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|g:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\hmchatgpt\\hminputreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{55774E11-538A-4560-8B0C-BAA17E75C622}|HmChatGPT\\HmChatGPT.csproj|solutionrelative:hmchatgpt\\hminputreader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@@ -54,7 +42,7 @@
"DocumentGroups": [
{
"DockedWidth": 200,
- "SelectedChildIndex": 5,
+ "SelectedChildIndex": 2,
"Children": [
{
"$type": "Bookmark",
@@ -62,56 +50,46 @@
},
{
"$type": "Document",
- "DocumentIndex": 8,
+ "DocumentIndex": 4,
"Title": "IInputReader.cs",
"DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\IInputReader.cs",
"RelativeDocumentMoniker": "HmChatGPT\\IInputReader.cs",
"ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\IInputReader.cs",
"RelativeToolTip": "HmChatGPT\\IInputReader.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAAAswAAAAAAAAAAA",
+ "ViewState": "AQIAAAAAAAAAAAAAAAAqwAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2024-05-30T06:03:49.67Z"
+ "WhenOpened": "2024-05-30T06:03:49.67Z",
+ "EditorCaption": ""
},
{
"$type": "Document",
- "DocumentIndex": 3,
+ "DocumentIndex": 0,
"Title": "MessageListAutoRemover.cs",
"DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\MessageListAutoRemover.cs",
"RelativeDocumentMoniker": "HmChatGPT\\MessageListAutoRemover.cs",
"ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\MessageListAutoRemover.cs",
"RelativeToolTip": "HmChatGPT\\MessageListAutoRemover.cs",
- "ViewState": "AQIAACUAAAAAAAAAAAAMwCYAAAAAAAAA",
+ "ViewState": "AQIAAAsAAAAAAAAAAAArwBYAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-30T05:01:30.884Z",
"EditorCaption": ""
},
{
"$type": "Document",
- "DocumentIndex": 1,
+ "DocumentIndex": 6,
"Title": "HmChatGPT.csproj",
"DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmChatGPT.csproj",
"RelativeDocumentMoniker": "HmChatGPT\\HmChatGPT.csproj",
"ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmChatGPT.csproj",
"RelativeToolTip": "HmChatGPT\\HmChatGPT.csproj",
- "ViewState": "AQIAAAAAAAAAAAAAAADwvw4AAAAUAAAA",
+ "ViewState": "AQIAAAAAAAAAAAAAAADwv0QAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
"WhenOpened": "2024-05-30T00:41:23.945Z",
"EditorCaption": ""
},
{
"$type": "Document",
- "DocumentIndex": 7,
- "Title": "WinForm.cs [Design]",
- "DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\WinForm.cs",
- "RelativeDocumentMoniker": "HmChatGPT\\WinForm.cs",
- "ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\WinForm.cs [Design]",
- "RelativeToolTip": "HmChatGPT\\WinForm.cs [Design]",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2024-05-30T00:10:57.549Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 0,
+ "DocumentIndex": 5,
"Title": "HmChatGPT",
"DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmChatGPT.csproj",
"RelativeDocumentMoniker": "HmChatGPT\\HmChatGPT.csproj",
@@ -123,7 +101,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 9,
+ "DocumentIndex": 7,
"Title": "HmInputReader.cs",
"DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmInputReader.cs",
"RelativeDocumentMoniker": "HmChatGPT\\HmInputReader.cs",
@@ -131,68 +109,47 @@
"RelativeToolTip": "HmChatGPT\\HmInputReader.cs",
"ViewState": "AQIAAAAAAAAAAAAAAADwvwAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2024-05-29T23:59:58.43Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 4,
- "Title": "WinForm.cs",
- "DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\WinForm.cs",
- "RelativeDocumentMoniker": "HmChatGPT\\WinForm.cs",
- "ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\WinForm.cs",
- "RelativeToolTip": "HmChatGPT\\WinForm.cs",
- "ViewState": "AQIAAFkAAAAAAAAAAAAQwBAAAACSAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2024-05-29T23:59:45.473Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 5,
- "Title": "WinFormCOMInterface.cs",
- "DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\WinFormCOMInterface.cs",
- "RelativeDocumentMoniker": "HmChatGPT\\WinFormCOMInterface.cs",
- "ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\WinFormCOMInterface.cs",
- "RelativeToolTip": "HmChatGPT\\WinFormCOMInterface.cs",
- "ViewState": "AQIAAAYAAAAAAAAAAAAhwB4AAAAhAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2024-05-29T23:59:41.418Z"
+ "WhenOpened": "2024-05-29T23:59:58.43Z",
+ "EditorCaption": ""
},
{
"$type": "Document",
- "DocumentIndex": 2,
+ "DocumentIndex": 3,
"Title": "OpenAIChat.cs",
"DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\OpenAIChat.cs",
"RelativeDocumentMoniker": "HmChatGPT\\OpenAIChat.cs",
"ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\OpenAIChat.cs",
"RelativeToolTip": "HmChatGPT\\OpenAIChat.cs",
- "ViewState": "AQIAABUAAAAAAAAAAAApwCMAAAAdAAAA",
+ "ViewState": "AQIAAAAAAAAAAAAAAAAAAHgAAAAgAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-29T23:59:38.187Z",
"EditorCaption": ""
},
{
"$type": "Document",
- "DocumentIndex": 10,
+ "DocumentIndex": 2,
"Title": "IOutputWriter.cs",
"DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\IOutputWriter.cs",
"RelativeDocumentMoniker": "HmChatGPT\\IOutputWriter.cs",
"ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\IOutputWriter.cs",
"RelativeToolTip": "HmChatGPT\\IOutputWriter.cs",
- "ViewState": "AQIAAAEAAAAAAAAAAAAqwAAAAAAAAAAA",
+ "ViewState": "AQIAAAAAAAAAAAAAAAAqwAAAAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2024-05-29T23:59:36.323Z"
+ "WhenOpened": "2024-05-29T23:59:36.323Z",
+ "EditorCaption": ""
},
{
"$type": "Document",
- "DocumentIndex": 6,
+ "DocumentIndex": 1,
"Title": "HmOutputWriter.cs",
"DocumentMoniker": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmOutputWriter.cs",
"RelativeDocumentMoniker": "HmChatGPT\\HmOutputWriter.cs",
"ToolTip": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmOutputWriter.cs",
"RelativeToolTip": "HmChatGPT\\HmOutputWriter.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAADwvwoAAAAmAAAA",
+ "ViewState": "AQIAAAAAAAAAAAAAAADwvwIAAAAaAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2024-05-29T23:59:12.6Z"
+ "WhenOpened": "2024-05-29T23:59:12.6Z",
+ "EditorCaption": ""
}
]
}
diff --git a/src/.vs/ProjectEvaluation/hmchatgpt.metadata.v8.bin b/src/.vs/ProjectEvaluation/hmchatgpt.metadata.v8.bin
index 435c819..6ac7b88 100644
Binary files a/src/.vs/ProjectEvaluation/hmchatgpt.metadata.v8.bin and b/src/.vs/ProjectEvaluation/hmchatgpt.metadata.v8.bin differ
diff --git a/src/.vs/ProjectEvaluation/hmchatgpt.projects.v8.bin b/src/.vs/ProjectEvaluation/hmchatgpt.projects.v8.bin
index 81120bb..aa18c03 100644
Binary files a/src/.vs/ProjectEvaluation/hmchatgpt.projects.v8.bin and b/src/.vs/ProjectEvaluation/hmchatgpt.projects.v8.bin differ
diff --git a/src/.vs/ProjectEvaluation/hmchatgpt.strings.v8.bin b/src/.vs/ProjectEvaluation/hmchatgpt.strings.v8.bin
index 690027c..03957df 100644
Binary files a/src/.vs/ProjectEvaluation/hmchatgpt.strings.v8.bin and b/src/.vs/ProjectEvaluation/hmchatgpt.strings.v8.bin differ
diff --git a/src/HmChatGPT/HmChatGPT.csproj b/src/HmChatGPT/HmChatGPT.csproj
index 5a48073..2b3c3df 100644
--- a/src/HmChatGPT/HmChatGPT.csproj
+++ b/src/HmChatGPT/HmChatGPT.csproj
@@ -10,9 +10,9 @@
bin\$(PlatformTarget)
Akitsugu Komiyama
$(Authors)
- 1.0.7.9
- 1.0.7.9
- 1.0.7.9
+ 1.0.8.2
+ 1.0.8.2
+ 1.0.8.2
diff --git a/src/HmChatGPT/HmOutputWriter.cs b/src/HmChatGPT/HmOutputWriter.cs
index e2baecd..4ab459c 100644
--- a/src/HmChatGPT/HmOutputWriter.cs
+++ b/src/HmChatGPT/HmOutputWriter.cs
@@ -1,37 +1,36 @@
using HmNetCOM;
-namespace HmOpenAIChatGpt
+namespace HmOpenAIChatGpt;
+
+internal class HmOutputWriter : IOutputWriter
{
- internal class HmOutputWriter : IOutputWriter
- {
- public const string NewLine = "\r\n";
+ public const string NewLine = "\r\n";
- public HmOutputWriter() { }
+ public HmOutputWriter() { }
- public string Normalize(string? msg)
+ public string Normalize(string? msg)
+ {
+ if (msg == null)
{
- if (msg == null)
- {
- return "";
- }
-
- var norm = msg.Replace("\n", NewLine);
- norm = norm.Replace("\r\r", "\r");
- return norm;
+ return "";
}
- public int Write(string msg)
- {
- var norm = Normalize(msg);
- int status = Hm.OutputPane.Output(norm);
- return status;
- }
+ var norm = msg.Replace("\n", NewLine);
+ norm = norm.Replace("\r\r", "\r");
+ return norm;
+ }
- public int WriteLine(string msg)
- {
- var norm = Normalize(msg);
- int status = Hm.OutputPane.Output(norm + NewLine);
- return status;
- }
+ public int Write(string msg)
+ {
+ var norm = Normalize(msg);
+ int status = Hm.OutputPane.Output(norm);
+ return status;
+ }
+
+ public int WriteLine(string msg)
+ {
+ var norm = Normalize(msg);
+ int status = Hm.OutputPane.Output(norm + NewLine);
+ return status;
}
}
diff --git a/src/HmChatGPT/MessageListAutoRemover.cs b/src/HmChatGPT/MessageListAutoRemover.cs
index 4652613..c9e6518 100644
--- a/src/HmChatGPT/MessageListAutoRemover.cs
+++ b/src/HmChatGPT/MessageListAutoRemover.cs
@@ -7,97 +7,112 @@
using System.Threading.Tasks;
using HmNetCOM;
-namespace HmOpenAIChatGpt
+namespace HmOpenAIChatGpt;
+
+partial class OpenAIChatMain
{
- partial class OpenAIChatMain
- {
- static private readonly object lockObject = new object();
+ static private readonly object lockObject = new object();
+
+ // 最後の回答があってから5分以上経過したらメッセージリストの一番最初のリストを削除する
+ static private DateTime lastAnswerTime = DateTime.Now;
+ static private DateTime lastDeleteTime = DateTime.MinValue;
- // 最後の回答があってから5分以上経過したらメッセージリストの一番最初のリストを削除する
- static private DateTime lastAnswerTime = DateTime.Now;
- static private DateTime lastDeleteTime = DateTime.MinValue;
+ static CancellationTokenSource? autoRemoverCancelTokenSource;
- static CancellationTokenSource? autoRemoverCancelTokenSource;
+ static Task taskRunMessageListRemove;
+
+ public static void InitMessageListCancelToken()
+ {
+ // Hm.OutputPane.Output("InitMessageListCancelToken\r\n");
+ lastAnswerTime = DateTime.Now;
+ lastDeleteTime = DateTime.Now;
- public static void InitMessageListCancelToken()
+ if (taskRunMessageListRemove == null || taskRunMessageListRemove.IsCompleted)
{
- lastAnswerTime = DateTime.Now;
- lastDeleteTime = DateTime.Now;
+ /*
+ if (taskRunMessageListRemove != null && taskRunMessageListRemove.IsCompleted)
+ {
+ Hm.OutputPane.Output("タスクはコンプリート\r\n");
+ }
+ */
autoRemoverCancelTokenSource = new CancellationTokenSource();
- Task.Run(async () =>
+ taskRunMessageListRemove = Task.Run(async () =>
{
await RunMessageListRemoveTask();
});
}
+ }
- public static void CancelMessageListCancelToken()
- {
- autoRemoverCancelTokenSource?.Cancel();
- }
+ public static void CancelMessageListCancelToken()
+ {
+ autoRemoverCancelTokenSource?.Cancel();
+ }
- public static async Task RunMessageListRemoveTask()
+ public static async Task RunMessageListRemoveTask()
+ {
+ while (true)
{
- while (true)
+ // Hm.OutputPane.Output("RunMessageListRemoveTask\r\n");
+ if (autoRemoverCancelTokenSource != null && autoRemoverCancelTokenSource.IsCancellationRequested)
{
- if (autoRemoverCancelTokenSource != null && autoRemoverCancelTokenSource.IsCancellationRequested)
- {
- return;
- }
-
- var lastCondition = (DateTime.Now - lastAnswerTime).TotalMinutes >= 5;
- var tickConsition = (DateTime.Now - lastDeleteTime).TotalMinutes >= 1;
-
- // 5分以上経過していて、1分チックも達成している。
- if (lastCondition && tickConsition)
- {
- RemoveEarliestQandA();
- }
- // 最後の回答があってから5分間以上経過している
- else if (lastCondition)
- {
- RemoveEarliestQandA();
- }
-
- if (autoRemoverCancelTokenSource != null)
- {
- var token = autoRemoverCancelTokenSource.Token;
- await Task.Delay(TimeSpan.FromMinutes(1), token);
- }
+ return;
}
- }
- public void AddQuestion(string question)
- {
- lock (lockObject)
+ var lastCondition = (DateTime.Now - lastAnswerTime).TotalMinutes >= iRemoveAutoMessageListMinutes;
+ var tickConsition = (DateTime.Now - lastDeleteTime).TotalMinutes >= 1;
+
+ // 5分以上経過していて、1分チックも達成している。
+ if (lastCondition && tickConsition)
{
- messageList.Add(ChatMessage.FromUser(question));
+ RemoveEarliestQandA();
}
- }
- private static void AddAnswer(string answer_sum)
- {
- lock (lockObject)
+ // 最後の回答があってから5分間以上経過している
+ else if (lastCondition)
{
- // 今回の返答ををChatGPTの返答として記録しておく
- messageList.Add(ChatMessage.FromAssistant(answer_sum));
- lastAnswerTime = DateTime.Now;
+ RemoveEarliestQandA();
+ }
+
+ if (autoRemoverCancelTokenSource != null)
+ {
+ var token = autoRemoverCancelTokenSource.Token;
+ await Task.Delay(TimeSpan.FromMinutes(1), token);
}
}
+ }
- // メッセージリストの中から一番過去の2つを削除する。
- public static void RemoveEarliestQandA()
+ public void AddQuestion(string question)
+ {
+ lock (lockObject)
{
- lock (lockObject)
+ messageList.Add(ChatMessage.FromUser(question));
+ }
+ }
+ private static void AddAnswer(string answer_sum)
+ {
+ lock (lockObject)
+ {
+ // 今回の返答ををChatGPTの返答として記録しておく
+ messageList.Add(ChatMessage.FromAssistant(answer_sum));
+ lastAnswerTime = DateTime.Now;
+ }
+ }
+
+ // メッセージリストの中から一番過去の2つを削除する。
+ public static void RemoveEarliestQandA()
+ {
+ lock (lockObject)
+ {
+ // 先頭の一つはシステムメッセージなので、index[1]とindex[2]を削除する。
+ if (messageList.Count >= 3)
{
- // 先頭の一つはシステムメッセージなので、index[1]とindex[2]を削除する。
- if (messageList.Count >= 3)
- {
- messageList.RemoveRange(1, 2);
- }
- lastDeleteTime = DateTime.Now;
+ messageList.RemoveRange(1, 2);
}
- }
+ lastDeleteTime = DateTime.Now;
+ // Hm.OutputPane.Output("RemoveEarliestQandA\r\n");
+ }
}
+
}
diff --git a/src/HmChatGPT/OpenAIChat.cs b/src/HmChatGPT/OpenAIChat.cs
index 5c62605..68fa447 100644
--- a/src/HmChatGPT/OpenAIChat.cs
+++ b/src/HmChatGPT/OpenAIChat.cs
@@ -4,218 +4,217 @@
using OpenAI.ObjectModels.RequestModels;
using OpenAI.ObjectModels.ResponseModels;
-namespace HmOpenAIChatGpt
-{
- // OPENAI_API_KEYが設定されてないよってなエラー
- class OpenAIKeyNotFoundException : KeyNotFoundException
- {
- public OpenAIKeyNotFoundException(string msg) : base(msg) { }
- }
+namespace HmOpenAIChatGpt;
- // OpenAIのサービスに接続できないよ系
- class OpenAIServiceNotFoundException : Exception
- {
- public OpenAIServiceNotFoundException(string msg) : base(msg) { }
- }
+// OPENAI_API_KEYが設定されてないよってなエラー
+class OpenAIKeyNotFoundException : KeyNotFoundException
+{
+ public OpenAIKeyNotFoundException(string msg) : base(msg) { }
+}
- partial class OpenAIChatMain
- {
- // 出力対象のDI用
- IOutputWriter output;
+// OpenAIのサービスに接続できないよ系
+class OpenAIServiceNotFoundException : Exception
+{
+ public OpenAIServiceNotFoundException(string msg) : base(msg) { }
+}
- const string NewLine = "\r\n";
+partial class OpenAIChatMain
+{
+ // 出力対象のDI用
+ IOutputWriter output;
- const string OpenAIKeyEnvironmentVariableName = "OPENAI_KEY";
- static string? OpenAIKeyOverWriteVariable = null; // 直接APIの値を上書き指定している場合(マクロなどからの直接の引き渡し)
- const string ErrorMessageNoOpenAIKey = OpenAIKeyEnvironmentVariableName + "キーが環境変数にありません。:" + NewLine;
+ const string NewLine = "\r\n";
- string model = "";
- int iMaxTokens;
- static int iRemoveAutoMessageList;
+ const string OpenAIKeyEnvironmentVariableName = "OPENAI_KEY";
+ static string? OpenAIKeyOverWriteVariable = null; // 直接APIの値を上書き指定している場合(マクロなどからの直接の引き渡し)
+ const string ErrorMessageNoOpenAIKey = OpenAIKeyEnvironmentVariableName + "キーが環境変数にありません。:" + NewLine;
- public OpenAIChatMain(string key, string model, int maxtokens, IOutputWriter output, int remove_auto_messagelist)
- {
- // 出力対象のDI用
- this.output = output;
+ string model = "";
+ int iMaxTokens;
+ static int iRemoveAutoMessageListMinutes;
- this.model = model;
- if (this.model == "")
- {
- this.model = Models.Gpt_3_5_Turbo;
- // output.WriteLine(this.model);
- }
- this.iMaxTokens = maxtokens;
- iRemoveAutoMessageList = remove_auto_messagelist;
+ public OpenAIChatMain(string key, string model, int maxtokens, IOutputWriter output, int remove_auto_messagelist)
+ {
+ // 出力対象のDI用
+ this.output = output;
- // とりあえず代入。エラーならChatGPTの方が言ってくれる。
- if (key.Length > 0)
- {
- OpenAIKeyOverWriteVariable = key;
- }
- GetOpenAIKey(); // かまし
+ this.model = model;
+ if (this.model == "")
+ {
+ this.model = Models.Gpt_3_5_Turbo;
+ // output.WriteLine(this.model);
+ }
+ this.iMaxTokens = maxtokens;
+ iRemoveAutoMessageListMinutes = remove_auto_messagelist;
- InitMessages();
+ // とりあえず代入。エラーならChatGPTの方が言ってくれる。
+ if (key.Length > 0)
+ {
+ OpenAIKeyOverWriteVariable = key;
}
+ GetOpenAIKey(); // かまし
+
+ InitMessages();
+ }
- // OpenAIのキーの取得
- static string? GetOpenAIKey()
+ // OpenAIのキーの取得
+ static string? GetOpenAIKey()
+ {
+ if (String.IsNullOrEmpty(OpenAIKeyOverWriteVariable))
{
- if (String.IsNullOrEmpty(OpenAIKeyOverWriteVariable))
+ string? key = Environment.GetEnvironmentVariable(OpenAIKeyEnvironmentVariableName);
+ if (String.IsNullOrEmpty(key))
{
- string? key = Environment.GetEnvironmentVariable(OpenAIKeyEnvironmentVariableName);
- if (String.IsNullOrEmpty(key))
- {
- throw new OpenAIKeyNotFoundException(ErrorMessageNoOpenAIKey);
- }
- return key;
- }
- else
- {
- return OpenAIKeyOverWriteVariable;
+ throw new OpenAIKeyNotFoundException(ErrorMessageNoOpenAIKey);
}
+ return key;
+ }
+ else
+ {
+ return OpenAIKeyOverWriteVariable;
}
+ }
- const string ErrorMessageNoOpenAIService = "OpenAIのサービスに接続できません。:" + NewLine;
- // OpenAIサービスのインスタンス。一応保持
- static OpenAIService? openAiService = null;
+ const string ErrorMessageNoOpenAIService = "OpenAIのサービスに接続できません。:" + NewLine;
+ // OpenAIサービスのインスタンス。一応保持
+ static OpenAIService? openAiService = null;
- // OpenAIへの接続
- static OpenAIService? ConnectOpenAIService(string key)
+ // OpenAIへの接続
+ static OpenAIService? ConnectOpenAIService(string key)
+ {
+ try
{
- try
+ var openAiService = new OpenAIService(new OpenAiOptions()
{
- var openAiService = new OpenAIService(new OpenAiOptions()
- {
- ApiKey = key
- });
+ ApiKey = key
+ });
- return openAiService;
- }
- catch (Exception)
- {
- openAiService = null;
- InitMessages();
- throw;
- }
+ return openAiService;
}
+ catch (Exception)
+ {
+ openAiService = null;
+ InitMessages();
+ throw;
+ }
+ }
- // OpenAIにわたす会話ログ。基本的にOpenAIは会話の文脈を覚えているので、メッセージログ的なものを渡す必要がある。
- static List messageList = new();
+ // OpenAIにわたす会話ログ。基本的にOpenAIは会話の文脈を覚えているので、メッセージログ的なものを渡す必要がある。
+ static List messageList = new();
- // 最初のシステムメッセージ。
- const string ChatGPTStartSystemMessage = "何かお手伝い出来ることはありますか?"; // You are a helpful assistant. 日本語いれておくことで日本ユーザーをデフォルトとして考える
+ // 最初のシステムメッセージ。
+ const string ChatGPTStartSystemMessage = "何かお手伝い出来ることはありますか?"; // You are a helpful assistant. 日本語いれておくことで日本ユーザーをデフォルトとして考える
- // 会話履歴のリセット。(AddAnswer中にリセットしないよう注意)
- public static void InitMessages()
+ // 会話履歴のリセット。(AddAnswer中にリセットしないよう注意)
+ public static void InitMessages()
+ {
+ List list = new List
{
- List list = new List
- {
- ChatMessage.FromSystem(ChatGPTStartSystemMessage)
- };
- messageList = list;
+ ChatMessage.FromSystem(ChatGPTStartSystemMessage)
+ };
+ messageList = list;
- // 会話履歴の自動削除モードなら
- if (iRemoveAutoMessageList > 0)
- {
- InitMessageListCancelToken();
- }
+ // 会話履歴の自動削除モードなら
+ if (iRemoveAutoMessageListMinutes > 0)
+ {
+ InitMessageListCancelToken();
}
+ }
- // チャットのエンジンやオプション。過去のチャット内容なども渡す。
- IAsyncEnumerable ReBuildPastChatContents(CancellationToken ct)
+ // チャットのエンジンやオプション。過去のチャット内容なども渡す。
+ IAsyncEnumerable ReBuildPastChatContents(CancellationToken ct)
+ {
+ var key = GetOpenAIKey();
+ if (key == null)
{
- var key = GetOpenAIKey();
- if (key == null)
- {
- throw new OpenAIKeyNotFoundException(ErrorMessageNoOpenAIKey);
- }
-
- List list = new();
- if (openAiService == null)
- {
- openAiService = ConnectOpenAIService(key);
- }
- if (openAiService == null)
- {
- throw new OpenAIServiceNotFoundException(ErrorMessageNoOpenAIService);
- }
-
- // オプション。1000~2000トークンぐらいでセーフティかけておくのがいいだろう。
- // 元々ChatGPTの方でも4000トークンぐらいでセーフティがかかってる模様
- var options = new ChatCompletionCreateRequest
- {
- Messages = messageList,
- Model = this.model,
- MaxTokens = iMaxTokens
- };
-
- // ストリームとして会話モードを確率する。ストリームにすると解答が1文字ずつ順次表示される。
- var completionResult = openAiService.ChatCompletion.CreateCompletionAsStream(options, null, false, ct);
- return completionResult;
+ throw new OpenAIKeyNotFoundException(ErrorMessageNoOpenAIKey);
}
-
- const string AssistanceAnswerCompleteMsg = NewLine + "-- 完了 --" + NewLine;
- const string ErrorMsgUnknown = "Unknown Error:" + NewLine;
- // チャットの反復
-
- const string AssistanceAnswerCancelMsg = NewLine + "-- ChatGPTの回答を途中キャンセルしました --" + NewLine;
- public string GetAssistanceAnswerCancelMsg()
+ List list = new();
+ if (openAiService == null)
{
- return AssistanceAnswerCancelMsg;
+ openAiService = ConnectOpenAIService(key);
+ }
+ if (openAiService == null)
+ {
+ throw new OpenAIServiceNotFoundException(ErrorMessageNoOpenAIService);
}
- public async Task AddAnswer(CancellationToken ct)
+ // オプション。1000~2000トークンぐらいでセーフティかけておくのがいいだろう。
+ // 元々ChatGPTの方でも4000トークンぐらいでセーフティがかかってる模様
+ var options = new ChatCompletionCreateRequest
{
- string answer_sum = "";
- var completionResult = ReBuildPastChatContents(ct);
+ Messages = messageList,
+ Model = this.model,
+ MaxTokens = iMaxTokens
+ };
+
+ // ストリームとして会話モードを確率する。ストリームにすると解答が1文字ずつ順次表示される。
+ var completionResult = openAiService.ChatCompletion.CreateCompletionAsStream(options, null, false, ct);
+ return completionResult;
+ }
- // ストリーム型で確立しているので、async的に扱っていく
- await foreach (var completion in completionResult)
+
+ const string AssistanceAnswerCompleteMsg = NewLine + "-- 完了 --" + NewLine;
+ const string ErrorMsgUnknown = "Unknown Error:" + NewLine;
+ // チャットの反復
+
+ const string AssistanceAnswerCancelMsg = NewLine + "-- ChatGPTの回答を途中キャンセルしました --" + NewLine;
+ public string GetAssistanceAnswerCancelMsg()
+ {
+ return AssistanceAnswerCancelMsg;
+ }
+
+ public async Task AddAnswer(CancellationToken ct)
+ {
+ string answer_sum = "";
+ var completionResult = ReBuildPastChatContents(ct);
+
+ // ストリーム型で確立しているので、async的に扱っていく
+ await foreach (var completion in completionResult)
+ {
+ // キャンセルが要求された時、
+ if (ct.IsCancellationRequested)
{
- // キャンセルが要求された時、
- if (ct.IsCancellationRequested)
- {
- // 一応Dispose呼んでおく(CancellationToken渡しているので不要なきもするが...)
- await completionResult.GetAsyncEnumerator().DisposeAsync();
- throw new OperationCanceledException(AssistanceAnswerCancelMsg);
- }
+ // 一応Dispose呼んでおく(CancellationToken渡しているので不要なきもするが...)
+ await completionResult.GetAsyncEnumerator().DisposeAsync();
+ throw new OperationCanceledException(AssistanceAnswerCancelMsg);
+ }
- // キャンセルされてたら OperationCanceledException を投げるメソッド
- ct.ThrowIfCancellationRequested();
+ // キャンセルされてたら OperationCanceledException を投げるメソッド
+ ct.ThrowIfCancellationRequested();
- // 会話成功なら
- if (completion.Successful)
+ // 会話成功なら
+ if (completion.Successful)
+ {
+ // ちろっと文字列追加表示
+ string? str = completion.Choices.FirstOrDefault()?.Message.Content;
+ if (str != null)
{
- // ちろっと文字列追加表示
- string? str = completion.Choices.FirstOrDefault()?.Message.Content;
- if (str != null)
- {
- output.Write(str);
- answer_sum += str ?? "";
- }
+ output.Write(str);
+ answer_sum += str ?? "";
}
- else
+ }
+ else
+ {
+ // 失敗なら何かエラーと原因を表示
+ if (completion.Error == null)
{
- // 失敗なら何かエラーと原因を表示
- if (completion.Error == null)
- {
- throw new Exception(ErrorMsgUnknown);
- }
-
- output.WriteLine($"{completion.Error.Code}: {completion.Error.Message}");
+ throw new Exception(ErrorMsgUnknown);
}
- }
-
- AddAnswer(answer_sum);
- // 解答が完了したよ~というのを人にわかるように表示
- output.WriteLine(AssistanceAnswerCompleteMsg);
+ output.WriteLine($"{completion.Error.Code}: {completion.Error.Message}");
+ }
}
- // もっとも古いQandAを削除
+ AddAnswer(answer_sum);
+
+ // 解答が完了したよ~というのを人にわかるように表示
+ output.WriteLine(AssistanceAnswerCompleteMsg);
}
+
+ // もっとも古いQandAを削除
}
diff --git a/src/HmChatGPT/WinForm.cs b/src/HmChatGPT/WinForm.cs
index 089c68d..52bcf91 100644
--- a/src/HmChatGPT/WinForm.cs
+++ b/src/HmChatGPT/WinForm.cs
@@ -1,425 +1,427 @@
using HmNetCOM;
-namespace HmOpenAIChatGpt
+namespace HmOpenAIChatGpt;
+
+class AppForm : Form
{
- class AppForm : Form
+ const string NewLine = "\r\n";
+
+ IOutputWriter output;
+ IInputReader input;
+ int DisplayDpi = 96;
+ string model = "";
+ int nTopMost = 0;
+ int iMaxTokens = 2000;
+ int iAutoMsgListRemove = 1;
+
+ public AppForm(string key, string model, int maxtokens, int topmost, int remove_auto_messagelist, IInputReader input, IOutputWriter output)
{
- const string NewLine = "\r\n";
+ // 「入力」や「出力」の対象を外部から受け取り
+ this.output = output;
+ this.input = input;
+ this.model = model;
+ this.iAutoMsgListRemove = remove_auto_messagelist;
- IOutputWriter output;
- IInputReader input;
- int DisplayDpi = 96;
- string model = "";
- int nTopMost = 0;
- int iMaxTokens = 2000;
- int iAutoMsgListRemove = 1;
+ this.iMaxTokens = maxtokens;
+ this.nTopMost = topmost;
- public AppForm(string key, string model, int maxtokens, int topmost, int remove_auto_messagelist, IInputReader input, IOutputWriter output)
+ try
{
- // 「入力」や「出力」の対象を外部から受け取り
- this.output = output;
- this.input = input;
- this.model = model;
- this.iAutoMsgListRemove = remove_auto_messagelist;
+ SetForm();
+ SetOkButton();
+ SetCancelButton();
+ SetChatClearButton();
+ SetTextEdit();
+ SetCheckBox();
+ SetOpenAI(key);
+ }
+ catch (Exception ex)
+ {
+ output.WriteLine(ex.ToString());
+ }
- this.iMaxTokens = maxtokens;
- this.nTopMost = topmost;
+ }
- try
- {
- SetForm();
- SetOkButton();
- SetCancelButton();
- SetChatClearButton();
- SetTextEdit();
- SetCheckBox();
- SetOpenAI(key);
- }
- catch (Exception ex)
- {
- output.WriteLine(ex.ToString());
- }
+ // フォーム属性の設定
+ void SetForm()
+ {
+ if (this.DeviceDpi > 96)
+ {
+ DisplayDpi = this.DeviceDpi;
+ }
+
+ this.Text = "*-- HmChatGPT --*";
+ this.Width = (int)((500 * DisplayDpi) / 96);
+ this.Height = (int)((210 * DisplayDpi) / 96);
+ this.FormClosing += AppForm_FormClosing;
+ // this.AutoScaleMode = AutoScaleMode.Dpi;
+ }
+ private void AppForm_FormClosing(object? sender, FormClosingEventArgs e)
+ {
+ if (ai == null)
+ {
+ return;
}
- // フォーム属性の設定
- void SetForm()
+ try
{
- if (this.DeviceDpi > 96)
- {
- DisplayDpi = this.DeviceDpi;
- }
+ // 中断したことと同じことをしておく
+ BtnCancel_Click(null, e);
+ }
+ catch (Exception)
+ {
+ // ここは必ず例外でるので不要。
+ }
- this.Text = "*-- HmChatGPT --*";
- this.Width = (int)((500 * DisplayDpi) / 96);
- this.Height = (int)((210 * DisplayDpi) / 96);
- this.FormClosing += AppForm_FormClosing;
- // this.AutoScaleMode = AutoScaleMode.Dpi;
+ try
+ {
+ // メッセージリストのオートリムーバーのキャンセルをしておく。(うーんぐだぐだだなー)
+ OpenAIChatMain.CancelMessageListCancelToken();
}
+ catch(Exception)
+ {
+ }
+ }
- private void AppForm_FormClosing(object? sender, FormClosingEventArgs e)
+ private TextBox? tb;
+ void SetTextEdit()
+ {
+ int top = 28;
+ if (btnOk != null) {
+ top = btnOk.Bottom + 4;
+ }
+
+ tb = new TextBox()
{
- if (ai == null)
- {
- return;
- }
+ Multiline = true,
+ Top = top,
+ Left = 2,
+ Height = this.ClientSize.Height - top,
+ Width = this.ClientSize.Width - 4,
+ ScrollBars = ScrollBars.Both,
+ Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom
+ };
+ tb.KeyDown += Tb_KeyDown;
+ this.Controls.Add(tb);
+
+ UpdateTextBox();
+ }
- try
+ // 秀丸で選択中のテキストがある状態でマクロが実行されたら、TextBoxで受け取る。
+ public void UpdateTextBox()
+ {
+ if (tb != null)
+ {
+ string? selectedText = input.ReadText();
+ if (String.IsNullOrEmpty(selectedText))
{
- // 中断したことと同じことをしておく
- BtnCancel_Click(null, e);
+ // tb.Text = string.Empty;
}
- catch (Exception)
+ else
{
- // ここは必ず例外でるので不要。
+ tb.Text = selectedText;
}
- try
- {
- // メッセージリストのオートリムーバーのキャンセルをしておく。(うーんぐだぐだだなー)
- OpenAIChatMain.CancelMessageListCancelToken();
- } catch(Exception) { }
- }
-
- private TextBox? tb;
- void SetTextEdit()
- {
- int top = 28;
- if (btnOk != null) {
- top = btnOk.Bottom + 4;
- }
+ // 見えてない時は、以下はエラーを履くので、tryでくくっておく
+ try {
+ this.WindowState = FormWindowState.Normal;
- tb = new TextBox()
- {
- Multiline = true,
- Top = top,
- Left = 2,
- Height = this.ClientSize.Height - top,
- Width = this.ClientSize.Width - 4,
- ScrollBars = ScrollBars.Both,
- Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom
- };
- tb.KeyDown += Tb_KeyDown;
- this.Controls.Add(tb);
-
- UpdateTextBox();
- }
-
- // 秀丸で選択中のテキストがある状態でマクロが実行されたら、TextBoxで受け取る。
- public void UpdateTextBox()
- {
- if (tb != null)
- {
- string? selectedText = input.ReadText();
- if (String.IsNullOrEmpty(selectedText))
+ this.ActiveControl = tb;
+ tb.Focus();
+ tb.Select(tb.Text.Length, 0); // カーソルの位置を末尾に配置しておく。
+ // このフォームウィンドウのフォーカスをアクティブにする。
+ // 秀丸に瞬間アクティブを取られるかもしれないが、0.5秒間に2度トライする。
+ Task.Run(() =>
{
- // tb.Text = string.Empty;
- }
- else
- {
- tb.Text = selectedText;
- }
-
- // 見えてない時は、以下はエラーを履くので、tryでくくっておく
- try {
- this.WindowState = FormWindowState.Normal;
-
- this.ActiveControl = tb;
- tb.Focus();
- tb.Select(tb.Text.Length, 0); // カーソルの位置を末尾に配置しておく。
- // このフォームウィンドウのフォーカスをアクティブにする。
- // 秀丸に瞬間アクティブを取られるかもしれないが、0.5秒間に2度トライする。
- Task.Run(() =>
- {
- Thread.Sleep(250);
- this.Activate();
- Thread.Sleep(250);
- this.Activate();
- });
- }
- catch (Exception) {
- }
+ Thread.Sleep(250);
+ this.Activate();
+ Thread.Sleep(250);
+ this.Activate();
+ });
+ }
+ catch (Exception) {
}
}
+ }
- // キーボードで「CTRL+リターン」だと、ボタンをクリックしたことと同じこととする。
- private void Tb_KeyDown(object? sender, KeyEventArgs e)
+ // キーボードで「CTRL+リターン」だと、ボタンをクリックしたことと同じこととする。
+ private void Tb_KeyDown(object? sender, KeyEventArgs e)
+ {
+ // リターンキーが押されていて
+ if (e.KeyCode == Keys.Return)
{
- // リターンキーが押されていて
- if (e.KeyCode == Keys.Return)
+ // CTRLキーも押されている時だけ、送信ボタンを押した相当にする。
+ if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
{
- // CTRLキーも押されている時だけ、送信ボタンを押した相当にする。
- if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
+ // 送信ボタンが有効なら
+ if (btnOk != null && btnOk.Enabled)
{
- // 送信ボタンが有効なら
- if (btnOk != null && btnOk.Enabled)
- {
- BtnOk_Click(null, e);
- }
+ BtnOk_Click(null, e);
}
}
}
+ }
- // 送信ボタン
- private Button? btnOk;
- void SetOkButton()
+ // 送信ボタン
+ private Button? btnOk;
+ void SetOkButton()
+ {
+ btnOk = new Button()
{
- btnOk = new Button()
- {
- Text = "送信 (Ctrl+⏎)",
- UseVisualStyleBackColor = true,
- Top = 2,
- Left = 2,
- Width = DisplayDpi,
- Height = (int)(DisplayDpi / 4)
- };
+ Text = "送信 (Ctrl+⏎)",
+ UseVisualStyleBackColor = true,
+ Top = 2,
+ Left = 2,
+ Width = DisplayDpi,
+ Height = (int)(DisplayDpi / 4)
+ };
- btnOk.Click += BtnOk_Click;
- this.Controls.Add(btnOk);
+ btnOk.Click += BtnOk_Click;
+ this.Controls.Add(btnOk);
- }
+ }
- // 会話履歴クリアボタン
- private Button? btnChatClear;
- void SetChatClearButton()
+ // 会話履歴クリアボタン
+ private Button? btnChatClear;
+ void SetChatClearButton()
+ {
+ btnChatClear = new Button()
{
- btnChatClear = new Button()
- {
- Text = "会話履歴クリア",
- UseVisualStyleBackColor = true,
- Top = 2,
- Width = (int)(DisplayDpi * 1.25),
- Height = (int)(DisplayDpi / 4),
- Anchor = AnchorStyles.Right | AnchorStyles.Top
- };
+ Text = "会話履歴クリア",
+ UseVisualStyleBackColor = true,
+ Top = 2,
+ Width = (int)(DisplayDpi * 1.25),
+ Height = (int)(DisplayDpi / 4),
+ Anchor = AnchorStyles.Right | AnchorStyles.Top
+ };
- btnChatClear.Location = new Point(ClientSize.Width - btnChatClear.Width - 2, 2);
+ btnChatClear.Location = new Point(ClientSize.Width - btnChatClear.Width - 2, 2);
- btnChatClear.Click += BtnChatClear_Click;
- this.Controls.Add(btnChatClear);
+ btnChatClear.Click += BtnChatClear_Click;
+ this.Controls.Add(btnChatClear);
+
+ }
+ // 中断ボタン
+ private Button? btnCancel;
+
+ void SetCancelButton()
+ {
+ int left = 100;
+ if (btnOk != null)
+ {
+ left = btnOk.Right + 2;
}
+ btnCancel = new Button()
+ {
+ Text = "中断",
+ UseVisualStyleBackColor = true,
+ Top = 2,
+ Left = left,
+ Width = DisplayDpi,
+ Height = (int)(DisplayDpi / 4)
+ };
+
+ btnCancel.Enabled = false;
+ btnCancel.Click += BtnCancel_Click;
+ this.Controls.Add(btnCancel);
+
+ }
- // 中断ボタン
- private Button? btnCancel;
+ // 送信したらフリーズ時間や解答時間が長いことがあるので、中断用にCancellationTokenSource/CancellationTokenを用意
+ static CancellationTokenSource? cs;
- void SetCancelButton()
+ // 中断ボタンおしたら中断用にCancellationTokenSourceにCancel発行する
+ private void BtnCancel_Click(object? sender, EventArgs e)
+ {
+ if (ai != null)
{
- int left = 100;
- if (btnOk != null)
+ if (cs != null)
{
- left = btnOk.Right + 2;
+ cs.Cancel();
}
- btnCancel = new Button()
- {
- Text = "中断",
- UseVisualStyleBackColor = true,
- Top = 2,
- Left = left,
- Width = DisplayDpi,
- Height = (int)(DisplayDpi / 4)
- };
-
- btnCancel.Enabled = false;
- btnCancel.Click += BtnCancel_Click;
- this.Controls.Add(btnCancel);
-
}
+ }
- // 送信したらフリーズ時間や解答時間が長いことがあるので、中断用にCancellationTokenSource/CancellationTokenを用意
- static CancellationTokenSource? cs;
+ // 入力された質問を処理する。
+ // AIに質問内容を追加し、TextBox⇒アウトプット枠へとメッセージを移動したかのような表示とする。
+ private void PostQuestion()
+ {
+ var trim = tb?.Text.TrimEnd();
+ if (String.IsNullOrEmpty(trim))
+ {
+ return;
+ }
- // 中断ボタンおしたら中断用にCancellationTokenSourceにCancel発行する
- private void BtnCancel_Click(object? sender, EventArgs e)
+ if (ai != null)
{
- if (ai != null)
- {
- if (cs != null)
- {
- cs.Cancel();
- }
- }
+ ai.AddQuestion(trim);
+ output.WriteLine(trim + NewLine);
+ }
+ if (tb != null)
+ {
+ tb.Text = "";
}
+ }
- // 入力された質問を処理する。
- // AIに質問内容を追加し、TextBox⇒アウトプット枠へとメッセージを移動したかのような表示とする。
- private void PostQuestion()
+ // ChatGPTの解答を得る。中断できるようにCancellationTokenを渡す。
+ private async Task GetAnswer()
+ {
+ try
{
- var trim = tb?.Text.TrimEnd();
- if (String.IsNullOrEmpty(trim))
+ if (btnCancel != null)
{
- return;
+ btnCancel.Enabled = true;
}
+ cs = new();
if (ai != null)
{
- ai.AddQuestion(trim);
- output.WriteLine(trim + NewLine);
- }
- if (tb != null)
- {
- tb.Text = "";
+
+ await Task.Run(async () =>
+ {
+ await ai.AddAnswer(cs.Token);
+ }, cs.Token);
}
- }
- // ChatGPTの解答を得る。中断できるようにCancellationTokenを渡す。
- private async Task GetAnswer()
+ }
+ catch (OperationCanceledException ex)
{
- try
+ if (ex.Message == "The operation was canceled." || ex.Message == "A task was canceled.")
{
- if (btnCancel != null)
- {
- btnCancel.Enabled = true;
- }
-
- cs = new();
if (ai != null)
{
-
- await Task.Run(async () =>
- {
- await ai.AddAnswer(cs.Token);
- }, cs.Token);
- }
-
- }
- catch (OperationCanceledException ex)
- {
- if (ex.Message == "The operation was canceled." || ex.Message == "A task was canceled.")
- {
- if (ai != null)
- {
- output.WriteLine(ai.GetAssistanceAnswerCancelMsg());
- }
+ output.WriteLine(ai.GetAssistanceAnswerCancelMsg());
}
- else
- {
- output.WriteLine(ex.Message);
- }
- // キャンセルトークン経由なら正規の中断だろうからなにもしない
- }
- catch (Exception ex)
- {
- string err = ex.Message + NewLine + ex.StackTrace;
- output.WriteLine(err);
}
-
- finally
+ else
{
- if (btnCancel != null)
- {
- btnCancel.Enabled = false;
- }
- if (btnOk != null)
- {
- btnOk.Enabled = true;
- }
- if (btnChatClear != null)
- {
- btnChatClear.Enabled = true;
- }
-
+ output.WriteLine(ex.Message);
}
-
+ // キャンセルトークン経由なら正規の中断だろうからなにもしない
}
-
- // 送信ボタンを押すと、質問内容をAIに登録、答えを得る処理へ
- private void BtnOk_Click(object? sender, EventArgs e)
+ catch (Exception ex)
{
- if (ai == null) { return; }
+ string err = ex.Message + NewLine + ex.StackTrace;
+ output.WriteLine(err);
+ }
- try
+ finally
+ {
+ if (btnCancel != null)
{
- if (btnOk != null) { btnOk.Enabled = false; }
- if (btnChatClear != null) { btnChatClear.Enabled = false; }
- PostQuestion();
- _ = GetAnswer();
-
+ btnCancel.Enabled = false;
}
- catch (Exception ex)
+ if (btnOk != null)
{
- string err = ex.Message + NewLine + ex.StackTrace;
- output.WriteLine(err);
+ btnOk.Enabled = true;
}
- finally
+ if (btnChatClear != null)
{
+ btnChatClear.Enabled = true;
}
+
}
- // 送信ボタンを押すと、質問内容をAIに登録、答えを得る処理へ
- private void BtnChatClear_Click(object? sender, EventArgs e)
+ }
+
+ // 送信ボタンを押すと、質問内容をAIに登録、答えを得る処理へ
+ private void BtnOk_Click(object? sender, EventArgs e)
+ {
+ if (ai == null) { return; }
+
+ try
{
- if (ai == null) { return; }
+ if (btnOk != null) { btnOk.Enabled = false; }
+ if (btnChatClear != null) { btnChatClear.Enabled = false; }
+ PostQuestion();
+ _ = GetAnswer();
- try
- {
- OpenAIChatMain.InitMessages();
- output.WriteLine("-- 会話履歴をクリア --");
- }
- catch (Exception ex)
- {
- string err = ex.Message + NewLine + ex.StackTrace;
- output.WriteLine(err);
- }
- finally
- {
- }
}
+ catch (Exception ex)
+ {
+ string err = ex.Message + NewLine + ex.StackTrace;
+ output.WriteLine(err);
+ }
+ finally
+ {
+ }
+ }
- CheckBox? cb;
-
- void SetCheckBox()
- {
- if (btnCancel != null) {
- cb = new CheckBox();
- cb.Text = "常に手前";
- cb.Left = btnCancel.Right + (int)(10*DisplayDpi/96);
- cb.Height = btnCancel.Height;
- cb.Top = btnCancel.Top;
- cb.Width = (int)(btnCancel.Width);
- cb.CheckAlign = ContentAlignment.MiddleLeft;
- cb.TextAlign = ContentAlignment.MiddleLeft;
- cb.CheckedChanged += Cb_CheckedChanged;
- if (nTopMost > 0)
- {
- cb.Checked = true;
- }
+ // 送信ボタンを押すと、質問内容をAIに登録、答えを得る処理へ
+ private void BtnChatClear_Click(object? sender, EventArgs e)
+ {
+ if (ai == null) { return; }
- this.Controls.Add(cb);
- }
+ try
+ {
+ OpenAIChatMain.InitMessages();
+ output.WriteLine("-- 会話履歴をクリア --");
}
-
- private void Cb_CheckedChanged(object? sender, EventArgs e)
+ catch (Exception ex)
+ {
+ string err = ex.Message + NewLine + ex.StackTrace;
+ output.WriteLine(err);
+ }
+ finally
{
- if (cb != null)
- {
- if (cb.Checked)
- {
- this.TopMost = true;
- }
- else
- {
- this.TopMost = false;
- }
- }
}
+ }
+
+ CheckBox? cb;
+ void SetCheckBox()
+ {
+ if (btnCancel != null) {
+ cb = new CheckBox();
+ cb.Text = "常に手前";
+ cb.Left = btnCancel.Right + (int)(10*DisplayDpi/96);
+ cb.Height = btnCancel.Height;
+ cb.Top = btnCancel.Top;
+ cb.Width = (int)(btnCancel.Width);
+ cb.CheckAlign = ContentAlignment.MiddleLeft;
+ cb.TextAlign = ContentAlignment.MiddleLeft;
+ cb.CheckedChanged += Cb_CheckedChanged;
+ if (nTopMost > 0)
+ {
+ cb.Checked = true;
+ }
- // aiの処理。キレイには切り分けられてないが、Modelに近い。
- OpenAIChatMain? ai;
+ this.Controls.Add(cb);
+ }
+ }
- // 最初生成
- void SetOpenAI(string key)
+ private void Cb_CheckedChanged(object? sender, EventArgs e)
+ {
+ if (cb != null)
{
- try
+ if (cb.Checked)
{
- ai = new OpenAIChatMain(key, model, iMaxTokens, output, iAutoMsgListRemove);
+ this.TopMost = true;
}
- catch (Exception ex)
+ else
{
- string err = ex.Message + NewLine + ex.StackTrace;
- output.WriteLine(err);
+ this.TopMost = false;
}
}
}
+
+
+ // aiの処理。キレイには切り分けられてないが、Modelに近い。
+ OpenAIChatMain? ai;
+
+ // 最初生成
+ void SetOpenAI(string key)
+ {
+ try
+ {
+ ai = new OpenAIChatMain(key, model, iMaxTokens, output, iAutoMsgListRemove);
+ }
+ catch (Exception ex)
+ {
+ string err = ex.Message + NewLine + ex.StackTrace;
+ output.WriteLine(err);
+ }
+ }
}
diff --git a/src/HmChatGPT/WinFormCOMInterface.cs b/src/HmChatGPT/WinFormCOMInterface.cs
index 4a1ffb6..8910f8e 100644
--- a/src/HmChatGPT/WinFormCOMInterface.cs
+++ b/src/HmChatGPT/WinFormCOMInterface.cs
@@ -2,159 +2,157 @@
using System.Runtime.InteropServices;
using HmNetCOM;
-namespace HmOpenAIChatGpt
-{
+namespace HmOpenAIChatGpt;
- [ComVisible(true)]
- [Guid("BCCBE82C-56E1-4056-AE7C-3C4F62806732")]
- public class HmChatGPT
- {
- private static AppForm? form;
- private static HmOutputWriter? output;
- private static HmInputReader? input;
- HmChatGPTSharedMemory sm = new HmChatGPTSharedMemory();
+[ComVisible(true)]
+[Guid("BCCBE82C-56E1-4056-AE7C-3C4F62806732")]
+public class HmChatGPT
+{
+ private static AppForm? form;
+ private static HmOutputWriter? output;
+ private static HmInputReader? input;
- public long CreateForm(string key = "", string model = "", int maxtokens = 2000, int topmost=0, int remove_auto_messagelist = 1)
+ HmChatGPTSharedMemory sm = new HmChatGPTSharedMemory();
+
+ public long CreateForm(string key = "", string model = "", int maxtokens = 2000, int topmost=0, int remove_auto_messagelist = 1)
+ {
+ try
{
- try
+ if (form != null)
{
- if (form != null)
- {
- form.UpdateTextBox();
- }
+ form.UpdateTextBox();
+ }
- if (form == null || !form.Visible)
- {
- output = new HmOutputWriter();
- input = new HmInputReader();
- form = new AppForm(key, model, maxtokens, topmost, remove_auto_messagelist, input, output);
+ if (form == null || !form.Visible)
+ {
+ output = new HmOutputWriter();
+ input = new HmInputReader();
+ form = new AppForm(key, model, maxtokens, topmost, remove_auto_messagelist, input, output);
- sm.CreateSharedMemory();
- }
+ sm.CreateSharedMemory();
+ }
- form.Show();
+ form.Show();
- // フォームを前に持ってくるだけ
- form.BringToFront();
- }
- catch (Exception ex)
- {
- string err = ex.Message + "\r\n" + ex.StackTrace;
- output?.WriteLine(err);
- }
- return -1;
+ // フォームを前に持ってくるだけ
+ form.BringToFront();
}
-
- // 秀丸のバージョンによって引数を渡してくるものと渡してこないものがあるので、デフォルト引数は必要。
- // (引数がないと、引数ミスマッチということで、呼び出し自体されない)
- public long DestroyForm(int result = 0)
+ catch (Exception ex)
{
- if (form != null)
- {
- form.Close();
- form = null;
+ string err = ex.Message + "\r\n" + ex.StackTrace;
+ output?.WriteLine(err);
+ }
+ return -1;
+ }
- sm.DeleteSharedMemory();
- }
+ // 秀丸のバージョンによって引数を渡してくるものと渡してこないものがあるので、デフォルト引数は必要。
+ // (引数がないと、引数ミスマッチということで、呼び出し自体されない)
+ public long DestroyForm(int result = 0)
+ {
+ if (form != null)
+ {
+ form.Close();
+ form = null;
- return 1;
+ sm.DeleteSharedMemory();
}
+
+ return 1;
}
+}
- [ComVisible(true)]
- [Guid("9818F69E-A37D-4A03-BCA1-C4C172366473")]
- public class HmChatGPTSharedMemory
- {
- private static MemoryMappedFile? share_mem;
+[ComVisible(true)]
+[Guid("9818F69E-A37D-4A03-BCA1-C4C172366473")]
+public class HmChatGPTSharedMemory
+{
+ private static MemoryMappedFile? share_mem;
- public void CreateSharedMemory()
+ public void CreateSharedMemory()
+ {
+ try
{
- try
- {
- // 新規にメモリマップを作成して、そこに現在の秀丸ハンドルを数値として入れておく
- if (share_mem == null)
- {
- share_mem = MemoryMappedFile.CreateNew("HmChatGPTSharedMem", 8);
- }
- }
- catch (Exception e)
- {
- }
-
- try
- {
- using (var share_mem = MemoryMappedFile.OpenExisting("HmChatGPTSharedMem"))
- {
- if (share_mem != null)
- {
- using (var accessor = share_mem.CreateViewAccessor())
- {
- accessor.Write(0, (long)Hm.WindowHandle);
- }
- }
- }
- }
- catch (Exception e)
+ // 新規にメモリマップを作成して、そこに現在の秀丸ハンドルを数値として入れておく
+ if (share_mem == null)
{
+ share_mem = MemoryMappedFile.CreateNew("HmChatGPTSharedMem", 8);
}
}
+ catch (Exception e)
+ {
+ }
- public long GetSharedMemory()
+ try
{
- long value = 0;
- try
+ using (var share_mem = MemoryMappedFile.OpenExisting("HmChatGPTSharedMem"))
{
- using (var share_mem = MemoryMappedFile.OpenExisting("HmChatGPTSharedMem"))
+ if (share_mem != null)
{
using (var accessor = share_mem.CreateViewAccessor())
{
- value = accessor.ReadInt64(0);
+ accessor.Write(0, (long)Hm.WindowHandle);
}
}
}
- catch (Exception)
- {
- }
-
- return value;
}
+ catch (Exception e)
+ {
+ }
+ }
- public void DeleteSharedMemory()
+ public long GetSharedMemory()
+ {
+ long value = 0;
+ try
{
- try
+ using (var share_mem = MemoryMappedFile.OpenExisting("HmChatGPTSharedMem"))
{
- if (share_mem != null)
+ using (var accessor = share_mem.CreateViewAccessor())
{
- // メモリマップを削除。
- using (var accessor = share_mem.CreateViewAccessor())
- {
- accessor.Write(0, (long)0);
- }
+ value = accessor.ReadInt64(0);
}
}
- catch (Exception)
- {
- }
+ }
+ catch (Exception)
+ {
+ }
+
+ return value;
+ }
- try
+ public void DeleteSharedMemory()
+ {
+ try
+ {
+ if (share_mem != null)
{
- if (share_mem != null)
+ // メモリマップを削除。
+ using (var accessor = share_mem.CreateViewAccessor())
{
- share_mem.Dispose();
- share_mem = null;
+ accessor.Write(0, (long)0);
}
}
- catch (Exception)
+ }
+ catch (Exception)
+ {
+ }
+
+ try
+ {
+ if (share_mem != null)
{
+ share_mem.Dispose();
+ share_mem = null;
}
}
-
-
- public long GetFormHideamruHandle()
+ catch (Exception)
{
- return GetSharedMemory();
}
}
+
+ public long GetFormHideamruHandle()
+ {
+ return GetSharedMemory();
+ }
}
diff --git a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.comhost.dll b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.comhost.dll
index 52eba30..bbd8d1b 100644
Binary files a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.comhost.dll and b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.comhost.dll differ
diff --git a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.deps.json b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.deps.json
index 1555279..9e2d7a7 100644
--- a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.deps.json
+++ b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.deps.json
@@ -6,7 +6,7 @@
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
- "HmChatGPT/1.0.7.9": {
+ "HmChatGPT/1.0.8.2": {
"dependencies": {
"Betalgo.OpenAI": "8.2.2",
"HmNetCOM": "2.0.7.9"
@@ -154,7 +154,7 @@
}
},
"libraries": {
- "HmChatGPT/1.0.7.9": {
+ "HmChatGPT/1.0.8.2": {
"type": "project",
"serviceable": false,
"sha512": ""
diff --git a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.dll b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.dll
index 010dd5c..58b6e65 100644
Binary files a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.dll and b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.dll differ
diff --git a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.mac b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.mac
index b0eccd0..6b628d1 100644
--- a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.mac
+++ b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT.mac
@@ -1,5 +1,5 @@
/*--------------------------------------------
- * HmChatGPT v1.0.7.9
+ * HmChatGPT v1.0.8.2
*
* Copyright (C) 2023-2024 Akitsugu Komiyama
* under the MIT License
@@ -37,10 +37,12 @@ SET_TOPMOST_TYPE:
SET_AUTO_REMOVE_HISTORY:
- #REMOVE_AUTO_HISTORY = 1; // 会話履歴の自動削除モード
- // 「最後のHmChatGPTの回答」から、5分間経過すると、ChatGPTとのやり取り履歴の「古い方」から忘れるモード=「会話履歴の自動削除モード」に突入する。
+ #REMOVE_AUTO_HISTORY = 5; // 0 を指定すると、このモードは無効となる。
+ // 会話履歴の自動削除モードが発動する分数
+ // 例えば、30と指定した場合、「最後のHmChatGPTの回答」から、30分間経過すると、
+ // ChatGPTとのやり取り履歴の「古い方」から忘れるモード=「会話履歴の自動削除モード」に突入する。
// 即ち「しばらく使っていない」と「会話履歴の自動削除モード」となる。
- // このモードでは、1分間毎に「質問」と「回答」を1セットと考えて1セットずつ忘れる
+ // この「忘れる」モードになると、1分間毎に「質問」と「回答」を1セットと考えて1セットずつ忘れる
// これにより、しばらくHmChatGPTをさわっていないまま放置していれば、「履歴」が自動的にどんどん古い方から削除されるため、
// お金の大幅な節約に繋がる。
// (うっかり履歴がたまったまま、履歴とは無関係な質問をする、といったことが自動的に防止できるため)
diff --git a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT_x64.zip b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT_x64.zip
index c31f9c4..fe25f29 100644
Binary files a/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT_x64.zip and b/src/HmChatGPT/bin/x64/Release/net6.0-windows/HmChatGPT_x64.zip differ
diff --git a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.comhost.dll b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.comhost.dll
index 8676dd2..7997f8a 100644
Binary files a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.comhost.dll and b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.comhost.dll differ
diff --git a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.deps.json b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.deps.json
index 1555279..9e2d7a7 100644
--- a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.deps.json
+++ b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.deps.json
@@ -6,7 +6,7 @@
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
- "HmChatGPT/1.0.7.9": {
+ "HmChatGPT/1.0.8.2": {
"dependencies": {
"Betalgo.OpenAI": "8.2.2",
"HmNetCOM": "2.0.7.9"
@@ -154,7 +154,7 @@
}
},
"libraries": {
- "HmChatGPT/1.0.7.9": {
+ "HmChatGPT/1.0.8.2": {
"type": "project",
"serviceable": false,
"sha512": ""
diff --git a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.dll b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.dll
index 0e3d9a2..39ab643 100644
Binary files a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.dll and b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.dll differ
diff --git a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.mac b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.mac
index b0eccd0..6b628d1 100644
--- a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.mac
+++ b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT.mac
@@ -1,5 +1,5 @@
/*--------------------------------------------
- * HmChatGPT v1.0.7.9
+ * HmChatGPT v1.0.8.2
*
* Copyright (C) 2023-2024 Akitsugu Komiyama
* under the MIT License
@@ -37,10 +37,12 @@ SET_TOPMOST_TYPE:
SET_AUTO_REMOVE_HISTORY:
- #REMOVE_AUTO_HISTORY = 1; // 会話履歴の自動削除モード
- // 「最後のHmChatGPTの回答」から、5分間経過すると、ChatGPTとのやり取り履歴の「古い方」から忘れるモード=「会話履歴の自動削除モード」に突入する。
+ #REMOVE_AUTO_HISTORY = 5; // 0 を指定すると、このモードは無効となる。
+ // 会話履歴の自動削除モードが発動する分数
+ // 例えば、30と指定した場合、「最後のHmChatGPTの回答」から、30分間経過すると、
+ // ChatGPTとのやり取り履歴の「古い方」から忘れるモード=「会話履歴の自動削除モード」に突入する。
// 即ち「しばらく使っていない」と「会話履歴の自動削除モード」となる。
- // このモードでは、1分間毎に「質問」と「回答」を1セットと考えて1セットずつ忘れる
+ // この「忘れる」モードになると、1分間毎に「質問」と「回答」を1セットと考えて1セットずつ忘れる
// これにより、しばらくHmChatGPTをさわっていないまま放置していれば、「履歴」が自動的にどんどん古い方から削除されるため、
// お金の大幅な節約に繋がる。
// (うっかり履歴がたまったまま、履歴とは無関係な質問をする、といったことが自動的に防止できるため)
diff --git a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT_x86.zip b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT_x86.zip
index 512e581..44dcaa6 100644
Binary files a/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT_x86.zip and b/src/HmChatGPT/bin/x86/Release/net6.0-windows/HmChatGPT_x86.zip differ
diff --git a/src/HmChatGPT/obj/HmChatGPT.csproj.nuget.dgspec.json b/src/HmChatGPT/obj/HmChatGPT.csproj.nuget.dgspec.json
index d143bd5..09f030c 100644
--- a/src/HmChatGPT/obj/HmChatGPT.csproj.nuget.dgspec.json
+++ b/src/HmChatGPT/obj/HmChatGPT.csproj.nuget.dgspec.json
@@ -5,7 +5,7 @@
},
"projects": {
"G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmChatGPT.csproj": {
- "version": "1.0.7.9",
+ "version": "1.0.8.2",
"restore": {
"projectUniqueName": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmChatGPT.csproj",
"projectName": "HmChatGPT",
diff --git a/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.AssemblyInfo.cs b/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.AssemblyInfo.cs
index fc712f1..2d639ad 100644
--- a/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.AssemblyInfo.cs
+++ b/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.AssemblyInfo.cs
@@ -14,11 +14,11 @@
[assembly: System.Reflection.AssemblyCompanyAttribute("Akitsugu Komiyama")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyCopyrightAttribute("Akitsugu Komiyama")]
-[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.7.9")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.7.9+452a75e0bad3be4f562bf2e567dcbda21b9e9302")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.8.2")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.8.2+780743043e72e34ed09928bca849209c9756baa2")]
[assembly: System.Reflection.AssemblyProductAttribute("HmChatGPT")]
[assembly: System.Reflection.AssemblyTitleAttribute("HmChatGPT")]
-[assembly: System.Reflection.AssemblyVersionAttribute("1.0.7.9")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.8.2")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
diff --git a/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.AssemblyInfoInputs.cache b/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.AssemblyInfoInputs.cache
index db76705..7393990 100644
--- a/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.AssemblyInfoInputs.cache
+++ b/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.AssemblyInfoInputs.cache
@@ -1 +1 @@
-5928cbd0ee3a8cf937d01bee87a730c844ab7300942af59897a7dca4e2a74f12
+3889c31c78fb55618a787a8c1c547b90542127ed0e417eb53d379293e5655be9
diff --git a/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.clsidmap b/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.clsidmap
index a84a762..8acd29b 100644
--- a/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.clsidmap
+++ b/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.clsidmap
@@ -1 +1 @@
-{"{cf709244-a284-419e-832d-0b354ee2950d}":{"type":"HmNetCOM.HmMacroCOMVar","assembly":"HmChatGPT, Version=1.0.7.9, Culture=neutral, PublicKeyToken=null","progid":"HmNetCOM.HmMacroCOMVar"},"{bccbe82c-56e1-4056-ae7c-3c4f62806732}":{"type":"HmOpenAIChatGpt.HmChatGPT","assembly":"HmChatGPT, Version=1.0.7.9, Culture=neutral, PublicKeyToken=null","progid":"HmOpenAIChatGpt.HmChatGPT"},"{9818f69e-a37d-4a03-bca1-c4c172366473}":{"type":"HmOpenAIChatGpt.HmChatGPTSharedMemory","assembly":"HmChatGPT, Version=1.0.7.9, Culture=neutral, PublicKeyToken=null","progid":"HmOpenAIChatGpt.HmChatGPTSharedMemory"}}
\ No newline at end of file
+{"{cf709244-a284-419e-832d-0b354ee2950d}":{"type":"HmNetCOM.HmMacroCOMVar","assembly":"HmChatGPT, Version=1.0.8.2, Culture=neutral, PublicKeyToken=null","progid":"HmNetCOM.HmMacroCOMVar"},"{bccbe82c-56e1-4056-ae7c-3c4f62806732}":{"type":"HmOpenAIChatGpt.HmChatGPT","assembly":"HmChatGPT, Version=1.0.8.2, Culture=neutral, PublicKeyToken=null","progid":"HmOpenAIChatGpt.HmChatGPT"},"{9818f69e-a37d-4a03-bca1-c4c172366473}":{"type":"HmOpenAIChatGpt.HmChatGPTSharedMemory","assembly":"HmChatGPT, Version=1.0.8.2, Culture=neutral, PublicKeyToken=null","progid":"HmOpenAIChatGpt.HmChatGPTSharedMemory"}}
\ No newline at end of file
diff --git a/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.dll b/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.dll
index 010dd5c..58b6e65 100644
Binary files a/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.dll and b/src/HmChatGPT/obj/Release/net6.0-windows/HmChatGPT.dll differ
diff --git a/src/HmChatGPT/obj/Release/net6.0-windows/ref/HmChatGPT.dll b/src/HmChatGPT/obj/Release/net6.0-windows/ref/HmChatGPT.dll
index 8fee382..5a60df1 100644
Binary files a/src/HmChatGPT/obj/Release/net6.0-windows/ref/HmChatGPT.dll and b/src/HmChatGPT/obj/Release/net6.0-windows/ref/HmChatGPT.dll differ
diff --git a/src/HmChatGPT/obj/Release/net6.0-windows/refint/HmChatGPT.dll b/src/HmChatGPT/obj/Release/net6.0-windows/refint/HmChatGPT.dll
index 8fee382..5a60df1 100644
Binary files a/src/HmChatGPT/obj/Release/net6.0-windows/refint/HmChatGPT.dll and b/src/HmChatGPT/obj/Release/net6.0-windows/refint/HmChatGPT.dll differ
diff --git a/src/HmChatGPT/obj/project.assets.json b/src/HmChatGPT/obj/project.assets.json
index 0dc3c74..0fd78fb 100644
--- a/src/HmChatGPT/obj/project.assets.json
+++ b/src/HmChatGPT/obj/project.assets.json
@@ -595,7 +595,7 @@
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
},
"project": {
- "version": "1.0.7.9",
+ "version": "1.0.8.2",
"restore": {
"projectUniqueName": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmChatGPT.csproj",
"projectName": "HmChatGPT",
diff --git a/src/HmChatGPT/obj/project.nuget.cache b/src/HmChatGPT/obj/project.nuget.cache
index 91e4a16..06a7694 100644
--- a/src/HmChatGPT/obj/project.nuget.cache
+++ b/src/HmChatGPT/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "+BdKRCQANsY=",
+ "dgSpecHash": "uEmUzXkSg0k=",
"success": true,
"projectFilePath": "G:\\repogitory\\hm_openai_chatgpt35_turbo\\src\\HmChatGPT\\HmChatGPT.csproj",
"expectedPackageFiles": [