Missing OpenAI functionality

Just wanted to mention that I am looking at the vectorizor branch, as that seems to be the active development branch as far as I can tell.
The current OpenAI API is not really compliant with the python version of the API, restricting it's use.
The extension is missing a bunch of arguments for the openai endpoints, and not all of the arguments that are there behave in-line with the API spec. Some of the missing arguments are needed for using proxy solutions or custom samplers on open source inference servers for example,
The return types for the embed endpoints also seems like it should just be json, because there are options to return the data in either base64 or floating point numbers for example.
I think the functions that provide a "simple" wrapper should be designed on top of the raw functions that return json rather than strict data types. Probably in a bit more structured a way than the current "simple" chat completion function. I haven't gotten to this yet. Having a full featured base set of functions was my priority first.
Either way, I put in a good bit of work into a branch, but cannot get the test suite to pass due to white-space issues with the expected files. I'm at my wits end with messing with the test suite considering I cannot run it locally because your build scripts aren't compatible with podman and that's what I use on my dev machine.
Comparison with branch: https://github.com/timescale/pgai/compare/vectorizer...Tostino:pgai:fix-openai-api?expand=1
The last major argument I haven't taken into consideration here is timeout which will need a little more thought because it needs to be supported at both the client level as well as the function level.
Was planning on doing that after getting some feedback.

Hey @Tostino, thanks for looking into the project.

"simple" wrapper should be designed on top of the raw functions that return json rather than strict data types

This is something we might look post merge of the vectorizer branch. We've noticed some things from the openAI library as well, that might steer us in the direction of using http calls made by ourselves directly.
What tests are giving you issues? Can you share the logs. We want to improve devex regarding the repo, so any feedback is welcome.
We are merging this 2 projects together (vectorizer and extension) into one repository so things might be a little cumbersome while we iron out the wrinkles. Thanks.

That's why there's been a little bit of radio silence on our part.

No problem at all.

The library uses a lot of typing mechanism and casting that increase the CPU consumption under heavy load

The portion of the overhead time is spent creating the client for each and every request.
The actual chat.completions.create call (minus the inference server actually doing it's work) is relatively lightweight from what i've seen.
I had already planned on doing some work on caching the client between requests, because I know there is some serious overhead in setting that up for every call from a past project.
I spent some time on that today, as well as writing some benchmark code to quantify the changes.
Benchmark:
import psycopg2
import time
import concurrent.futures
import matplotlib.pyplot as plt
import numpy as np
from typing import List, Tuple
import json
import os

def run_query(conn, series_count: int) -> float:
    query = f"""
    SELECT ai.openai_chat_complete(
    _api_key=>'none'
    , _base_url => 'http://localhost:8001/v1'
    , _model=>'Qwen/Qwen2.5-0.5B-Instruct'
    , _max_tokens=>1
    , _messages=>jsonb_build_array
      ( jsonb_build_object('role', 'user', 'content', 'reply with `hello` and nothing else.')
      )
    ) FROM generate_series(1,{series_count});
    """
    start_time = time.time()
    with conn.cursor() as cur:
        cur.execute(query)
        cur.fetchall()  # Ensure the query completes
    end_time = time.time()
    return (end_time - start_time) / series_count  # Return time per call

def benchmark(db_params: dict, thread_counts: List[int], series_counts: List[int]) -> List[Tuple[int, int, float]]:
    results = []
    for thread_count in thread_counts:
        for series_count in series_counts:
            with concurrent.futures.ThreadPoolExecutor(max_workers=thread_count) as executor:
                conn = psycopg2.connect(**db_params)
                futures = [executor.submit(run_query, conn, series_count) for _ in range(thread_count)]
                times = [f.result() for f in concurrent.futures.as_completed(futures)]
                conn.close()
            avg_time = sum(times) / len(times)
            results.append((thread_count, series_count, avg_time))
    return results

def save_results(results: List[Tuple[int, int, float]], filename: str):
    with open(filename, 'w') as f:
        json.dump(results, f)

def load_results(filename: str) -> List[Tuple[int, int, float]]:
    with open(filename, 'r') as f:
        return json.load(f)

def plot_results(unchanged_results: List[Tuple[int, int, float]], changed_results: List[Tuple[int, int, float]]):
    thread_counts = sorted(set(r[0] for r in unchanged_results))
    series_counts = sorted(set(r[1] for r in unchanged_results))

    fig, ax = plt.subplots(figsize=(15, 10))

    x = np.arange(len(thread_counts) * len(series_counts))
    width = 0.35

    unchanged_times = [r[2] for r in unchanged_results]
    changed_times = [r[2] for r in changed_results]

    rects1 = ax.bar(x - width/2, unchanged_times, width, label='Unchanged PGAI')
    rects2 = ax.bar(x + width/2, changed_times, width, label='Changed PGAI')

    ax.set_ylabel('Time per call (seconds)')
    ax.set_title('PGAI Performance Comparison')
    ax.set_xticks(x)
    ax.set_xticklabels([f'T{r[0]}-S{r[1]}' for r in unchanged_results])
    ax.legend()

    ax.bar_label(rects1, padding=3, rotation=90, fmt='%.3f')
    ax.bar_label(rects2, padding=3, rotation=90, fmt='%.3f')

    plt.xticks(rotation=45, ha='right')
    plt.tight_layout()
    plt.savefig('pgai_benchmark_results.png')
    plt.close()

def main():
    db_params = {
        'dbname': 'DB',
        'user': 'USER',
        'password': 'PASS',
        'host': 'HOST',
        'port': 'PORT'
    }
    thread_counts = [1, 2, 8, 16]
    series_counts = [1, 10, 50, 100]
    results_file = 'unchanged_results.json'

    if not os.path.exists(results_file):
        print("Running benchmark on unchanged PGAI...")
        unchanged_results = benchmark(db_params, thread_counts, series_counts)
        save_results(unchanged_results, results_file)
        print(f"Benchmark complete. Results saved in '{results_file}'")
        print("Please make your changes to PGAI and run this script again.")
    else:
        print("Loading results from unchanged PGAI...")
        unchanged_results = load_results(results_file)

        print("Running benchmark on changed PGAI...")
        changed_results = benchmark(db_params, thread_counts, series_counts)

        plot_results(unchanged_results, changed_results)
        print("Benchmark complete. Results saved in 'pgai_benchmark_results.png'")

        # Clean up the results file
        os.remove(results_file)

if __name__ == "__main__":
    main()

A mock server for the chat/completion endpoint is below to help reduce the overhead that inference plays into the benchmark:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional
import uvicorn

app = FastAPI()

class Message(BaseModel):
    role: str
    content: str

class ChatCompletionRequest(BaseModel):
    model: str
    messages: List[Message]
    temperature: Optional[float] = None
    top_p: Optional[float] = None
    n: Optional[int] = None
    stream: Optional[bool] = None
    stop: Optional[List[str]] = None
    max_tokens: Optional[int] = None
    presence_penalty: Optional[float] = None
    frequency_penalty: Optional[float] = None
    logit_bias: Optional[dict] = None
    user: Optional[str] = None

@app.post("/v1/chat/completions")
async def chat_completions(request: ChatCompletionRequest):
    # Return constant response
    return {
        "id": "chat-aabeda70641c4c88ac523bddb544ad87",
        "model": "Qwen/Qwen2.5-0.5B-Instruct",
        "usage": {
            "total_tokens": 39,
            "prompt_tokens": 38,
            "completion_tokens": 1
        },
        "object": "chat.completion",
        "choices": [
            {
                "index": 0,
                "message": {
                    "role": "assistant",
                    "content": "hello",
                    "tool_calls": [],
                    "function_call": None
                },
                "logprobs": None,
                "stop_reason": None,
                "finish_reason": "length"
            }
        ],
        "created":<PHONE_NUMBER>,
        "prompt_logprobs": None,
        "system_fingerprint": None
    }

if __name__ == "__main__":
    uvicorn.run(app, host="<IP_ADDRESS>", port=8001)

The result is below. Unchanged represents the current state of my branch which effectively works the same as it does in the vectorizor branch. Changed represents the timing after I added support for caching the client object in the GD (global dictionary that is persistent for a postgres session), as well as some additional functions for dealing with the client lifecycle.

I'll mess around with my local branch slightly more before committing something to see if I can get some better results.

Alright,  I messed up rushing to benchmark before finishing the day and running to a dinner...
After noticing my mistake I went back and reworked the benchmark to remove as much noise and artificial limitations as I could.
One thing to note is that we are measuring total system CPU, so I think that slightly affected the S5-T1 result because of other processes running on my system. Also...sorry for the confusing naming. Request throughput is the number of times the query is run on postgres per second. Query throughput is the number of times the actual chat/completion call was made.
Here are the results for 1 and 8 threads, as well as 1, 5, and 15 API calls per query:

The The reduction in CPU load for larger thread counts is even better.
Here are the results for 32 threads, as well as 1, and 15 API calls per query:

Here is the corrected benchmark code:
import asyncio
import psycopg2
from psycopg2 import pool
import time
import matplotlib.pyplot as plt
import numpy as np
from typing import List, Dict, Any
import json
import os
import psutil
import statistics
import argparse
import logging
from contextlib import contextmanager
from collections import defaultdict

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

class DBConnectionPool:
    def __init__(self, db_params: dict, min_conn: int, max_conn: int):
        self.pool = pool.ThreadedConnectionPool(min_conn, max_conn, **db_params)

    @contextmanager
    def get_connection(self):
        conn = self.pool.getconn()
        try:
            yield conn
        finally:
            self.pool.putconn(conn)

    def close_all(self):
        self.pool.closeall()

class IncrementalStatistics:
    def __init__(self):
        self.count = 0
        self.mean = 0
        self.M2 = 0
        self.min = float('inf')
        self.max = float('-inf')
        self.sorted_data = []

    def update(self, value):
        self.count += 1
        delta = value - self.mean
        self.mean += delta / self.count
        delta2 = value - self.mean
        self.M2 += delta * delta2
        self.min = min(self.min, value)
        self.max = max(self.max, value)
        self.sorted_data.append(value)

    def get_stats(self):
        self.sorted_data.sort()
        return {
            'count': self.count,
            'mean': self.mean,
            'std_dev': (self.M2 / (self.count - 1)) ** 0.5 if self.count > 1 else 0,
            'min': self.min,
            'max': self.max,
            'median': self.sorted_data[self.count // 2] if self.count > 0 else None,
            '95th_percentile': self.sorted_data[int(0.95 * self.count)] if self.count > 0 else None,
            '99th_percentile': self.sorted_data[int(0.99 * self.count)] if self.count > 0 else None
        }

class ResultsManager:
    def __init__(self, base_filename: str):
        self.base_filename = base_filename

    def save_scenario_result(self, scenario: Dict[str, Any], result: Dict[str, Any]):
        filename = f"{self.base_filename}_{scenario['thread_count']}_{scenario['seq_count']}.json"
        with open(filename, 'w') as f:
            json.dump({'scenario': scenario, 'result': result}, f, indent=2)

    def load_all_results(self) -> List[Dict[str, Any]]:
        results = []
        for filename in os.listdir():
            if filename.startswith(self.base_filename) and filename.endswith('.json'):
                with open(filename, 'r') as f:
                    results.append(json.load(f))
        return results

async def run_benchmark_scenario(db_params: Dict[str, Any], scenario: Dict[str, Any], duration: int, warmup: int) -> Dict[str, Any]:
    thread_count = scenario['thread_count']
    seq_count = scenario['seq_count']

    db_connection_pool = DBConnectionPool(db_params, min_conn=thread_count, max_conn=thread_count*2)

    stats = IncrementalStatistics()
    error_count = 0
    total_queries = 0

    async def run_query():
        nonlocal error_count, total_queries
        try:
            latency = await asyncio.to_thread(execute_query, db_connection_pool, seq_count)
            if latency is not None:
                stats.update(latency)
                total_queries += seq_count
            return True
        except Exception as e:
            logging.error(f"Error in query execution: {str(e)}")
            error_count += 1
            return False

    start_time = time.time()

    # Warmup phase
    warmup_end = start_time + warmup
    while time.time() < warmup_end:
        await asyncio.gather(*[run_query() for _ in range(thread_count)])

    # Reset statistics after warmup
    stats = IncrementalStatistics()
    error_count = 0
    total_queries = 0

    # Main benchmark phase
    benchmark_end = warmup_end + duration
    running_tasks = set()

    while time.time() < benchmark_end or running_tasks:
        # Start new tasks if we're still within the benchmark duration
        if time.time() < benchmark_end:
            new_tasks = [asyncio.create_task(run_query()) for _ in range(thread_count - len(running_tasks))]
            running_tasks.update(new_tasks)

        # Wait for completed tasks
        done, pending = await asyncio.wait(running_tasks, timeout=0.1, return_when=asyncio.FIRST_COMPLETED)
        running_tasks = pending

    actual_duration = time.time() - warmup_end

    db_connection_pool.close_all()

    final_stats = stats.get_stats()
    total_requests = final_stats['count'] + error_count
    request_throughput = total_requests / actual_duration
    query_throughput = total_queries / actual_duration
    error_rate = error_count / total_requests if total_requests > 0 else 0

    return {
        'median_latency': final_stats['median'],
        '95th_percentile_latency': final_stats['95th_percentile'],
        '99th_percentile_latency': final_stats['99th_percentile'],
        'request_throughput': request_throughput,
        'query_throughput': query_throughput,
        'error_rate': error_rate,
        'std_dev_latency': final_stats['std_dev'],
        'actual_duration': actual_duration,
    }

def execute_query(db_connection_pool: DBConnectionPool, seq_count: int) -> float:
    with db_connection_pool.get_connection() as conn:
        try:
            query = f"""
            SELECT ai.openai_chat_complete(
            _api_key=>'none'
            , _base_url => 'http://localhost:8001/v1'
            , _model=>'Qwen/Qwen2.5-0.5B-Instruct'
            , _max_tokens=>1
            , _messages=>jsonb_build_array
              ( jsonb_build_object('role', 'user', 'content', 'reply with `hello` and nothing else.')
              )
            ) FROM generate_series(1,{seq_count});
            """
            start_time = time.time()
            with conn.cursor() as cur:
                cur.execute(query)
                cur.fetchall()  # Ensure we fetch all results
            end_time = time.time()
            return end_time - start_time
        except Exception as e:
            logging.error(f"Query execution failed: {str(e)}")
            raise  # Re-raise the exception to be caught in run_query

async def monitor_resources(duration: int) -> Dict[str, List[float]]:
    resource_stats = {
        'cpu_usage': [],
        'memory_usage': [],
        'disk_read_bytes': [],
        'disk_write_bytes': [],
        'net_bytes_sent': [],
        'net_bytes_recv': [],
    }

    start_time = time.time()
    io_counters_start = psutil.disk_io_counters()
    net_io_counters_start = psutil.net_io_counters()

    while time.time() - start_time < duration:
        cpu_usage = psutil.cpu_percent()
        memory_usage = psutil.virtual_memory().percent
        io_counters = psutil.disk_io_counters()
        net_io_counters = psutil.net_io_counters()

        resource_stats['cpu_usage'].append(cpu_usage)
        resource_stats['memory_usage'].append(memory_usage)
        resource_stats['disk_read_bytes'].append(io_counters.read_bytes - io_counters_start.read_bytes)
        resource_stats['disk_write_bytes'].append(io_counters.write_bytes - io_counters_start.write_bytes)
        resource_stats['net_bytes_sent'].append(net_io_counters.bytes_sent - net_io_counters_start.bytes_sent)
        resource_stats['net_bytes_recv'].append(net_io_counters.bytes_recv - net_io_counters_start.bytes_recv)

        await asyncio.sleep(1)

    return resource_stats

async def run_single_benchmark(db_params: Dict[str, Any], scenario: Dict[str, Any], duration: int, warmup: int):
    benchmark_task = asyncio.create_task(run_benchmark_scenario(db_params, scenario, duration, warmup))
    monitor_task = asyncio.create_task(monitor_resources(duration + warmup))

    benchmark_result, resource_usage = await asyncio.gather(benchmark_task, monitor_task)

    return {**benchmark_result, 'resource_usage': resource_usage}

def plot_results(original_results: List[Dict[str, Any]], changed_results: List[Dict[str, Any]]):
    import matplotlib.pyplot as plt
    import numpy as np
    from collections import defaultdict

    # Group results by sequential call count, then thread count
    scenarios = defaultdict(lambda: defaultdict(dict))
    for result in original_results + changed_results:
        seq_count = result['scenario']['seq_count']
        thread_count = result['scenario']['thread_count']
        version = 'original' if result in original_results else 'changed'
        scenarios[seq_count][thread_count][version] = result['result']

    # Metrics to plot
    metrics = [
        ('request_throughput', 'Request Throughput (requests/s)'),
        ('query_throughput', 'Query Throughput (queries/s)'),
        ('median_latency', 'Median Latency (s)'),
        ('95th_percentile_latency', '95th Percentile Latency (s)'),
        ('99th_percentile_latency', '99th Percentile Latency (s)'),
        ('avg_cpu_usage', 'Average CPU Usage (%)')
    ]

    # Set up the plot grid
    fig, axs = plt.subplots(len(metrics), 1, figsize=(12, 6 * len(metrics)), squeeze=False)

    # Sort scenarios by seq_count and thread_count
    sorted_scenarios = sorted(scenarios.items(), key=lambda x: x[0])

    # Calculate total number of bar groups
    total_groups = sum(len(thread_data) for _, thread_data in sorted_scenarios)

    # Calculate appropriate bar width
    bar_width = 0.8 / 2  # 0.8 to leave some space between groups, divided by 2 for original and changed bars

    for i, (metric, metric_label) in enumerate(metrics):
        ax = axs[i, 0]
        x = np.arange(total_groups)

        original_values = []
        changed_values = []
        labels = []

        for seq_count, thread_data in sorted_scenarios:
            sorted_thread_data = sorted(thread_data.items(), key=lambda x: x[0])
            for thread_count, data in sorted_thread_data:
                if metric == 'avg_cpu_usage':
                    original_value = statistics.mean(data.get('original', {}).get('resource_usage', {}).get('cpu_usage', [0]))
                    changed_value = statistics.mean(data.get('changed', {}).get('resource_usage', {}).get('cpu_usage', [0]))
                else:
                    original_value = data.get('original', {}).get(metric, 0)
                    changed_value = data.get('changed', {}).get(metric, 0)
                original_values.append(original_value)
                changed_values.append(changed_value)
                labels.append(f'S{seq_count}\nT{thread_count}')

        # Plot bars
        ax.bar(x - bar_width/2, original_values, bar_width, label='Original', color='skyblue')
        ax.bar(x + bar_width/2, changed_values, bar_width, label='Changed', color='orange')

        # Add percentage change labels
        for j, (original, changed) in enumerate(zip(original_values, changed_values)):
            if original != 0 and changed != 0:
                pct_change = ((changed - original) / original) * 100
                color = 'green' if pct_change >= 0 else 'red'
                ax.text(j, max(original, changed), f'{pct_change:.1f}%',
                        ha='center', va='bottom', color=color, fontweight='bold', fontsize=8, rotation=90)

        # Customize the plot
        ax.set_ylabel(metric_label)
        ax.set_title(f'{metric_label}')
        ax.set_xticks(x)
        ax.set_xticklabels(labels, rotation=45, ha='right')
        ax.legend()
        ax.grid(True, axis='y', linestyle='--', alpha=0.7)

        # Set y-axis to start from 0
        ax.set_ylim(bottom=0)

        # Add a bit more space at the top for percentage labels
        y_top = ax.get_ylim()[1]
        ax.set_ylim(top=y_top * 1.1)

    plt.tight_layout()
    plt.savefig('pgai_benchmark_results.png', dpi=300, bbox_inches='tight')
    plt.close()

async def main():
    parser = argparse.ArgumentParser(description='PGAI Benchmark Script')
    parser.add_argument('--db', help='Database name')
    parser.add_argument('--user', help='Database user')
    parser.add_argument('--password', help='Database password')
    parser.add_argument('--host', help='Database host')
    parser.add_argument('--port', help='Database port')
    parser.add_argument('--duration', type=int, default=60, help='Duration of each benchmark run in seconds')
    parser.add_argument('--warmup', type=int, default=5, help='Warmup duration in seconds')
    parser.add_argument('--threads', type=int, nargs='+', default=[1, 8], help='List of thread counts to test')
    parser.add_argument('--seq-counts', type=int, nargs='+', default=[1, 5, 15], help='List of sequential call counts to test')
    args = parser.parse_args()

    db_params = {
        'dbname': args.db,
        'user': args.user,
        'password': args.password,
        'host': args.host,
        'port': args.port
    }

    scenarios = [
        {'thread_count': t, 'seq_count': s}
        for t in args.threads
        for s in args.seq_counts
    ]

    original_results = ResultsManager('original_results')
    changed_results = ResultsManager('changed_results')

    # Run benchmarks for original PGAI
    logging.info("Running benchmarks for original PGAI...")
    for scenario in scenarios:
        logging.info(f"Running scenario: threads={scenario['thread_count']}, seq_count={scenario['seq_count']}")
        result = await run_single_benchmark(db_params, scenario, args.duration, args.warmup)
        original_results.save_scenario_result(scenario, result)

    # Prompt user to make changes to PGAI
    input("Please make your changes to PGAI and press Enter to continue...")

    # Run benchmarks for changed PGAI
    logging.info("Running benchmarks for changed PGAI...")
    for scenario in scenarios:
        logging.info(f"Running scenario: threads={scenario['thread_count']}, seq_count={scenario['seq_count']}")
        result = await run_single_benchmark(db_params, scenario, args.duration, args.warmup)
        changed_results.save_scenario_result(scenario, result)

    # Plot and compare results
    plot_results(original_results.load_all_results(), changed_results.load_all_results())
    logging.info("Benchmark complete. Results saved in 'pgai_benchmark_results.png'")

    # Log resource usage summary
    for result_set in [original_results.load_all_results(), changed_results.load_all_results()]:
        for result in result_set:
            scenario = result['scenario']
            resource_usage = result['result']['resource_usage']
            logging.info(f"Resource usage for scenario (threads={scenario['thread_count']}, seq_count={scenario['seq_count']}):")
            logging.info(f"  Average CPU usage: {statistics.mean(resource_usage['cpu_usage']):.2f}%")
            logging.info(f"  Max CPU usage: {max(resource_usage['cpu_usage']):.2f}%")
            logging.info(f"  Average memory usage: {statistics.mean(resource_usage['memory_usage']):.2f}%")
            logging.info(f"  Max memory usage: {max(resource_usage['memory_usage']):.2f}%")
            logging.info(f"  Total disk read: {resource_usage['disk_read_bytes'][-1] / 1024 / 1024:.2f} MB")
            logging.info(f"  Total disk write: {resource_usage['disk_write_bytes'][-1] / 1024 / 1024:.2f} MB")
            logging.info(f"  Total network sent: {resource_usage['net_bytes_sent'][-1] / 1024 / 1024:.2f} MB")
            logging.info(f"  Total network received: {resource_usage['net_bytes_recv'][-1] / 1024 / 1024:.2f} MB")

if __name__ == "__main__":
    asyncio.run(main())

Here is a mock api endpoint server so we can avoid the inference overhead in our benchmark:
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List, Optional

app = FastAPI()

class Message(BaseModel):
    role: str
    content: str

class ChatCompletionRequest(BaseModel):
    model: str
    messages: List[Message]
    temperature: Optional[float] = None
    top_p: Optional[float] = None
    n: Optional[int] = None
    stream: Optional[bool] = None
    stop: Optional[List[str]] = None
    max_tokens: Optional[int] = None
    presence_penalty: Optional[float] = None
    frequency_penalty: Optional[float] = None
    logit_bias: Optional[dict] = None
    user: Optional[str] = None

@app.post("/v1/chat/completions")
async def chat_completions(request: ChatCompletionRequest):
    # Return the constant response
    return {
        "id": "chat-aabeda70641c4c88ac523bddb544ad87",
        "model": "Qwen/Qwen2.5-0.5B-Instruct",
        "usage": {
            "total_tokens": 39,
            "prompt_tokens": 38,
            "completion_tokens": 1
        },
        "object": "chat.completion",
        "choices": [
            {
                "index": 0,
                "message": {
                    "role": "assistant",
                    "content": "hello",
                    "tool_calls": [],
                    "function_call": None
                },
                "logprobs": None,
                "stop_reason": None,
                "finish_reason": "length"
            }
        ],
        "created":<PHONE_NUMBER>,
        "prompt_logprobs": None,
        "system_fingerprint": None
    }

if __name__ == "__main__":
    import uvicorn
    uvicorn.run("benchmark_pgai_server:app", host="<IP_ADDRESS>", port=8001, workers=4)

So I spent way too much time benchmarking and digging into issues with the async client when in the plpython environment and outside of it.
There is a case to be made for overhead from the OpenAI wrapper for actually making the chat completion call.
The best I could get with using the OpenAI client was ~2.5-3ms per call for the chat completion endpoint.
With using aiohttp or httpx I was getting ~0.8-1.2ms.
I think that is reasonably acceptable, considering the overhead for re-creating the client on every call is ~20-30ms.
I am still having issues though. I am getting inconsistent performance inside the plpython environment. My first call to the endpoint is quick (3ms), and then every call after it is very delayed (40ms). Need to figure out what is happening here. I cannot reproduce outside of plpython.

Hey @Tostino can you open a PR with your changes so that we can review and discuss them?

@alejandrodnm Working on it...the rebase is a bit of a pain. Looks like you changed how the API keys were handled, so that's taking a bit for me to integrate.

Alright, open: https://github.com/timescale/pgai/pull/219
Keep in mind, this still has the unexplained 2nd run latency in this PR. I hadn't had a chance to dig into why.


Add fedora30 as a workload

Create a fedora30.yaml file
Signed-off-by: Gabi Beyer<EMAIL_ADDRESS>

Coverage decreased (-0.7%) to 68.241% when pulling 1208f9b6f5f2c9a8cf6dbaa22403a1fd2b55c581 on gabibeyer:fedora30 into 71ebec9299a977e6df17bdfa75b5391e2be3afd9 on intel:master.


Put deployment target back to 9?

We still need to support ios9.  I have moved the deployment target back to 9 in a branch and it appears to work fine.  Is there some reason this needs to be bumped up to 10 and is there any way we could leave it as compatable as possible?

I'm actually using both BlueSocket and BlueSSLService on iOS 9.3 with no issues. I'd really like to make a PR to both projects with change to iOS 9 target if @billabt would be open to it.

I’ll do some testing here and if it work out, I’ll make the change. Reopening so I don’t forget. 😉

I've been using myself:
https://github.com/IBM-Swift/BlueSocket/compare/master...mcfedr:signature-ios9
https://github.com/IBM-Swift/BlueSSLService/compare/master...mcfedr:ios9

Is this still needed?

Apparently not.  😉


OData error while running automationfx actions

Hi, I am running automationfx to answer the calls on ipcommunicator using python. I see this error while running the actions. Although the code and actions (script) successfully work on my laptop, but when I am trying to run the same thing on another system, I continue to see this error. Is this something to do with the API key , which i generated on the web app on the new system and Phoneview is working as well. Can someone help me with this.  It works for me now. This was a permission issue. Thanks.

Glad you got it working,
Take care


Statement.score clarification

the "score" may need to be better defined; the number is meaningless without further information, e.g. does this represent a log2-odds ratio? This was undoubtedly added in response to upcoming ACMG v4 guidelines, and would also support existing ClinGen/CGC/VICC guidelines for Oncogenicity. We need to provide guidance on how this score should be interpreted. It could be as simple as updating the description to indicate that the score must be interpreted in the context of the specifiedIn document.

I added text to this effect as part of my PR reviewing/updating class and attribute descriptions.  I also assume that profiles that use/extend the core score attribute can provide a more specific description for how to interpret its values in their profile specification.


No cast remote control notification when casting was started by pychromecast

A few months ago, google enabled so called "cast remote control notifications" on android devices. (https://support.google.com/chromecast/answer/7206638?hl=en)
In short: all android devices on the same network get an notification to control the chromecast when playing, even if they dont started the cast session by themselves. Which is very convenient because i can stop the stream from any device.
Dont know if its a bug or even related directly with pychromecast, but I dont get the remote control notifications on any of my android devices if the cast was started by a pychromecast script.
Besides that, casting works nicely and also the chromecast/home app on android shows the chromecast as playing.
In all other cases (started by android device - different apps - casting via chrome from same PC as pychromcast) the notification shows up on all my android devices.
Has someone else observed this? Any other idea what could cause the different behaviour?

The notifying seems to work on a Chromecast-app level. When iniatiating playback on the Youtube cc-app with this fork of pychromecast, the notification pops up on my android phone. So it would seem that the problem is caused by this not being implemented in the Default Media Receiver (as used by media_controller.play_media), and not because of pychromecast.

Thanks for the reply. I have looked a bit further into it and discovered that android applications using the DefaultMediaReceiver seem to trigger the notification as well:

I will try to investigate what are the differences in communication between that and pychromecast.

Same issue here.
Do you know if it affects all pychromecast users (incl. home-assistant & co), or if this can be related to local setup (dhcp, hostname, standard port, whatever)?


Remove checkBucket to allow Storage Object Admin role

Hi,
It's only works when services account have Storage Admin roles, but if you work in company with multiple bucket, and you allowcated a bucket with role Storage Object Admin, it's more security for another bucket in project right?
I think we should remove checkBucket function.
Thanks

Hi @Tuanpm31
checkBucket is a function than check if the bucket exist before uploading a file.
In the past, the plugin was creating bucket for you, but with latest Google Cloud Storage release, I've  prefered to remove this feature but keep the part "does the bucket exist yet ?".
Also, you are free to send us a PR with your request and explain your point of view :)
Thanks !

And... if have a option to check the bucket with default true? And maybe is not necessary to check on every upload but only on init function. What do you think about?

I will create a PR for both remove check bucket and allow uniform access control, because uniform access control is recommend by google cloud storage when you create a new bucket. And it's more secure.

Great!!!! :tada: show me the code.... :-D


Main Nav Parent Button Not Working With Dropdowns

Hello everyone. In my nav, when a button has a dropdown the main button does not work. It works without the dropdown. Can someone help me out. The direct link is http://roseninn.wsoa.biz/
Thank you!
Will

I do not believe you can trigger a dropdown or trigger the button. In bootstrap the button triggers opening the dropdown.
Personal support requests on how this could be changed should be directed to StackOverflow with the Twitter-bootstrap-3 tag.


microshift: Install weak deps when installing podman

podman requires a container runtime, and networking plugins to work.
They are only marked as Recommends/Suggests in podman's spec file, so we
need to ensure they get installed.
commit 14fdeea installs these explicitly, but podman's spec file
recommends crun and not runc, no idea if these are the same or not.
Better to rely on what podman .spec file provides rather than hardcoding
it.

/hold
Till we test it on a fresh RHEL-9.2 system for microshift bundle generation.

/cherry-pick release-4.14


feat: implement summaries

Utilises pystac.Summarizer.summarize() and a custome fields.json url to construct the summaries for Historical Imagery.

Should the LINZ stac_extensions be bumped to v0.0.12 or v0.0.13 to validate requiring summaries fields?


Add x64AlpineLinux and aarch64AlpineLinux for Dragonwell 11

We plan to add x64AlpineLinux and aarch64AlpineLinux on Dragonwell 11. (Now AdoptOpenJDK is building x64AlpineLinux hotspot in jdk16 and jdk17)

@joeyleeeeeee97 Building requires testing. Can you please open a machine request over at https://github.com/AdoptOpenJDK/openjdk-infrastructure? AFAIK we have one machine with static containers for x64. Two containers run Alpine, so they can be reused. For aarch64, nothing is available, especially with your special HW requirements.

only x64AlpineLinux supported now.

@joeyleeeeeee97 Do you know whether the Ampere Altra has the hardware capabilities you require?

@aahlenst I can confirm that it does :-) java -version is ok on one of the Altras which I've got as part of https://github.com/AdoptOpenJDK/openjdk-infrastructure/issues/2078 :-)
jenkins@test-equinix-ubuntu2004-armv8l-02:~/jdk-11.0.10+0-jre/bin$ ./java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (Alibaba Dragonwell) (build 11.0.10+0-202103241423)
OpenJDK 64-Bit Server VM (Alibaba Dragonwell) (build 11.0.10+0-202103241423, mixed mode)
jenkins@test-equinix-ubuntu2004-armv8l-02:~/jdk-11.0.10+0-jre/bin$

The Alpine Linux team is in the process of porting Alpine to the Ampere Altra arm64 servers, targeting the 3.13 release. This is new work (as of today?). @ncopa has been leading the way there.

Is this issue tracking aarch64AlpineLinux, i.e. arm64 architecture for Alpine or should I open a separate feature request for that?

Is this issue tracking aarch64AlpineLinux, i.e. arm64 architecture for Alpine or should I open a separate feature request for that?

Separate, this issue is with regards to DragonWell binaries from AliBaba.  Your request is actually best placed upstream at OpenjDK but would require engineers from one or multiple vendors to commit to the port.


SW infra tasks for LLK team

The infra tasks needed by LLK team, sorted in priority:

[ ] Bring up BH Versim simulation
[ ] Bring up CI for WH and BH Versim simulations – few tests, to be selected by LLK team
[ ] Help with VCS debug for BH in order to prepare for Quasar SOC

Milos
fyi @nvelickovicTT

Updating the issue based on sideband discussions:
from @vtangTT:

WH Versim CI pipeline has been merged to the gitlab repo (PR) and is currently running device init/teardown and load blank kernels as unit tests (DeviceInit/DeviceParamFixture.DeviceInitializeAndTeardown/* )
Should we pin the pipeline to use a specific metal SHA and bump it manually or just always pull main and see when/if it breaks?
What other tests does llk team want included in the pipeline?
For BH Versim bringup, I won’t be working starting next week as I’ll be focused on my final exams until December 21st.  For a smooth transition, I've done some more scoping to hand-off to the next person and outlined steps in this master issue:  https://yyz-gitlab.local.tenstorrent.com/tenstorrent/tt-metal/-/issues/7

Thanks @vtangTT for making this happen. The pipelines link is here: https://yyz-gitlab.local.tenstorrent.com/tenstorrent/tt-metal/-/pipelines
Few questions that I had:

how do we make sure that gitlab CI is run at some cadence on and displayed on GH pipelines page the infra team is using for monitoring. If this is not monitored, people will still break it often.
what is the process to add tests for this

fyi @nvelickovicTT, @amahmudTT
Milos

Not an expert in this issue, so I might be speaking from ignorance,  but could the GitHub and Gitlab CI work as if the gitlab repo is treated as our third party, like only during the CI tests it checks out a certain branch of the gitlab versim repo (just like a certain branch of third party is affiliated to tt-metal) and then runs the test, so this way if someone in tt-metal breaks it his/her tests don't pass. And something similar happens with Gitlab, it checks out a certain branch of tt-metal to test changes in gitlab ? This way one's test won't fail due to the mistakes made in the other.
As for tests we could test two parts. We would need a test that dumps its output. So we run the versim dump the versim file and check a previously saved versim file, since the simulation is deterministic, they should match. And as for the test output we dump to a file reload it in python and check with expected output may be ?
For example for a matmul. We check the result of the matmul by piping to a file and reloading it and at the same time we check the simulation  file that is the versim file with a previously saved one ? The test should be simple I think, the issue is probably syncing the gitlab and GitHub in a similar fashion we handle the third party libraries.

@bkeith-TT  to chat with @ttmtrajkovic


Updated settings labels to make them less confusing

Updates to some of the migration setting field captions and tooltips to make them less confusing.

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 10166.

Code was merged. Closing PR due to merge issues. Code will ship with 23.0.


Check for no_proxy environment variable and skip proxy if host is listed

This will fix #9989, #11603, #11751.
no_proxy is typically comma separated list of hosts and or domains. Matching must be from the end of the uri to accomodate whole domain and subdomain whitelisting.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Thanks for your pull request. The automated tests will run as soon as one of the admins verifies this change is ok for us to run on our infrastructure.

Jenkins: test this please

[trickle] No significant performance differences

[microbenchmarks] No significant performance differences

Jenkins: retest this please

[trickle] No significant performance differences

[microbenchmarks] No significant performance differences

Jenkins: test this please

[microbenchmarks] Performance differences noted:
Benchmark                                                              allocs_per_iteration    atm_add_per_iteration    atm_cas_per_iteration    locks_per_iteration
---------------------------------------------------------------------  ----------------------  -----------------------  -----------------------  ---------------------
BM_StreamingPingPongMsgs<MinInProcess, NoOpMutator, NoOpMutator>/16M                                                    -4%
BM_UnaryPingPong<MinInProcessCHTTP2, NoOpMutator, NoOpMutator>/0/128M  -7%                     -5%                      -21%                     -6%

[trickle] No significant performance differences

This looks great, and the tests are all passing, aside from known issue #10686.
Can you please squash your commits?  Once you do that, I'll merge.  Thanks!

Squashed.  Thanks @markdroth for your  comments and patience.

No problem.  Thanks for your contribution!


[Branch destination error on PR]

This PR is for a feature that is currently in progress in another fork, please disregard


404 errors on https://home-assistant.io/docs/ecosystem/

All of the Autostart pages under https://home-assistant.io/docs/ecosystem/ result in 404 not found errors:

autostart main page
systemd
upstart
init.d
macos
synology

issue was resolved with web site updates


Wordlist relief

The word relief is in the wordlist, but if you use it in the tool it you get the error 'invalid mnemonic'.

ability famous relief doesn't show an error for me, please provide more info.

I go to the following url: https://iancoleman.io/bip39/ - change the selection to 24 words - click generate - paste over any word with relief - i get the error invalid mnemonic - it does this in both chrome and brave.
But, if I do the same thing with a 3 word mnemonic, it works fine.

I should update the error to say 'invalid checksum'. The general error is not particularly helpful there!
Thanks for reporting.
Here's a snippet to paste into the browser dev tools that will generate a valid 24 word mnemonic containing the word relief:
M = new Mnemonic("english"); for (i =0; i<500; i++) { m = M.generate(256); if (m.indexOf("relief") > -1) { console.log(m); break }}

example output
knock salon picnic fever online essay scissors rookie cube surprise exchange buyer ripple little common hotel blast material bright payment relief two ranch barely

I sort of figured it out finally. I wanted to add my own bit of tweaks, so
id click generate several times and combine words from various
combinations. I ended up moving all 24 words to notepad and then copied
them in all at once.
Sorry, but thanks
On Aug 30, 2018 4:12 PM, "iancoleman"<EMAIL_ADDRESS>wrote:
You can't just replace a word randomly because the last words are a
checksum and this replacement will usually cause that checksum to become
invalid.
I should update the error to say 'invalid checksum'. The general error is
not particularly helpful there!
Thanks for reporting.
Here's a snippet to paste into the browser dev tools that will generate a
valid 24 word mnemonic containing the word relief:
M = new Mnemonic("english"); for (i =0; i<500; i++) { m =
M.generate(256); if (m.indexOf("relief") > -1) { console.log(m); break
}}
example output
knock salon picnic fever online essay scissors rookie cube surprise
exchange buyer ripple little common hotel blast material bright
payment relief two ranch barely
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/iancoleman/bip39/issues/247#issuecomment-417497105,
or mute
the thread
https://github.com/notifications/unsubscribe-auth/AKTkiDEKQqSRlP8-A4xccD6bh4RHabW5ks5uWHF5gaJpZM4WSrwf
.


Choose an attachement

I've implemented the flutter quill to my note-taking app, and I see that it can't add any files other than an image or a video like a pdf, docs, audio file, and so on. Is there any solution for this?
I've used this package for picking files: https://pub.dev/packages/file_picker

Please Submit a PR

What do you mean by PR?


Replace itemid 212 with 211 for CareVue heart rate is description of table d_items

itemid 211 corresponds to heart rate in carevue, but itemid 212 was listed instead.
This probably came about because itemid 211 has row_id 212 in d_items.

Yeah you're right thanks - I am always making this mistake!


Prefetch on listing pages on gallery view

People on slower internet may experience slow loads when they hit the next page.
Now it takes like 3-7second to load the next page of NFTs.
What will mitigate by this, user's slow internet, hitting the next page to have an immediate experience?
How it could be done? Probably prefetch 1-2 pages ahead, till the user will be clicking next.

Prefetch the first page from the gallery.
When going from https://nft.kodadot.xyz/ -> https://nft.kodadot.xyz/rmrk/gallery


fix: Apply num_args=0 when custom actions.

Fixes https://github.com/DanCardin/cappa/issues/40

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

8 of 8 (100.0%)  changed or added relevant lines in 3 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
1564

Relevant Lines:
1564

💛  - Coveralls


Documentation incorrect: With OkHttp3 you cannot add the interceptor by mutating the networkInterceptors() list.

The Stetho website says that you can add the Stetho network interceptor with a line such as
client.networkInterceptors().add(new StethoInterceptor());
However, this is not true because OkHttp3 is immutable and you have to use the Builder approach to add the interceptor. You will get the following exception if doing so:
java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableCollection.add(Collections.java:928)

This worked for me
new OkHttpClient.Builder()
    .addNetworkInterceptor(new StethoInterceptor())
    .build();

Here are my dependencies.
 compile 'com.squareup.okhttp3:okhttp:3.2.0'
 compile 'com.facebook.stetho:stetho:1.3.1'
 compile 'com.facebook.stetho:stetho-okhttp3:1.3.1'

My fault, forgot to update the website documentation for okhttp3.

...and then I failed to fix it :)

Oops, no I didn't.  It correctly calls out the different API choices between okhttp2 and 3 now :)


JSON missing two tests in v1.0.3

The JSON data is missing two tests in tag v1.0.3 .  See commit c58150e525423283fd57677bea3bd963f3937aeb.

Issue has been resolved in #119.


Fresh installation not possible "Invalid handler specified"

Before submitting a new issue

[x] I redownloaded the latest release and restarted Home Assistant
[x] I've checked known issues
[x] I've enabled debug logs and attached the relevant logs to this ticket

Problem description
I followed https://signalkraft.com/mypyllant-component/ both the manual and HACS approach, both with the same result/problem at step 4:
clicked ok "add integration" -> selected myVailant ->a loading window appeared ->  after a short loading time (~0.5sec) a window pops up:

I tried to check, whether the current 2024.11 version is tested with this integration, because the last release was last month
other info
HA Version:
Core 2024.11.3
Frontend 20241106.2
Deployed in "container" mode.
Same version as #241  but another different behaviour / error message
Logs
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun home-assistant (no readiness notification)
s6-rc: info: service legacy-services successfully started
2024-11-26 10:33:13.924 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2024-11-26 10:33:13.933 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration mypyllant which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2024-11-26 10:33:31.427 WARNING (MainThread) [homeassistant.components.switch] Setup of switch platform kostal_plenticore is taking over 10 seconds.
2024-11-26 10:33:35.501 ERROR (SyncWorker_2) [aiodhcpwatcher] Cannot watch for dhcp packets: [Errno 1] Operation not permitted
2024-11-26 10:35:41.220 ERROR (MainThread) [homeassistant.config_entries] Error occurred loading flow for integration mypyllant: No module named 'myPyllant'

edit: i enabled debug logging for all and extracted some myPyllant related here:
2024-11-26 13:47:25.788 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration mypyllant which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2024-11-26 13:47:32.206 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=update.myvaillant_update, old_state=None, new_state=<state update.myvaillant_update=off; auto_update=False, display_precision=0, installed_version=v0.8.22, in_progress=False, latest_version=v0.8.22, release_summary=None, release_url=https://github.com/signalkraft/mypyllant-component/releases/v0.8.22, skipped_version=None, title=None, update_percentage=None, entity_picture=https://brands.home-assistant.io/_/mypyllant/icon.png, friendly_name=MyVaillant update, supported_features=23 @ 2024-11-26T14:47:32.206240+01:00>>
2024-11-26 13:47:48.650 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_reported[L]: entity_id=update.myvaillant_update, old_last_reported=2024-11-26T14:47:32.206240+01:00, new_state=<state update.myvaillant_update=off; auto_update=False, display_precision=0, installed_version=v0.8.22, in_progress=False, latest_version=v0.8.22, release_summary=None, release_url=https://github.com/signalkraft/mypyllant-component/releases/v0.8.22, skipped_version=None, title=None, update_percentage=None, entity_picture=https://brands.home-assistant.io/_/mypyllant/icon.png, friendly_name=MyVaillant update, supported_features=23 @ 2024-11-26T14:47:32.206240+01:00>>
2024-11-26 13:47:48.805 DEBUG (Recorder) [homeassistant.components.recorder.core] Processing task: <Event state_changed[L]: entity_id=update.myvaillant_update, old_state=None, new_state=<state update.myvaillant_update=off; auto_update=False, display_precision=0, installed_version=v0.8.22, in_progress=False, latest_version=v0.8.22, release_summary=None, release_url=https://github.com/signalkraft/mypyllant-component/releases/v0.8.22, skipped_version=None, title=None, update_percentage=None, entity_picture=https://brands.home-assistant.io/_/mypyllant/icon.png, friendly_name=MyVaillant update, supported_features=23 @ 2024-11-26T14:47:32.206240+01:00>>
2024-11-26 13:48:10.457 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [140430686023552] robin from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Home Assistant/2024.9.2 (io.robbie.HomeAssistant; build:2024.881; macOS 15.1.1) Mobile/HomeAssistant, like Safari): Received {'type': 'manifest/get', 'integration': 'mypyllant', 'id': 56}
2024-11-26 13:48:10.458 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [140430686023552] robin from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Home Assistant/2024.9.2 (io.robbie.HomeAssistant; build:2024.881; macOS 15.1.1) Mobile/HomeAssistant, like Safari): Sending b'{"id":56,"type":"result","success":true,"result":{"domain":"mypyllant","name":"myVAILLANT","codeowners":["@signalkraft"],"config_flow":true,"documentation":"https://github.com/signalkraft/mypyllant-component#readme","integration_type":"hub","iot_class":"cloud_polling","issue_tracker":"https://github.com/signalkraft/mypyllant-component/issues","requirements":["myPyllant==0.8.36"],"version":"v0.8.22","is_built_in":false,"overwrites_built_in":false}}'
2024-11-26 13:48:10.503 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [140430686023552] robin from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Home Assistant/2024.9.2 (io.robbie.HomeAssistant; build:2024.881; macOS 15.1.1) Mobile/HomeAssistant, like Safari): Received {'type': 'frontend/get_translations', 'language': 'de', 'category': 'config', 'integration': ['mypyllant'], 'id': 57}
2024-11-26 13:48:10.503 DEBUG (MainThread) [homeassistant.helpers.translation] Cache miss for de: {'mypyllant'}
2024-11-26 13:48:10.503 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [140430686023552] robin from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Home Assistant/2024.9.2 (io.robbie.HomeAssistant; build:2024.881; macOS 15.1.1) Mobile/HomeAssistant, like Safari): Received {'type': 'frontend/get_translations', 'language': 'de', 'category': 'selector', 'integration': ['mypyllant'], 'id': 58}
2024-11-26 13:48:10.503 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [140430686023552] robin from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Home Assistant/2024.9.2 (io.robbie.HomeAssistant; build:2024.881; macOS 15.1.1) Mobile/HomeAssistant, like Safari): Received {'type': 'frontend/get_translations', 'language': 'de', 'category': 'title', 'integration': ['mypyllant'], 'id': 59}
2024-11-26 13:48:10.522 DEBUG (MainThread) [homeassistant.components.websocket_api.http.connection] [140430686023552] robin from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Home Assistant/2024.9.2 (io.robbie.HomeAssistant; build:2024.881; macOS 15.1.1) Mobile/HomeAssistant, like Safari): Sending b'[{"id":57,"type":"result","success":true,"result":{"resources":{"component.mypyllant.config.step.user.data.password":"Passwort","component.mypyllant.config.step.user.data.username":"Benutzername","component.mypyllant.config.step.user.data.country":"Land","component.mypyllant.config.step.user.data.brand":"Hersteller","component.mypyllant.config.step.user.title":"Login Information","component.mypyllant.config.step.user.description":"Aus der myVAILLANT App","component.mypyllant.config.error.login_endpoint_invalid":"Kein Login m\xc3\xb6glich mit diesem Land und Hersteller","component.mypyllant.config.error.realm_invalid":"F\xc3\xbcr diesen Hersteller wird ein Land ben\xc3\xb6tigt","component.mypyllant.config.error.authentication_failed":"Login fehlgeschlagen, stimmen Benutzername & Passwort?","component.mypyllant.config.error.unknown":"Unerwarteter Fehler, siehe Logs"}}},{"id":58,"type":"result","success":true,"result":{"resources":{}}},{"id":59,"type":"result","success":true,"result":{"resources":{"component.mypyllant.title":"myVAILLANT"}}}]'
2024-11-26 13:48:12.114 DEBUG (MainThread) [homeassistant.loader] Importing platforms for mypyllant executor=['config_flow'] loop=[] took 0.01s
2024-11-26 13:48:12.114 ERROR (MainThread) [homeassistant.config_entries] Error occurred loading flow for integration mypyllant: No module named 'myPyllant'

okay I found the root cause:
on startup, HA is installing the dependencies into /config/deps, but in a docker/container environment this folder is not inside the python path.
this is also discussed here:
https://github.com/home-assistant/core/issues/127966


Build failure: home-manager problem with gtk settings

Steps To Reproduce
  home-manager.users.vo7.gtk.enable = true;
  home-manager.users.vo7.gtk.gtk3.extraConfig.gtk-application-prefer-light-theme = "1";
  home-manager.users.vo7.gtk.gtk4.extraConfig.gtk-application-prefer-light-theme = "1";

Build log
[vo7@87a9f8f3b6a231:~] sudo nixos-rebuild switch
building Nix...
building the system configuration...
activating the configuration...
setting up /etc...
reloading user units for vo7...
restarting sysinit-reactivation.target
warning: the following units failed: home-manager-vo7.service

× home-manager-vo7.service - Home Manager environment for vo7
     Loaded: loaded (/etc/systemd/system/home-manager-vo7.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Thu 2024-08-29 17:28:14 CEST; 152ms ago
 Invocation: 12a5ee0af7974c2bb43eeee1e08623fe
    Process: 4003 ExecStart=/nix/store/sjk40sk2njkfaf3ar66sr8kx5qy3imxk-hm-setup-env /nix/store/wickjfjiifaala3hqxd427cg2048hbp4-home-manager-generation (code=exited, status=1/FAILURE)
   Main PID: 4003 (code=exited, status=1/FAILURE)
         IP: 0B in, 0B out
   Mem peak: 5.8M
        CPU: 171ms

sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]: Please do one of the following:
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]: - Move or remove the above files and try again.
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]: - In standalone mode, use 'home-manager switch -b backup' to back up
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]:   files automatically.
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]: - When used as a NixOS or nix-darwin module, set
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]:     'home-manager.backupFileExtension'
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]:   to, for example, 'backup' and rebuild.
sie 29 17:28:14 87a9f8f3b6a231 systemd[1]: home-manager-vo7.service: Main process exited, code=exited, status=1/FAILURE
sie 29 17:28:14 87a9f8f3b6a231 systemd[1]: home-manager-vo7.service: Failed with result 'exit-code'.
sie 29 17:28:14 87a9f8f3b6a231 systemd[1]: Failed to start Home Manager environment for vo7.
warning: error(s) occurred while switching to the new configuration
[vo7@87a9f8f3b6a231:~] systemctl status home-manager-vo7.service
× home-manager-vo7.service - Home Manager environment for vo7
     Loaded: loaded (/etc/systemd/system/home-manager-vo7.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Thu 2024-08-29 17:28:14 CEST; 11s ago
 Invocation: 12a5ee0af7974c2bb43eeee1e08623fe
    Process: 4003 ExecStart=/nix/store/sjk40sk2njkfaf3ar66sr8kx5qy3imxk-hm-setup-env /nix/store/wickjfjiifaala3hqxd427cg2048hbp4-home-manager-generation (code=exited, status=1/FAILURE)
   Main PID: 4003 (code=exited, status=1/FAILURE)
         IP: 0B in, 0B out
   Mem peak: 5.8M
        CPU: 171ms

sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]: Please do one of the following:
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]: - Move or remove the above files and try again.
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]: - In standalone mode, use 'home-manager switch -b backup' to back up
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]:   files automatically.
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]: - When used as a NixOS or nix-darwin module, set
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]:     'home-manager.backupFileExtension'
sie 29 17:28:14 87a9f8f3b6a231 hm-activate-vo7[4078]:   to, for example, 'backup' and rebuild.
sie 29 17:28:14 87a9f8f3b6a231 systemd[1]: home-manager-vo7.service: Main process exited, code=exited, status=1/FAILURE
sie 29 17:28:14 87a9f8f3b6a231 systemd[1]: home-manager-vo7.service: Failed with result 'exit-code'.
sie 29 17:28:14 87a9f8f3b6a231 systemd[1]: Failed to start Home Manager environment for vo7.
[vo7@87a9f8f3b6a231:~] systemctl restart home-manager-vo7.service
Job for home-manager-vo7.service failed because the control process exited with error code.
See "systemctl status home-manager-vo7.service" and "journalctl -xeu home-manager-vo7.service" for details.
[vo7@87a9f8f3b6a231:~] journalctl -xeu home-manager-vo7.service
░░ Subject: A start job for unit home-manager-vo7.service has failed
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░
░░ A start job for unit home-manager-vo7.service has finished with a failure.
░░
░░ The job identifier is 4460 and the job result is failed.
sie 29 17:28:33 87a9f8f3b6a231 systemd[1]: Starting Home Manager environment for vo7...
░░ Subject: A start job for unit home-manager-vo7.service has begun execution
░░ Defined-By: systemd
░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
░░
░░ A start job for unit home-manager-vo7.service has begun execution.
░░
░░ The job identifier is 4906.
sie 29 17:28:33 87a9f8f3b6a231 hm-activate-vo7[4199]: Starting Home Manager activation
sie 29 17:28:33 87a9f8f3b6a231 hm-activate-vo7[4199]: Activating checkFilesChanged
sie 29 17:28:33 87a9f8f3b6a231 hm-activate-vo7[4199]: Activating checkLinkTargets
**sie 29 17:28:33 87a9f8f3b6a231 hm-activate-vo7[4222]: Existing file '/home/vo7/.config/gtk-4.0/settings.ini' is in the way of '/nix/store/n7940bc89z3nrl5rzdcmny1a54kvq00s-home-manager-files>
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]: Existing file '/home/vo7/.config/gtk-3.0/settings.ini' is in the way of '/nix/store/n7940bc89z3nrl5rzdcmny1a54kvq00s-home-manager-files>**
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]: Please do one of the following:
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]: - Move or remove the above files and try again.
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]: - In standalone mode, use 'home-manager switch -b backup' to back up
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]:   files automatically.
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]: - When used as a NixOS or nix-darwin module, set
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]:     'home-manager.backupFileExtension'
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]:   to, for example, 'backup' and rebuild.
sie 29 17:28:34 87a9f8f3b6a231 systemd[1]: home-manager-vo7.service: Main process exited, code=exited, status=1/FAILURE

Metadata
Please run nix-shell -p nix-info --run "nix-info -m" and paste the result.
[vo7@87a9f8f3b6a231:~] nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 6.6.47, NixOS, 24.11 (Vicuna), 24.11pre671089.d0e1602ddde6`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.18.5`
 - channels(root): `"nixos"`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`

**sie 29 17:28:33 87a9f8f3b6a231 hm-activate-vo7[4222]: Existing file '/home/vo7/.config/gtk-4.0/settings.ini' is in the way of '/nix/store/n7940bc89z3nrl5rzdcmny1a54kvq00s-home-manager-files>
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]: Existing file '/home/vo7/.config/gtk-3.0/settings.ini' is in the way of '/nix/store/n7940bc89z3nrl5rzdcmny1a54kvq00s-home-manager-files>**

You will need to move or remove these two files before rebuilding your home-manager configuration.
Also, issues with home-manager should be reported on their tracker.

**sie 29 17:28:33 87a9f8f3b6a231 hm-activate-vo7[4222]: Existing file '/home/vo7/.config/gtk-4.0/settings.ini' is in the way of '/nix/store/n7940bc89z3nrl5rzdcmny1a54kvq00s-home-manager-files>
sie 29 17:28:34 87a9f8f3b6a231 hm-activate-vo7[4222]: Existing file '/home/vo7/.config/gtk-3.0/settings.ini' is in the way of '/nix/store/n7940bc89z3nrl5rzdcmny1a54kvq00s-home-manager-files>**

You will need to move or remove these two files before rebuilding your home-manager configuration.
Also, issues with home-manager should be reported on their tracker.

I know I commented this lines, where is their tracker,? is it possible to route this issue to their tracker?

That would be at https://github.com/nix-community/home-manager/issues
But do know that your issue is not a bug, it is an expected behavior, home-manager will not override existing files.


Fix typo in the FAQ docs

@aaugustin thanks for a great library! I just noticed a tiny typo in one of the docs and thought I'd send over a correction :)

Thank you!


RHIDP-1820: Update and reorganize RHDH installation content

Resolves Epic RHIDP-1820 containing the following issues:

RHIDP-1724
RHIDP-1725
RHIDP-1747
RHIDP-1819

Overall, these changes inform the user about where and how RHDH can be installed in Getting Started and links to more detailed information in Administration, which is currently the sole source for all RHDH installation-related procedures for all user roles. This a short-term solution until an Installing RHDH title is created (RHIDP-1804).
Other changes include the creation and application of product and brand attributes and copyedits to existing content to align with CCS best practices.

@linfraze : could you please say if it is expected that https://redhat-developer.github.io/red-hat-developers-documentation-rhdh/pr-135/installation-rhdh/ shows the message

Unresolved directive in master.adoc - include::installation/assembly-install-rhdh-openshift.adoc[leveloffset=+1]

I have gotten to the link from the comment https://github.com/redhat-developer/red-hat-developers-documentation-rhdh/pull/135#issuecomment-2030365102

LGTM

related change that might need to be refactored after this https://github.com/redhat-developer/red-hat-developers-documentation-rhdh/pull/105

/approve

/cherrypick 1.1.x

/cherrypick rhdh-1.0

Do we need to reorg the 1.0 docs? they'll be EOL in 10 weeks when 1.2 is out.

@nickboldt I did a manual cherrypick to 1.1.x but will not cherrypick to 1.0; it's too structurally different. GTK about the EOL plans and timeline!

GTK about the EOL plans and timeline!

every release has 3mo of full support and 6mo of maintenance.
https://access.redhat.com/support/policy/updates/developerhub


Fixing TCUI sample

@jasonsandlin,
Thanks for your contribution as a Microsoft full-time employee or intern. You do not need to sign a CLA.
Thanks,
Microsoft Pull Request Bot


Continuous Suggestions

Is there any way to suggest continuously. this suggests only once at start

@bawantha https://github.com/felixlucien/flutter-autocomplete-textfield/issues/73#issuecomment-698172412


Create 3DMath.js

Adds an assortment of blocks for people who want to make sprite 3d games or do some 3d math.

Got bored waiting for pen+ and sensing+ to be pulled.

Laugh at this user they failed eslint

Laugh at this user they failed eslint

Shush penguin

ROFL! This user failed eslint AGAIN!

ROFL!

Paper

is the variable being this long intentional?
for reference, all I did was set the variable to the camera position.

could you send me the project?

Fixed
On Wed, Jul 26, 2023, 4:02 PM NexusKitten @.***> wrote:

[image: image]
https://user-images.githubusercontent.com/127152751/256350800-054a8117-aec0-4c78-be97-bead020bb48d.png
is the variable being this long intentional?
for reference, all I did was set the variable to the camera position.
—
Reply to this email directly, view it on GitHub
https://github.com/TurboWarp/extensions/pull/779#issuecomment-1652416499,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ASKLQSICKGVHV4TOPOEYRBDXSFZWNANCNFSM6AAAAAA2X5ZVVM
.
You are receiving this because you authored the thread.Message ID:
@.***>

Also please don't forget pen+ v6

ROFL! This user failed eslint AGAIN!

This is on topic

ROFL! This user failed eslint AGAIN!

This is on topic

It really isn't

ROFL! This user failed eslint AGAIN!

This is on topic

Are you ok lol

Yeah
On Fri, Jul 28, 2023, 7:19 AM BlueDome @.***> wrote:

ROFL! This user failed eslint AGAIN! [image: image]
https://user-images.githubusercontent.com/127152751/256126059-c51b9125-acf5-46a0-9207-f983c74eb492.png
This is on topic
Are you ok lol
—
Reply to this email directly, view it on GitHub
https://github.com/TurboWarp/extensions/pull/779#issuecomment-1655516857,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ASKLQSJBNXSPYHGJWFGDHBTXSON5DANCNFSM6AAAAAA2X5ZVVM
.
You are receiving this because you authored the thread.Message ID:
@.***>

What happened here?

What happened here?

absolutely nothing for 2 months straight

The extension received a second review that was never acted upon for 2 months

The extension received a second review that was never acted upon for 2 months

I've updated it to use some features exclusively available on penguinmod so its no longer possible to be on turbowarp and hence I never updated this version.


The behavior of training stage and inference stage

Hi, I want to ask that the behavior of training stage and inference stage. Since the paper illustrate the behavior of training stage, however, the inference stage did not mentioned. Is the inference stage still perform token selection, slow-fast updating and global class attention evolution? Thanks!

Yes, the  inference stage still perform the whole process including token selection, slow-fast updating and global class attention evolution.

OK, thanks for your reply


Dark mode enhancements

See https://github.com/silverstripe/silverstripe-mfa/pull/246

I think @Cheddam's work is superseding this


to-do: Do a PR to your own repository.

Directions:
Make two branches:
- Main
- branch_name
Commit and push to the branch_name / not_main branch and then come here on Github and open a Pull Request to the main branch.
Don't merge it.
Make us a contributor to this repository i.e @PBJI and @NitkarshChourasia
Go to the settings of the repository and keep it set to at least one reviews before merging settings.

Note: You will have to push every instance of your program in to the repository. Indeed, and respectively.

I agress with @NitkarshChourasia suggestion's.


Example Code Doesn't work if changed to Radial-Gauge

I'm trying to create a GUI with this module in Angular and want a radial-gauge. I tried the example code and it worked with the linear-gauge. But when I try to change it to a radial gauge, the radial gauge shows up but the value doesn't update (the value does update for the linear-gauge example)
Anyone have working code for a radial gauge that updates its value based on some value in the AppComponent class, like in the example?

<radial-gauge
width="300"
height="300"
units="Km/h"
title="false"
[attr.value]="value"
min-value="0"
max-value="180"
major-ticks="0,20,40,60,80,100,120,140,160,180"
minor-ticks="2"
stroke-ticks="false"
highlights='[{ "from": 0, "to": 100, "color": "rgba(0,0,0,.15)" },
{ "from": 140, "to": 180, "color": "rgba(169,11,11,1)" }]'
color-plate="#222"
color-major-ticks="#f5f5f5"
color-minor-ticks="#ddd"
color-title="#fff"
color-units="#ccc"
color-numbers="#eee"
color-value-box-rect="rgba(255, 255, 255, 0)"
color-value-box-rect-end="rgba(255, 255, 255, 0)"
color-value-box-background="rgba(255, 255, 255, 0)"
color-value-text-shadow="false"
font-value-size="50"
color-value-text="#fff"
color-value-box-shadow="false"
color-needle-start="rgba(240, 128, 128, 1)"
color-needle-end="rgba(255, 160, 122, .9)"
border-shadow-width="0"
border-inner-width="0"
border-middle-width="0"
value-box="true"
value-int="1"
value-dec="0"
animation-rule="dequint"
animation-duration="500"
font-value-weight="400"
animated-value="true">


Updated to React 18 & @types/react 18

Checks

[X] Not a duplicate.
[X] Not a question, feature request, or anything other than a bug report directly related to React Splide. Use Discussions for these topics: https://github.com/Splidejs/splide/discussions

Version
0.7.4
Description
I was able to integrate your library successfully with React 17 &  @types/react 17 in a Nextjs project, but today I have updated to 18 version and the following issue started to appear during build, I believe is related to the fact that the children prop is not longer implicit.
Right now I not sure how to solve this issue, and any direction would be great.
Thanks.

Reproduction Link
No response
Steps to Reproduce

Any working project with React Splide
Update dependecies of react and types to 18.
...

Expected Behaviour
Have a successful build using typescript as if with React 17 version.

Can you try v0.7.5?

@NaotoshiFujita thanks using the new version fix this issue.
For anyone wondering about the releases versions you can find them in the npm.

It would be nice to have that info on the repo other than that thanks for the amazing work.


Unable to get property replace of undefined or null reference

I included the library (CrmFetchKit.Bundle.js) in my CRM instance as a web resource.  When I go to execute a query, I get the error "unable to get property replace of undefined or null reference" in line 5339.  This line seems to be giving me problems starting at 5340:
var escape = module.exports = function escape(string) {
return string.replace(/([&"<>'])/g, function(str, item) {
return escape.map[item];
})
Why isn't string defined?

Hello Jeff,
"string" is defines, see the parameters.
What version of the CrmFetchKit are you using, 3.2.0? All unit-test are find. Just post you code here an I will have a look.
Daniel

Completely my fault. string was undefined because the string that I was passing in wasn't getting set properly.
Works perfectly.  Thanks!


Upgrade to Transformers 4.28

What does this PR do?

This PR upgrades the repo to the recently released Transformers 4.28.
Before submitting

[ ] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).
[ ] Did you make sure to update the documentation with your changes?
[x] Did you write any new necessary tests?

The docs for this PR live here. All of your documentation changes will be reflected on that endpoint.


⚠ Turnos 24x7 has degraded performance

In 95639b3, Turnos 24x7 (https://reservas-dev.alternativasinteligentes.com/) experienced degraded performance:

HTTP code: 200
Response time: 885 ms

Resolved: Turnos 24x7 performance has improved in adc8976.


Githubbin challenge

Nothing too special going on in this PR, I'm just continuing to port over each challenge from Git-it.

Hi Jessica! Looks like a fun project.

Hey @ssfinney! I'm pretty excited to have this exist on Electron, I think it will make it so much easier for folks. But definitely a lot of boxes to check to get it all strung up and working! :grinning:

Very cool! Can't wait to try it out. :smile:


chapter 2's introduction hackable French translation

In this context, the word "hackable" doesn't translate in "piratable" (which conveys the notion of illegal piracy). I believe that "modifiable" (i.e can be modified) is more appropriate.

The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update.


PB-7801: Add TC to verify deletion on backup objects in once retention is met

What this PR does / why we need it:

[x] Add func reconstructBackupNsMap()
[x] Add tc VerifyBackupDeletionWhenRetentionIsMet and DeleteVerifyBackupDeletionWhenRetentionIsMet please note it's a locked bucket test hence we need to two cases where the delete logic is in the second part.
[x] Add func IsAllVolumesBackupFull() to check if backup is a full backup or not
[x] Add func IsBackupPresent() to check if a backup is present or not.
[x] Add func GetRetentionTimeStamp() to fetch the value of the RetentionTimeStamp for the backup object
[x] Add func IsRetentionTimestampUpdated() to check if RetentionTimeStamp was updated or not
[x] Add func UpdateBackupWithLabel() to update the label for backup
[x] Move func triggerCleanup() to common.go and rename to TriggerCleanup()
[x] Update func CreateAzureCredentialsForImmutableBackupLocations() to send back UID and Names separately

Dashboard links:
Regression Run: https://aetos.pwx.purestorage.com/resultSet/testSetID/746035
VerifyBackupDeletionWhenRetentionIsMet Run:  https://aetos.pwx.purestorage.com/resultSet/testSetID/746182
DeleteVerifyBackupDeletionWhenRetentionIsMet Run:
Which issue(s) this PR fixes (optional)
Closes #PB-7801
Special notes for your reviewer:

Closing pull request as it's moved to internal repo


"Windows Server containers in Kubernetes limitations" Link Is 404

The link for "Windows Server containers in Kubernetes limitations." to https://kubernetes.io/docs/setup/windows/ results in a 404. Perhaps https://kubernetes.io/docs/setup/production-environment/windows/ is the correct link?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 1297e121-7cf0-63c1-99b3-87a85d80945b
Version Independent ID: 39513a07-3c13-5117-47ca-1d2298653e6b
Content: Limitations for Windows Server node pools in Azure Kubernetes Service (AKS)
Content Source: articles/aks/windows-node-limitations.md
Service: container-service
GitHub Login: @TylerMSFT
Microsoft Alias: twhitney

@mikaelsnavy , Thanks for raising the issue. We will investigate and update you.

@mikaelsnavy thanks for pointing this out. The correct link is
https://docs.microsoft.com/en-us/azure/aks/windows-node-limitations
I have corrected the document. Once the PR merges the changes will go live after a few hours.


[4.2][stdlib] Fix AnyHashable's Equatable/Hashable conformance

(Cherry-picked from #17396, removing support for single-shot hashing.)
AnyHashable has a few corner cases where it's not correctly conforming to Equatable and Hashable. This breaks Set and Dictionary invariants and can cause unexpected behavior and/or traps.
This change modifies AnyHashable to fix these cases. It is relatively important to fix this now, because to complete SE-0206, we need to switch integers to type-dependent hashing, and that exacerbates the issue. (The hashing change is also included in this PR.)

Fix transitivity of ==. Previously, comparisons involving AnyHashable values with Objective-C provenance were handled specially, breaking Equatable:
let a = (42 as Int as AnyHashable)
let b = (42 as NSNumber as AnyHashable)
let c = (42 as Double as AnyHashable)
a == b // true
b == c // true
a == c // was false(!), now true

let d = ("foo" as AnyHashable)
let e = ("foo" as NSString as AnyHashable)
let f = ("foo" as NSString as NSAttributedStringKey as AnyHashable)
d == e // true
e == f // true
d == f // was false(!), now true

Fix Hashable conformance for numeric types boxed into AnyHashable:
b == c // true
b.hashValue == c.hashValue // was false(!), now true

SE-0170 changed bridging of numeric types so that conversion to NSNumber loses information about the original type. Therefore, to ensure AnyHashable correctly conforms to Equatable, it must follow/emulate NSNumber's rules for equality. The same goes for _SwiftNewtypeWrapper types and NSString. To fix these, this PR defines custom AnyHashable boxes for all numeric types and newtypes. The custom box canonicalizes values that bridge to the same Objective-C representation so that they compare equal and hash the same way, independent of the original Swift type.
SE-0143 added conditional Hashable conformances for arrays, sets and dictionaries, so values of these collection types may themselves be converted to AnyHashable. These collections are also bridged to NSArray, NSSet and NSDictionary, respectively. Therefore, their AnyHashable forms must follow the rules of equality set out by Foundation. This added a number of new cases where Equatable/Hashable conformance is currently broken. For example:
let x: AnyHashable = [1, 2, 3] as [UInt8]
let y: AnyHashable = [1, 2, 3] as NSArray
let z: AnyHashable = [1, 2, 3] as [Double]

x == y // true
y == z // true
x == z // was false(!), now true

x.hashValue == y.hashValue // true
y.hashValue == z.hashValue // was false(!), now true
x.hashValue == z.hashValue // was false(!), now true

This PR fixes this by adding additional AnyHashable boxes for these three collection types. The boxes for sets and dictionaries aren't particularly efficient. However, they're internal to the stdlib, so we'll be able to change them later in a future release without breaking the ABI.
Additional changes:

Remove AnyHashable._usedCustomRepresentation. The provenance of a value should not affect its behavior.
Allow AnyHashable values to be downcasted into compatible types more often. Since equality implies that (1 as UInt8 as AnyHashable) must be substitutable with (1 as Double as AnyHashable), it follows that we should be able to successfully downcast either value to both types. (This is currently done by bridging to Objective-C and back, so it only works when the Objective-C runtime is available and Foundation is loaded.)
Forward _rawHashValue(seed:) to AnyHashable box. This fixes AnyHashable hashing for types that customize single-shot hashing.
Enable integer values of different types to produce different hashes, so that e.g. (1 as UInt8).hashValue will typically differ from (1 as UInt64).hashValue. This completes SE-0206 by feeding hasher only as many bytes as necessary to represent each type.(42 as UInt8).hashValue == (42 as Int).hashValue // was true, now false

https://bugs.swift.org/browse/SR-7496
rdar://problem/39648819

@swift-ci test

@swift-ci test source compatibility

Build failed
Swift Test Linux Platform
Git Sha - 3802b8c3c49e43f86368caa3fe32d0fa09f995f1

Build failed
Swift Test OS X Platform
Git Sha - 3802b8c3c49e43f86368caa3fe32d0fa09f995f1

@swift-ci test

@swift-ci test

@swift-ci please test

@swift-ci please test

Build failed
Swift Test Linux Platform
Git Sha - d193539117b566955349f1ee0dde6dbcc3860314

@swift-ci please test linux platform

Build failed
Swift Test Linux Platform
Git Sha - d193539117b566955349f1ee0dde6dbcc3860314

Hm, the Foundation failure seems unrelated.
@swift-ci clean test linux platform

@swift-ci please nominate


[decoupled-execution] Integration Part 4 - More tests

Add unit tests for ordering_state_computer and execution_phase.

Motivation
(Write your motivation for proposed changes here.)
Have you read the Contributing Guidelines on pull requests?
(Write your answer here.)
Test Plan
(Share your test plan here. If you changed code, please provide us with clear instructions for verifying that your changes work.)
Related PRs
(If this PR adds or changes functionality, please take some time to update or suggest changes to the docs at https://developers.diem.com, and link to your PR here.)
If targeting a release branch, please fill the below out as well

Justification and breaking nature (who does it affect? validators, full nodes, tooling, operators, AOS, etc.)
Comprehensive test results that demonstrate the fix working and not breaking existing workflows.
Why we must have it for V1 launch.
What workarounds and alternative we have if we do not push the PR.

/land


Helm version 2 is not anymore the right version to use

This page look outdated because Helm part is showing Helm 2 commands (commands with Tiller)
In the Github page (https://github.com/Azure/application-gateway-kubernetes-ingress/blob/master/docs/setup/install-new.md), an update has been done to reflect Helm 3 commands

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 95812617-2cee-fb2c-2c6d-573f222033be
Version Independent ID: bf51864f-646f-2fda-7842-b1f3cf2f9ce2
Content: Creating an ingress controller with a new Application Gateway
Content Source: articles/application-gateway/ingress-controller-install-new.md
Service: application-gateway
GitHub Login: @Caya
Microsoft Alias: caya

@squasta Thanks for the feedback! I have assigned the issue to the content author to evaluate and update as appropriate.

@squasta Either version of helm will work, it is up to you for which one you want to use.
We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.

helm init is no longer a valid command, https://github.com/helm/helm/issues/6996 .
how do i setup rbac without init? @TravisCragg-MSFT

@johannordin  You can use different versions of helm, in version 3.0 the helm init command is not needed, as is stated in the issue you linked.

Hi - @TravisCragg-MSFT - The documentation still refers to the HELM v2 commands - it would be very good to remove them, since it is not needed anymore

https://github.com/MicrosoftDocs/azure-docs/issues/65016

@johannordin You can use different versions of helm, in version 3.0 the helm init command is not needed, as is stated in the issue you linked.

@TravisCragg-MSFT -- any update on this?  see #65016  While there is indeed a workaround, the docs do need to be fixed.


Refactor structs into pkg and internal

Opted to generate api specs from the go structs rather than vice versa. This can be done in some future PR. We need to figure out how to properly have Islandora/Drupal share the event spec defined in this repo first.


Spawn Problems

I just build my first MCServer and in the world I generated, the only hostile mobs are creepers, and lots of them. I went into the world.ini and removed creepers from the animals list but now there are no hostile mobs spawning. Is this a common problem?

update: So I switched the game difficulty in the world.ini file to peaceful then tried to change it back in the in game command console, which didn't change it back. I changed it in the world.ini file but now I just have tons of skeletons spawning and nothing else.

Wow, that's weird. I haven't seen such behavior; but then I don't use the server on survival.

Same here.
A lot of creepers, no spiders, zombies or skelletons.
Build was made today from git-repository.

its definitely frustrating. Redstone contraptions such as powered rails don't work either.

Same issue here. Anybody aware of a work around or should monsters just be disabled?

Same here,
Downloaded Binary for Raspberry Pi last week.
Besides many mobs are spawning in the water (I'll do an extra Bugreport for that)

Yeah I sorta gave up on MCServer because of this. It makes survival no fun at all. Plus I figured out how to get spigot running solid on a RPi 2.

Send me an email<EMAIL_ADDRESS>on your Spigot details. I ran a Spigot
build and it was too laggy on my Pi 2. It's off topic though here so you
can send an email if you are kind and wish to :)
On Thu, Feb 19, 2015 at 1:53 PM, BlahBlahBlase<EMAIL_ADDRESS>wrote:

Yeah I sorta gave up on MCServer because of this. It makes survival no fun
at all. Plus I figured out how to get spigot running solid on a RPi 2.
--
Reply to this email directly or view it on GitHub
https://github.com/mc-server/MCServer/issues/1699#issuecomment-75101335.

--
God Bless,
Jonah Sabean
http://www.jsebean.com/

I believe I have fixed this, but it won't help with existing chunks, it will only affect newly spawned entities.

Awesome. Thank you much. Will be building now :P
On Fri, Feb 20, 2015 at 5:56 PM, Mattes D<EMAIL_ADDRESS>wrote:

I believe I have fixed this, but it won't help with existing chunks, it
will only affect newly spawned entities.
--
Reply to this email directly or view it on GitHub
https://github.com/mc-server/MCServer/issues/1699#issuecomment-75326495.

--
God Bless,
Jonah Sabean
http://www.jsebean.com/

Ok works, but now lots of monsters spawn.
I think there are different possibilities for different monster types to spawn. Is there something documented in original MC?
For example i had 2 enderman, 2 spiders and 4 zombies in the first minute!
All running after me, but not doing any harm?

Sorry but this is not a survival mode...

That would be the crude AI we have - it simply tells all nearby mobs to go to you no matter what.

But the wont attack? I thought they use to?
On Sat, Feb 21, 2015 at 9:14 AM, Mattes D<EMAIL_ADDRESS>wrote:

That would be the crude AI we have - it simply tells all nearby mobs to go
to you no matter what.
--
Reply to this email directly or view it on GitHub
https://github.com/mc-server/MCServer/issues/1699#issuecomment-75371171.

--
God Bless,
Jonah Sabean
http://www.jsebean.com/

The code for attacking is there, but doesn't produce very consistent results. If you stay close to the hostile mob/stay still, they should deal damage?

Unfortunatly they don't. Anyhow the behaviour ist strange.
For example you can see the spiders jumping at you, but they don't deal any damage.
Beside the jump lasts seconds and looks more like the spider is getting weightless for a few seconds.

So TLDR: the AI needs a lot of work :P
On Sat, Feb 21, 2015 at 1:32 PM, Knochi<EMAIL_ADDRESS>wrote:

Unfortunatly they don't. Anyhow the behaviour ist strange.
For example you can see the spiders jumping at you, but they don't deal
any damage.
Beside the jump lasts seconds and looks more like the spider is getting
weightless for a few seconds.
--
Reply to this email directly or view it on GitHub
https://github.com/mc-server/MCServer/issues/1699#issuecomment-75382291.

--
God Bless,
Jonah Sabean
http://www.jsebean.com/

@jsebean YES :dancer:


'ELEVENTY_ENV' is not recognized

I followed the instructions in the README and installed node_modules then tried to run the command:
npm start or npm run start
but I get the following error:
'ELEVENTY_ENV' is not recognized as an internal or external command,
operable program or batch file. ERROR: "eleventy:watch" exited with 1.
Is there something else that I am missing here?

Hey @JackieGable 👋
The scripts there are tailored to unix systems (Linux, macOS) — Windows is failing on the line setting the environment variable.
The best step would be to edit your copy of the package.json file and remove the ELEVENTY_ENV=development section of the eleventy:watch command.
You'll still want this variable set, so I think adding it to a .env file would be the best move — you can see 11ty's documentation on this here: https://www.11ty.dev/docs/environment-vars/#via-.env-file


[Event Request] Table 5409 Prod. Order Routing Line - Function AdjustComponents

Dear ALAppExtensions Team,
We would like to request the following event publisher in table 5409 - Function AdjustComponents, of course without the prefix DIN.
local procedure AdjustComponents(var ProdOrderLine: Record "Prod. Order Line")
var
    ProdOrderComp: Record "Prod. Order Component";
begin
    // DINNL <<
    DINOnBeforeAdjustComponents(ProdOrderComp);
    // DINNL >>
    ProdOrderComp.SetRange(Status, Status);
    ProdOrderComp.SetRange("Prod. Order No.", "Prod. Order No.");
    ProdOrderComp.SetRange("Prod. Order Line No.", ProdOrderLine."Line No.");

    if ProdOrderComp.Find('-') then
        repeat
            ProdOrderComp.Validate("Routing Link Code");
            ProdOrderComp.Modify();
        until ProdOrderComp.Next() = 0;
end;

local procedure DINOnBeforeAdjustComponents(var ProdOrderComp: Record "Prod. Order Component")

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.


Naive entries implementation

References #11.
Slower than the ruby one :(
@danielpclark if you have any optimisation in mind I'm all ears :)

@julienXX What the numbers?

bench_rust_entries	 0.842141	 0.849323	 0.831712	 0.844437	 0.857011
bench_ruby_entries	 0.558785	 0.549958	 0.551315	 0.567534	 0.536545

Without converting the strings to Pathnames in faster_path.rb I get:
bench_rust_entries	 0.584481	 0.576329	 0.585669	 0.560661	 0.581034
 PASS (2.93s) :: bench_rust_entries
bench_ruby_entries	 0.555329	 0.552907	 0.539050	 0.548887	 0.542997
 PASS (2.77s) :: bench_ruby_entries

@julienXX the lates numbers very promising, btw

@danielpclark @gogainda regarding #62 this one seems slower. Any idea on what I might be doing wrong here?

Seems that  any fancy methods such as
fs::read_dir(Path::new(r_str))

are kind of slow, I had to reinvent the wheel and operate only o array of chars in order to make implementation faster.
Try different approaches and measure the performance, no other way around

@gogainda thanks :) Did you get better results than the original C impl?

This will need to be cleaned.  These git pushes were removed from here 0172e7c, 4cbb945, 585ea2f, 884be8d
It turns out that the method only returned nil which is why it was 75% faster.  The weird thing was that all the tests passed locally.  That still has to be looked into.  Just know that the code base was reverted to 0.1.8

In my opinion, if c impl was writter with performance in mind ther is no way that rust impl wuld be faster. In reallity, not every c imp of ruby method is very fast, especially in edge cases(e.g. very long input values). So, yes, it is possible

Change vec![]; to Vec::with_capacity(usize);.  Using a Vector without setting the capacity is slow.
I haven't looked into a more optimal way to handle Ruby arrays but I have a theory about using a tuple.  If we think that Vector has more overhead and we want to get more down to the metal than that then we think about creating a collection from a fixed size.  I haven't tested the different collection types for speed and performance.
At the point you do fs::read_dir you now have enough information for the collection size.  What type does the fs::read_dir return anyways?

FYI If you don't map to Pathname.new then you will achieve equivalent performance as Pathname#entries with your current implementation.

@danielpclark saw that too, would it be okay not converting to Pathnames?

In FasterPath module itself the plain strings are preferred.  But for monkey-patching this would be considered a method regression. policy on method regressions - with the regression flag with can have the map Pathname.new on the monkey patch itself.

We can always try to improve upon our own code base too.

Oh that's neat, I had not seen the regression policy. I'll clean the PR a bit then.

@danielpclark I cleaned the PR, could find a way to get let files = fs::read_dir(r_str).unwrap(); size though so the vec has no capacity.
It's 16% slower in pbench results so I added the regression flag.

@julienXX fs::read_dir has the method [size_hint()`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.size_hint) But when I tried it for `Vec::with_capacity()` it seemed slower.

The performance issue with this is negligible.  I'm merging this in.  I've noticed a scaling performance issue with this.  But I don't think it's related to this code #94 .  You've appropriately used the WITH_REGRESSION flag so I'm merging this.