Sam a3c827efcc
FEATURE: allow personas to supply top_p and temperature params (#459)
* FEATURE: allow personas to supply top_p and temperature params

Code assistance generally are more focused at a lower temperature
This amends it so SQL Helper runs at 0.2 temperature vs the more
common default across LLMs of 1.0.

Reduced temperature leads to more focused, concise and predictable
answers for the SQL Helper

* fix tests

* This is not perfect, but far better than what we do today

Instead of fishing for

1. Draft sequence
2. Draft body

We skip (2), this means the composer "only" needs 1 http request to
open, we also want to eliminate (1) but it is a bit of a trickier
core change, may figure out how to pull it off (defer it to first draft save)

Value of bot drafts < value of opening bot conversations really fast
2024-02-03 07:09:34 +11:00

145 lines
4.1 KiB
Ruby

# frozen_string_literal: true
module DiscourseAi
module Completions
module Endpoints
class Fake < Base
class << self
def can_contact?(_endpoint_name, model_name)
model_name == "fake"
end
def correctly_configured?(_model_name)
true
end
def endpoint_name(_model_name)
"Test - fake model"
end
end
STOCK_CONTENT = <<~TEXT
# Discourse Markdown Styles Showcase
Welcome to the **Discourse Markdown Styles Showcase**! This _post_ is designed to demonstrate a wide range of Markdown capabilities available in Discourse.
## Lists and Emphasis
- **Bold Text**: To emphasize a point, you can use bold text.
- _Italic Text_: To subtly highlight text, italics are perfect.
- ~~Strikethrough~~: Sometimes, marking text as obsolete requires a strikethrough.
> **Note**: Combining these _styles_ can **_really_** make your text stand out!
1. First item
2. Second item
* Nested bullet
* Another nested bullet
3. Third item
## Links and Images
You can easily add [links](https://meta.discourse.org) to your posts. For adding images, use this syntax:
![Discourse Logo](https://meta.discourse.org/images/discourse-logo.svg)
## Code and Quotes
Inline `code` is used for mentioning small code snippets like `let x = 10;`. For larger blocks of code, fenced code blocks are used:
```javascript
function greet() {
console.log("Hello, Discourse Community!");
}
greet();
```
> Blockquotes can be very effective for highlighting user comments or important sections from cited sources. They stand out visually and offer great readability.
## Tables and Horizontal Rules
Creating tables in Markdown is straightforward:
| Header 1 | Header 2 | Header 3 |
| ---------|:--------:| --------:|
| Row 1, Col 1 | Centered | Right-aligned |
| Row 2, Col 1 | **Bold** | _Italic_ |
| Row 3, Col 1 | `Inline Code` | [Link](https://meta.discourse.org) |
To separate content sections:
---
## Final Thoughts
Congratulations, you've now seen a small sample of what Discourse's Markdown can do! For more intricate formatting, consider exploring the advanced styling options. Remember that the key to great formatting is not just the available tools, but also the **clarity** and **readability** it brings to your readers.
TEXT
def self.fake_content
@fake_content || STOCK_CONTENT
end
def self.delays
@delays ||= Array.new(10) { rand * 6 }
end
def self.delays=(delays)
@delays = delays
end
def self.chunk_count
@chunk_count ||= 10
end
def self.chunk_count=(chunk_count)
@chunk_count = chunk_count
end
def self.last_call
@last_call
end
def self.last_call=(params)
@last_call = params
end
def perform_completion!(dialect, user, model_params = {})
self.class.last_call = { dialect: dialect, user: user, model_params: model_params }
content = self.class.fake_content
if block_given?
split_indices = (1...content.length).to_a.sample(self.class.chunk_count - 1).sort
indexes = [0, *split_indices, content.length]
original_content = content
content = +""
cancel = false
cancel_proc = -> { cancel = true }
i = 0
indexes
.each_cons(2)
.map { |start, finish| original_content[start...finish] }
.each do |chunk|
break if cancel
if self.class.delays.present? &&
(delay = self.class.delays[i % self.class.delays.length])
sleep(delay)
i += 1
end
break if cancel
content << chunk
yield(chunk, cancel_proc)
end
end
content
end
end
end
end
end